MongoDb 的MMAPv1和WiredTiger存储引擎空间对比(800万文档 )
MongoDB的使用经验
- 版本:3.0.6
- 数据量:876万个html片段
- 选择mongoDB的原因,存储的对象是文档格式。
- MongoDb 和 MySql 的可比性,相当于Java和JavaScript的可比性
-
数据插入和更新的效率
- 最高插入记录一秒钟50个记录,同时更新20个记录,表现稳定
关于翻页的效率
- MongoDB的翻页效率明显低。使用find(filter).skip().limit()的方式,不使用索引,通过全表扫描的方式进行的,如果记录数量上百万,系统几乎不可用。
- 翻页采用 ( X > _id ) .limit() 的方式后,使用了_id索引,翻页耗时基本相同。
使用MySql MyISAM引擎, 占用空间:75G
$ sudo ls -lth /jiubugaosuni/mysql_data/data/sample_doc/total 75G-rw-rw---- 1 327M doc_content.MYI-rw-rw---- 1 74G doc_content.MYD-rw-rw---- 1 13M shareholder.ibd-rw-rw---- 1 14M person.ibd-rw-rw---- 1 12M changerecord.ibd-rw-rw---- 1 21M basic.ibd-rw-rw---- 1 368K branch.ibd-rw-rw---- 1 14K shareholder.frm-rw-rw---- 1 8.8K person.frm-rw-rw---- 1 21K changerecord.frm-rw-rw---- 1 8.8K branch.frm-rw-rw---- 1 34K basic.frm-rw-rw---- 1 8.5K doc_content.frm-rw-rw---- 1 112K doc_details.ibd-rw-rw---- 1 8.6K doc_details.frm-rw-rw---- 1 61 db.opt
使用MMAPv1存储引擎,占用空间 111G
$ ls -lth /jiubugaosuni/xiaolongren/mongo3data/total 111G-rw------- 2.0G document.58-rw------- 2.0G document.57-rw------- 2.0G document.x-rw------- 2.0G document.x-rw------- 2.0G document.x-rw------- 2.0G document.6-rw------- 2.0G document.5-rw------- 1.0G document.4-rw------- 512M document.3-rw------- 256M document.2-rw------- 128M document.1-rw------- 64M document.0-rw------- 16M document.nsdrwxr-xr-x 4.0K journaldrwxr-xr-x 4.0K _tmp-rw------- 64M local.0-rw------- 16M local.ns-rwxr-xr-x 5 mongod.lock-rw-r--r-- 69 storage.bson-rw------- 16M test.ns-rw------- 64M test.0-rw------- 16M mongo_test_db_001.ns-rw------- 64M mongo_test_db_001.0
weibo.com/tianchunfeng 微博交流
使用WiredTiger存储引擎,并启用压缩功能,占用空间30G
$ ls -lth /jiubugaosuni/xiaolongren/mongo3wiredtigerdata/total 30G-rw-r--r-- 894 WiredTiger.turtle-rw-rw-r-- 44K WiredTiger.wt-rw-rw-r-- 36K sizeStorer.wt-rw-r--r-- 30G collection-0-5129251031362114904.wt-rw-r--r-- 82M index-1-5129251031362114904.wtdrwxrwxr-x 4.0K journal-rw-rw-r-- 32K _mdb_catalog.wt-rw-rw-r-- 32K collection-0--7409425942265573036.wt-rw-rw-r-- 32K index-1--7409425942265573036.wt-rwxrwxr-x 6 mongod.lock-rw-rw-r-- 95 storage.bson-rw-rw-r-- 533 WiredTiger.basecfg-rw-rw-r-- 46 WiredTiger-rw-rw-r-- 21 WiredTiger.lock
关于_id 值
- 在新增文档的时候,如果不指定_id字段的值,mongoDB 会自动生成一个唯一值。在与Mysql结合使用的场景下,可以把对应Mysql主键值当作mongoDB _id 值。
其他
- 用mongoDB存储文档类或小文件类的数据,且数据带有一部分的元数据;
- 以主键建立关联,用MySql满足复杂的查询需求,用mongoDB满足多变的schema数据结构需求;
- MySql是面向字段的,mongoDB 是面向内容的
- 字段名尽量短一点,mongoDB占用空间比MySql多
参考
- mongodb data compression
- 微博: weibo.com/tianchunfeng