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

摘要:
试试键值数据库(二)——MongoDB的优缺点MongoDB名称取自英文单词“humongous”的中间五个字母。它是一个由C++基于分布式文件存储开发的开源数据库项目。此外,MongoDB在键值数据库中使用大量磁盘空间。在互联网上,我们可以找到MongoDB与TT、MongoDB和东京暴君的对比,这是老赵所做的。他的测试结论是MongoDB具有10-20%的性能优势,这一点也可以参考。MongoDB从1.6版开始也提供了分片接口。接下来,我们将测试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 E55062.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的分布式。

免责声明:文章转载自《浅尝key-value数据库(二)——MongoDB的优与劣》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kafka集群启停脚本参考springboot 集成swagger2.x 后静态资源报404下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

全网数据库大全

参考资源 数据库种类发展史和大数据下的数据库 NoSQL百度百科 NewSQL百度百科 分布式NewSQL对比——heaventouch大佬的博客 Google Spanner论文翻译——林子雨 人道浮沉的博客 列式数据库与行式数据库 Oracle数据库、MySQL数据库、SQL Server数据库 Oracle、Mysql、SQL Server比较 Mo...

mongodb研究(mongodb 内存数据库)

本日志大部分都不是原创的转载复制的会带链接保持版权 工作中使用mongodb已经好久了,讽刺的是到了最后快离职的时候才有时间好好研究下源码。   印象:mongodb是一个内存数据库,数据都是放到内存里面的,所以速度上不比redis慢。   想法: mongodb对数据的操作大部分都在内存中。但mongodb并不是单纯的内存数据库。甚至个人认为不属于内存数...

转:如何用plsql从oracle中导入导出数据

如何使用PLSQL Developer从oracle数据库 导入导出数据   用pl/sql developer导出表的数据时有三种方式:Oracle Export,Sql Insert,pl/sql developer   只有“Oracle Export”方式导出再导入后,表结构和索引结构没有发生变化,另两种方式都改变了索引类型。另外   Sql In...

Spark大型电商项目实战-及其改良(1) 比对sparkSQL和纯RDD实现的结果

代码存在码云:https://coding.net/u/funcfans/p/sparkProject/git 代码主要学习https://blog.csdn.net/u012318074/article/category/6744423/1这里的 发现样例作为正式项目来说效率太低了,为了知识点而知识点.对原代码做了一定优化 第1个项目:用户访问sessi...

2005数据库脚本在SQL2000上执行

在SQL2005上生成一个creat数据库脚本文件,然后在SQL2000上执行的时候,出现问题:“未能找到存储过程 'sys.sp_addextendedproperty'。”解决办法: 1、将脚本放在2005平台执行; 2、在2005环境生成脚本时修改配置:工具/选项/编写脚本/为服务器版本编写脚本/选择SQL Server 2000。这样生成的脚本,在...

Navicat安装及简单使用

一、安装   下载地址:https://pan.baidu.com/s/1bpo5mqj   下载完之后,直接解压出来就能用,看一下解压之后的目录:   双击打开下面这个文件(可以把它添加一个桌面快捷方式,或者添加到任务栏):          然后会提示你输入注册码:            回到navicat的解压出来的文件夹里面,有个叫做key.tx...