Mongodb:使用前要知道什么?[关闭]


93

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

回想一下您何时开始使用Mongodb。后来您学习了什么技术,使您说:“如果我刚开始就知道这一点!” 您发现从一开始就使用了哪些插件(如果仅知道的话)?您想为哪些参考添加书签?

Answers:


63

如果您要将MongoDB与Rails结合使用,我绝对会推荐MongoMapper的建议。但是,我会警告您,到目前为止,除了几篇博客文章外,没有任何文档。如果您不愿意深入研究源代码以查看事情的运行方式,那么可能还不适合您。

如果您在Rails以外的地方工作,建议您远离MongoMapper。因为它正在使MongoDB变得类似于我们对SQL支持的ORM的期望,所以它并不能真正使您对MongoDB的强大功能和背后的不同想法有所了解。花一些时间在较低级的ruby驱动程序上玩,甚至在javascript控制台中玩。

我建议的另一件事,尤其是自从您提到了解如何规范化架构以来,尤其是现在不要将MongoDB视为数据库。在MongoDB中组织数据的方式与关系数据库非常不同。尝试将其更多地视为存储和检索Ruby哈希的地方。您可以使用MongoDB做一些关系性的事情,但是我建议您在尝试围绕NoSQL时仅坚持使用独立的文档。

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


26

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

使用Mongoid代替Mongomapper

http://mongoid.org/

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

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

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

宝石“ mongoid”,“〜> 2.0.0.beta”

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

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

用两个词来说:伟大的社区。

有此插件可让您将Machinist与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支持该主从配置。

问我是否需要更多信息。

编辑:

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


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

按编号查找:

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

显示_id:

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

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

4. MongoDB支持LIMIT,OFFSET,ORDER

对于某些高级排序,您可以使用Aggregation Framework。

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

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

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

6.硬盘DOS

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

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


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和旧金山。


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


信不信由你,那不是我排队等待阅读的链接,它看起来像是一个不错的链接。谢谢。
韦恩·康拉德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.