Mongodb:使用前知道什么?

我使用Ruby on Rails开始了一个业余爱好(非收入)项目。 我已经使用Postgresql在Rails中进行了相当多的开发,我可以很好地模拟规范化的模式。 然而,Mongrodb看起来有光泽和新的。 还有什么更好的尝试新的东西比爱好项目?

回想一下当你开始使用Mongodb。 你后来学到了什么技术让你说:“只要我开始的时候就知道了!” 你发现什么插件,如果你知道的话,你会从一开始就使用它? 你想collections什么书?

如果你打算使用MongoDB和Rails的话,我肯定会再次推荐MongoMapper。 但是,我会提醒你,迄今为止,除了一些博客文章外,还没有任何文档。 如果你不习惯挖掘源代码来看看事情是如何工作的,那可能还不适合你。

如果你在Rails之外工作,我build议远离MongoMapper。 因为MongoDB正在将MongoDB转化为类似于我们对SQL支持的ORM的期望,所以并不能真正了解MongoDB背后的力量和思想。 花一些时间玩下级的ruby司机,甚至在JavaScript控制台。

我build议的另一件事,特别是因为你提到知道如何规范一个模式,现在把MongoDB当作数据库。 在MongoDB中组织数据的方式与关系数据库有很大不同。 尝试更多地考虑它作为存储和检索Ruby散列的地方。 你可以用MongoDB做一些关系型的事情,但是当你试图围绕NoSQL的时候,我build议只使用独立的文档。

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

我几乎和你在同一个阶段。 用MongoDB开始一个新项目。 我有7周左右的经验。 这是我发现非常有用的:

使用Mongoid而不是Mongomapper

http://mongoid.org/

文档非常好。 认真,优秀。 它应该花费大约15分钟阅读所有的文档,你会有一个非常确切的想法,你可以做什么,不能用Mongoid做什么。

明天,mongoid的新主要版本的候选版本将被释放。 这将带来很多有用的东西。

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

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

目前的testing版是20,但正如我所说,明天有发布候选人。

此外,我也征服你join谷歌组。 它的stream量很低,人们很乐意回答任何问题。 例如,我向他们展示了我的第一个数据库模型devise,他们给了我很多方法来改进。 Mongoid的创build者也回答你的问题。

用两个字:伟大的社区。

有这个插件,使您可以使用mongo的机械师:

https://github.com/nmerouze/machinist_mongo

工作得很好。

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

你可以使用伪造与机械师。 真棒组合。

https://github.com/sevenwire/forgery

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

事实上,它可能比我们以前做的更快。 这是因为mongo支持分片。 分片意味着您可以使用一组计算机来为Mongo数据库提供服务。 它是无缝的。 主从。 所以你可以从很多计算机提供一个文件,每个文件都发送一个文件。 它的尺度非常好:)

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

Mongoid支持主从configuration。

问我是否需要更多信息。

编辑:

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

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

通过id查找:

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

显示_id:

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

_id也是唯一的每个集合,可以在其他服务器上不同

4. MongoDB支持LIMIT,OFFSET,ORDER

对于一些高级sorting,你可以使用Aggregation Framework。

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

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

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

6.硬盘DOS

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

7.以前用MongoDb出现了一些问题,但是现在3.0非常棒,稳定。

这里是一个很好的初学者/从.NET岩石的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和旧金山。

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

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