93

我正在使用 Ruby on Rails 开始一个爱好(非收入)项目。我已经使用 Postgresql 在 Rails 中进行了大量开发,并且可以很好地模仿规范化模式。然而,Mongrodb 看起来又亮又新。有什么比业余项目更适合尝试新事物的呢?

回想一下你开始使用 Mongodb 的时候。你后来学到了什么技巧,让你说,“要是我开始的时候就知道就好了!” 如果您知道的话,您发现哪些插件会从一开始就使用?您希望为哪些参考文献添加书签?

4

5 回答 5

63

如果您打算将 MongoDB 与 Rails 一起使用,我肯定会支持 MongoMapper 的建议。但是,我会警告您,除了几篇博客文章之外,(到目前为止)没有任何文档。如果您不愿意深入研究源代码以了解其工作原理,那么它可能还不适合您。

如果您在 Rails 之外工作,我建议您远离 MongoMapper。因为它使 MongoDB 成为类似于我们对 SQL 支持的 ORM 所期望的东西,所以它并不能真正让您很好地了解 MongoDB 的强大功能和不同的思维方式。花一些时间玩弄低级别的 ruby​​ 驱动程序,甚至在 javascript 控制台中。

我建议的另一件事,特别是因为您提到知道如何规范化模式,现在不要将 MongoDB 视为数据库。在 MongoDB 中组织数据的方式与使用关系数据库非常不同。尝试将其更多地视为存储和检索 Ruby 哈希的地方。您可以使用 MongoDB 做一些关系性的事情,但我建议您在尝试使用 NoSQL 时只坚持使用自包含文档。

至于您应该查看哪些链接,我强烈建议您阅读 MongoDB 站点上的所有内容。他们的文档非常好。特别是,看看高级查询多键索引MapReduce,以了解 NoSQL 数据库的一些独特优势和优势。

于 2010-01-26T22:28:40.427 回答
26

我和你几乎处于同一阶段。使用 MongoDB 开始一个新项目。我大约有 7 周的经验。这是我发现非常有用的:

使用 Mongoid 而不是 Mongomapper

http://mongoid.org/

文档非常好。认真的,优秀的。阅读所有文档大约需要 15 分钟,您将对 Mongoid 可以做什么和不能做什么有一个非常准确的概念。

明天,将发布新的主要版本 mongoid 的候选版本。它会带来很多有用的东西。

我正在使用 Rails 3。要安装开发版本,请将其添加到您的 gem 文件中:

gem 'mongoid', "~>2.0.0.beta"

当前的 beta 版本是 20,但正如我所说,明天会有发布候选版本。

另外,我建议您也加入 google 组。它的流量很低,人们非常愿意回答任何问题。例如,我向他们展示了我的第一个 DB 模型设计,他们给了我很多改进的方法。Mongoid 的创建者也回答了您的问题。

用两个词:伟大的社区。

有这个插件可以让你在 mongo 中使用 Machinist:

https://github.com/nmerouze/machinist_mongo

效果很好。

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git',
:branch => 'machinist2'

您可以将 Forgery 与机械师一起使用。很棒的组合。

https://github.com/sevenwire/forgery

还有一点我想说。我来自关系数据库世界,所以一开始这听起来很奇怪:您可以将文件保存在 mongo 数据库中。

事实上,它可能比我们以前那样管理它们更快。这是因为 mongo 支持分片。分片意味着您可以使用一组计算机来为 Mongo 数据库提供服务。它是无缝的。主从。因此,您可以从多台计算机提供文件,每台计算机发送一个部分。它的扩展性很好:)

这是使用 GridFS 完成的。http://www.mongodb.org/display/DOCS/GridFS

Mongoid 支持主从配置。

问我是否需要更多信息。

编辑:

另外:http ://railscasts.com/episodes/238-mongoid

于 2011-01-06T21:37:06.817 回答
8

1.查询不区分大小写

情商

"_id": "1da259c70fe3392c3b000002",
"name": "Dany"

array('name' => 'dany') :: results 0
array('name' => 'Dany') :: results 1

2.最后插入ID:

$coll->insert($user, true);
echo (string) $user['_id'];

3._id是一个MongoId对象

按 id 查找:

$p->findOne(array('_id' => new MongoId( $UID  )), array('proj'));

显示_id:

$coll['_id'] = ( string ) $coll['_id'];

此外 _id 仅在每个集合中是唯一的,在其他服务器上可能不同

4. MongoDB 支持 LIMIT,OFFSET,ORDER

对于一些高级排序,您可以使用聚合框架。

5、在SQL中是Sql注入在MongoDB中是Array注入

所以当写一些数据时使用(字符串)或检查 is_array

$req = (string) $range['name'];

6.硬盘DOS

PHP 中的默认 _POST 大小为 8MB,在 Mongo 中,每个文档有 16MB 的限制。所以想象一些用户在你的分析脚本中欺骗 eq USER_AGENT STRING,然后每次插入发送 16MB。

7. MongoDb 过去存在一些问题,但现在 3.0 非常棒且稳定。

于 2011-10-10T18:36:04.177 回答
3

这是来自 .NET Rocks 的 MongoDb 播客的一个很棒的初学者/介绍 -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf 接受采访……他从事 MongoDb 项目。哦,音质很棒。

Mike Dirolf 是 10gen 的一名软件工程师,负责 MongoDB 项目。他主要致力于 Python 和 Ruby 的客户端驱动程序,但也抽出时间谈论 MongoDB - 他曾在 EuroPython、Strange Loop Conf、RubyEnRails、RuPy 和 RubyConf 以及纽约市、伦敦、华盛顿的聚会小组中发表演讲华盛顿特区和旧金山。

于 2010-02-01T10:28:07.750 回答
2

你应该明确地看看 junemakers mongo-mapper: http: //github.com/jnunemaker/mongomapper但我也建议你玩一点纯 Ruby Mongo 驱动程序,看看 mongo-mapper 是如何工作的。使用 Ruby 将一些数据放入 Mongo 数据库并不难。

我猜你已经找到了 Ruby Mongo 教程。以防万一你没有,这里是链接:http ://www.mongodb.org/display/DOCS/Ruby+Tutorial

于 2010-01-24T11:57:20.520 回答