学习MongoDB过程中零散的知识

    本人小白,学习mongodb俩月不到,以前也没接触过其他数据库,现在慢慢在啃MongoDB,本帖贴一些平常学习过程中搜集到的零散的知识、技巧。


以下内容由以下文章提取并加入自己的平常搜集到的零散知识,不断更新。谢谢原po.

http://database.51cto.com/art/201012/241103.htm 

http://www.programmer.com.cn/9999/


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

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

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

1.使用64位版本MongoDB

    32位版本最多存储2.5GB数据。因为MongoDB在内部实现上是通过内存映射的方式来提高性能的,32位系统的内存地址本身就限制了数据容量。当然,做练习用,32位已足够。但当你开始配置你的生产性(或用于演示)的时候,推荐选择64位版本,因为以后无法通过“修复”来解决此问题,只能重新安装。

2.在另外一台机器上创建一个从数据库作为副本

            如果用单台服务器(一个mongodb服务器进程),指示用作学习和开发,是可以的。但是,如果用到生产环境中,风险会很高:若服务器崩溃了或者不可访问,数据库至少会有一段时间不可用。如果是硬件出了问题,可能需要将数据转移到另一台机器上。在最坏的情况下,磁盘或者网络问题可能会导致数据损坏或者数据不可访问。

    如果你的MongoDB实例崩溃了(或者由于OOM[Out of Memorya内存溢出]挂掉了,或者整个系统崩溃),那么谁也无法保证你的数据库会怎么样。你可以进行修复,但这无法保证结果是什么。所以最好的办法就是,如果你真的珍惜你的数据,你应该把数据库放到另一个服务器上,VPS(Virtual Private Server虚拟专用服务器)可以考虑。

    总是使用Replicca Sets:Replica Sets通过自动failover机制提供MongoDB的高可用性。在应用中,如果primary机器出现故障,那么某一台secondary机器就会通过选举成为新的primary,整个集群的仍然能够提供正常服务。我们的服务不会支持无同步机制的MongoDB布置方案,如果开发者自己的环境中个同步机制的代价过高,我们建议其使用一些云存储服务。Engine Yard目前已近关于MongoHQ和MongoLab都建立了合作关系。开发者可以在合作者页面找到更多这方面信息。

3.让他更安全

    在默认情况下,MongoDB不会进行身份验证,并且会监听所有的网络端口(如果你是从他们的官方站点获得的版本;各种Linux发行版,例如Debian和Ubuntu)在默认情况下都只绑定到127.0.0.1,这才是明智的),这就是说如果你在一个面向公众的服务器上使用它,在世界上任何地方,任何人都可以访问你的数据库。

    所以最好将MongoDB设置成身份验证,或者让MongoDB之监听loclahost.

4.经常使用getLastError()

    如果你不需要闪电般的速度,花一点时间来确保你的变更对于这个数据库是OK的,并且对数据库进行修改并没与造成什么问题,绝对是值得的。因为一旦存在问题,那么应该在你的应用程序中把它们记录下来,一旦出了故障,可以在需要的时候恢复。

    另:如果你确定你需要使用getLastError(),那么至少不要混合使用,也不要再同一个集合上使用它。MongoDB无法确保命令会按照指定的顺序来执行。在我的测试代码中,我做了一个一步的remove()调用,即无需等待这个函数执行完毕,然后在remove(可能是全部移除也可能是只移除一部分)以前,我插入了一些新的条目。

5.保持版本更新

    保持版本更新很重要,10gen(10gen 既是一个云平台,又是一个可下载的开放源代码包,可用于创建您自己的私有云。)在每个版本中都会修复一些问题,使MongoDB运行更出色。

6.默认开启journaling日志

    MongoDB支持在写操作前纪录journal日志来提高节点的可用性(设置写入安全writeConcern级别)。强烈建议在部署时开启journaling日志。注意数据文件的存放位置。在使用时,确认数据文件处于一个持久化存储中比如(/data/mongodb目录)。也可以使用费持久化的设备进行数据文件存储,不过一定小心,可能会对集群架构造成影响。推荐使用EBS进行MongoDB的数据文件存储。热数据最好能存放在内存中。能够保持热数据(以及索引数据)一直放在内存中,会提高整个集群性能。


7.一个I/O请求到达磁盘前,可能经过多层缓存:

①系统级文件系统缓存;

②存储控制器软件级缓存;

③磁盘设备本身自带的硬件缓存。


8.清除缓存注意

在drop_caches之前一定先用sync命令将所有未写的缓冲区写到磁盘。


9.MongoDB下载源码安装

(以2.6.5为例)

下载并解压后源码文件夹:mongo-r2.6.5

进入文件夹:cd mongo-r2.6.5

编译全部:scons all

(若cup有多核,可执行” scons all -j cup核数 “  来加速编译过程)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值