zoukankan      html  css  js  c++  java
  • 浅尝key-value数据库(二)——MongoDB的优与劣

    浅尝key-value数据库(二)——MongoDB的优与劣

    MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源项目。他的文件存储格式是BSON(Binary JSON),因此可以高效存储二进制数据,例如图像、视频等大对象。

    由于我是CentOS x86_64的系统,于是安装MongoDB非常简单:

    vi /etc/yum.repos.d/mongo.repo
    [10gen]
    name=10gen Repository
    baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
    gpgcheck=0
    yum install mongo-stable mongo-stable-server mongo-stable-debuginfo

    然后建一个数据目录/var/db/mongo

    启动服务

    mongod --dbpath /var/db/mongo --fork --logpath /var/log/mongodb.log --logappend

    之后就可以通过默认端口27017访问了。

    mongo
    >use d # 选择数据库d
    >db.c.save({_id: 0, value: "abcd"}) # 在Collection c中存入{0, "abcd"}键值对
    >db.c.findOne({_id: 0}) # 在c中查找主键为0的数据
    >db.c.find() # 列出c中的所有数据
    >use admin # 切换到admin模式
    >db.shutdownServer() # 关闭MongoDB

    那么MongoDB的性能是否如同传说中的那样出色呢?我在一台配置为Xeon E5506  2.13GHz x 4,8G内存,1TB SATA硬盘的机器上进行了测试,结果如下:

    写入:

    第一次插入500W条每条大小约2K的数据,耗时1050.2s,实际内容为12G左右,数据集占用空间为22G

    第二次再插入4500W条每条大小约2K的数据,耗时8614.4s,实际内容共为98G左右,数据集共占有空间为137G

    随机读取:

    读取32041次,耗时250.3s

    可以看出,随机读的速度非常慢,也许是由于SATA磁盘I/O性能不足吧。另外,MongoDB的磁盘空间占用也是在key-value数据库中比较大的。

    同时,同事做了与Tokyo Tyrant的对比,结论是性能差不多,磁盘空间占用稍微少一点,但是TT似乎不支持分布式。由于我没有拿到测试数据,在这里就不细说了。在网上可以找到老赵做过的MongoDB和TT的比较——《MongoDB与Tokyo Tyrant性能比较》,他的测试结论是MongoDB性能有10~20%的优势,也可以参考一下。

    由于MongoDB磁盘空间占用比较大,那么他的分布式功能就刻不容缓了。MongoDB从1.6版本开始也提供了Sharding的接口,下一篇我们会来测试MongoDB的分布式。

  • 相关阅读:
    课堂作业02
    模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    Feign使用Hystrix无效原因及解决方法
    解决Spring Boot 使用RedisTemplate 存储键值出现乱码 xacxedx00x05tx00
    consul怎么在windows下安装
    java运行jar命令提示没有主清单属性
    Maven parent.relativePath
    Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构(微服务)
    redis开启远程访问
    kibana使用
  • 原文地址:https://www.cnblogs.com/timssd/p/5448013.html
Copyright © 2011-2022 走看看