我正在使用Ruby on Rails开始一个业余爱好(非收入)项目.我使用Postgresql在Rails中做了大量的开发,我可以很好地模仿规范化的模式.然而,Mongrodb看起来有光泽和新颖.尝试新的东西比业余爱好项目更好吗?
回想一下您何时开始使用Mongodb.你后来学到了什么技巧让你说:"我开始的时候才知道这一点!" 如果只有你知道的话,你发现你从一开始就使用了哪些插件?你想要什么参考书签?
如果你要使用带有Rails的MongoDB,我绝对会推荐MongoMapper的推荐.但是,我会警告你,除了几篇博文之外,还有(到目前为止)没有文档.如果您不习惯深入了解源代码以了解其工作原理,那么可能还不适合您.
如果你在Rails之外工作,我建议远离MongoMapper.因为MongoDB的工作方式类似于我们对SQL支持的ORM的期望,所以它并没有真正让你对MongoDB背后的不同思想的力量有所了解.花一些时间玩下层红宝石驱动程序,甚至在javascript控制台中.
我建议的另一件事,特别是因为你提到了如何规范化模式,现在不要将MongoDB看作数据库.您在MongoDB中组织数据的方式与使用关系数据库的方式非常不同.尝试将其视为存储和检索Ruby哈希的地方.你可以用MongoDB做一些关系事情,但是我建议你在试图绕过NoSQL的时候只使用自包含的文件.
至于你应该看哪些链接,我强烈建议你阅读MongoDB网站上的所有内容.他们的文件非常好.特别是,请查看高级查询,多键索引和MapReduce,以了解NoSQL数据库的一些独特优势和优势.
我和你几乎处于同一个阶段.使用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
EQ
"_id": "1da259c70fe3392c3b000002", "name": "Dany" array('name' => 'dany') :: results 0 array('name' => 'Dany') :: results 12.最后插入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中,MongoDB中的Sql注入是数组注入所以当写一些数据时使用(字符串)或检查is_array
$req = (string) $range['name'];6. HDD DOS
默认_POST大小在PHP中是8MB,IN Mongo每个文件有16MB的限制.因此,假设某些用户在您的分析脚本中欺骗eq USER_AGENT STRING,然后每个插入发送16MB.
7.过去使用MongoDb存在一些问题,但现在3.0非常棒且稳定.