MongoDb 的 MMAPv1 和 WiredTiger 存储引擎空间对比(800万文档 )

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.ns
  drwxr-xr-x 4.0K journal
  drwxr-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.wt
  drwxrwxr-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




你可能感兴趣的:(DB)