日期:2014-05-16 浏览次数:20479 次
?
我之所以喜欢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视屏对于入门来说,是绝佳的视频教程。
?
来源:http://club.topsage.com/thread-2358393-1-1.html
?
?
I
I
I
I
I
I
?