Mongodb:使用前要知道什么?

时间:2010-01-23 18:50:06

标签: ruby-on-rails ruby mongodb mongomapper

我正在使用Ruby on Rails开始一个业余爱好(非收入)项目。我使用Postgresql在Rails中做了大量的开发,我可以很好地模仿规范化的模式。然而,Mongrodb看起来有光泽和新颖。尝试新的东西比业余爱好项目更好吗?

回想一下您何时开始使用Mongodb。你后来学到了什么技巧让你说:“我开始的时候才知道这一点!”如果只有你知道的话,你发现你从一开始就使用了哪些插件?你想要什么参考书签?

5 个答案:

答案 0 :(得分:63)

如果您打算将MongoDB与Rails一起使用,我肯定会推荐MongoMapper。但是,我会警告你,除了几篇博文之外,还有(到目前为止)没有文档。如果您不习惯深入了解源代码以了解其工作原理,那么可能还不适合您。

如果你在Rails之外工作,我建议远离MongoMapper。因为MongoDB的工作方式类似于我们对SQL支持的ORM的期望,所以它并没有真正让你对MongoDB背后的不同思想的力量有所了解。花一些时间玩下层红宝石驱动程序,甚至在javascript控制台中。

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

至于你应该看哪些链接,我强烈建议你阅读MongoDB网站上的所有内容。他们的文件非常好。特别是,请查看advanced queriesmultikey indexesMapReduce,了解NoSQL数据库的一些独特优势和优势。

答案 1 :(得分:26)

我和你在同一个舞台上。使用MongoDB启动新项目。我大约有7周的经验。这是我发现非常有用的东西:

使用Mongoid而不是Mongomapper

http://mongoid.org/

文档非常好。说真的,优秀。阅读所有文档大约需要15分钟,你将非常准确地了解你可以做什么,不能用Mongoid做什么。

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

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

gem'mongoid',“〜> 2.0.0.beta”

目前的测试版是20,但正如我所说,明天有候选版本。

此外,我也很高兴你加入谷歌小组。它的流量很低,人们非常愿意回答任何问题。例如,我向他们展示了我的第一个数据库模型设计,他们给了我很多方法来改进它。 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 with Machinist。很棒的混合。

https://github.com/sevenwire/forgery

我想说的另一件事。我来自一个关系数据库世界,所以这开头听起来很奇怪:你可以将文件保存在mongo数据库中。

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

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

Mongoid支持主从配置。

询问我是否需要更多信息。

编辑:

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

答案 2 :(得分:8)

1。查询其不区分大小写的

eq

"_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对象

按身份查找:

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

显示_id:

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

此外,_id仅对每个集合唯一,在其他服务器上可以不同

4。 MongoDB支持LIMIT,OFFSET,ORDER

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

5。在SQL中,MongoDB中的Sql注入是数组注入

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

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

6。 HDD DOS

默认_POST大小是PHP的8MB,IN Mongo每个文件有16MB的限制。因此,假设某些用户在您的分析脚本中欺骗eq USER_AGENT STRING,然后每个插入发送16MB。

7。过去使用MongoDb时遇到了一些问题,但现在3.0非常棒且稳定。

答案 3 :(得分: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以及纽约市,伦敦,华盛顿的聚会小组上发表演讲。 DC和旧金山。

答案 4 :(得分: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