首页 > NoSql > 入门MongoDB,你需要注意的4个技巧

入门MongoDB,你需要注意的4个技巧

作者写下这篇文章的用意,就是提醒广大DBA不要重蹈覆辙。特别是MongoDB初学者需要注意这四个技巧,会避免你走很多弯路。

我之所以喜欢MongoDB,主要是因为在动态语言中使用它是如此的简单,自然。到目前为止,我已经在两个项目(Encode 和 Sparrw)中使用过它了,虽然对这个选择我非常满意,但是有些问题我还是没有注意到,这些问题让我抓了好几个小时的头皮才解决。如果你有多台机器,然后为数据库多分配几台机器,那么有些问题可以迎刃而解,但是我的项目是运行在单个(虚拟)服务器之上的低流量Web应用程序。

(关于MongoDB,具体可以参考:http://www.mongodb.org/)

(关于作者的两个项目Encode 和 Sparrw,分别可以参考:http://en.co.de/和http://sparrw.com/)

这些问题都很简单,都是一些文档化的东西,不是什么Bug(当然,这要看你问谁了)。如果你读过所有的文档,那么这些问题可能你基本都见过了。我也是,但是在那之后,当再次遇到它们的时候,我就把文档中的内容都忘到脑后了,然后,我不得不再次修复它们。

使用64位的版本

32位的版本最多只能存储2.5GB的数据。当然,如果随便玩玩的话,这可能已经足够了。但是当你开始配置你的生产性(或用于演示的)系统的时候,记住要选择64位的版本,因为以后你无法通过“修复”来解决这个问题,你只能重新安装。

在另外一台机器上创建一个从数据库

如果你的MongoDB实例崩溃了(或者由于OOM挂掉了,或者整个系统都崩溃了),那么谁也无法保证你的数据会怎么样。你可以进行修复,但是这有点像运行fsck或买彩票——你永远都无法知道你将会得到什么结果。所以你应该创建一个从数据库(或者做一个“replica set”),并且,你应该把这个从数据库放到另外一个服务器上。如果一个VPS(Virtual Private Server 虚拟专用服务器)刚好可以满足你的(或其他人的)需要,那么这的确是一件麻烦事,但是,如果你珍惜你的数据的话,这是不可避免的。

让它更安全

在默认情况下,MongoDB不会进行身份验证,并且,它会监听所有的网络接口(对于你直接从他们的官方站点上获得的那个版本来说,这就是事实;各种Linux发行版(例如:Debian 和 Ubuntu)在默认情况下,都只绑定到127.0.0.1,这是十分明智的),这就是说,在世界上的任何地方,任何人都可以访问你的数据库。如果你在一个面向公众的服务器上使用它,那么这的确是一个问题。你可以把它设置成必须进行身份验证,也可以让MongoDB只监听localhost。我比较喜欢后者,因为在我的服务器上,我是唯一一个用户。

总是使用getLastError

如果你不需要闪电般的速度,花一点时间来确保你的变更对于这个数据库来说是OK的,并且对数据进行修改并没有造成什么问题绝对是值得的——如果存在什么问题的话,那么应该在你的应用程序中把它们记录下来,让你知道数据库发生了一些故障。或者,如果你确定你需要使用getLastEror(),那么至少不要混合使用,也不要在同一个集合上使用它。MongoDB无法确保命令会按照指定的顺序来执行。在我的测试代码中,我做了一个“异步的”remove()调用(也就是说,我无需等待这个函数执行完毕),然后,在remove()愉快地移除它们(可能已经把它们全部移除,也可能只是移除了其中的一部分,还可能什么也没有移除,这主要取决于竞争)以前,我插入了一些新的条目。这让我困惑了好几个小时。

有许多在线的文档,在各种论坛,也可以找到很多这方面的信息,如果你能通过更简洁的方式获得这方面的信息,那也不错。对于这方面来说,我发现《MongoDB: The Definitive Guide book》 和 10gen videos都很有帮助——例如,deployment strategies视屏对于入门来说,是绝佳的视频教程。

(关于《MongoDB: The Definitive Guide book》 ,具体可以参考:http://oreilly.com/catalog/0636920001096)

(关于10gen videos,具体可以参考:http://www.10gen.com/video)

(关于deployment strategies,具体可以参考:http://www.10gen.com/video/mongosv2010/deployment)

我希望我总结的这几个技巧可以帮助你避免我使用MongoDB的时候曾经犯过的几个错误:-)

原文标题:4 Tips for MongoDB Beginners

  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks