对mongodb 的 WiredTiger Storage Engine 的理解

  今天看了mongodb的官方文档中的WiredTiger Storage Engine ,说说我对WiredTiger Storage Engine 的理解!

  在mongodb3.2版本以后,wiredTiger 存储引擎为默认的储存引擎。

Document Level Concurrency

  WiredTiger 的写操作使用了Document 级别的并发控制,因此多个clients可以同时同一个collection 中的不同的document  进行修改。

  为了尽可能多的读和写操作,WiredTiger 使用了optimistic  concurrency control(乐观的并发控制),相当于乐观锁,WiredTiger的全局的专一的锁,仅仅存在于database 和 collections 级别,例如:drop 一个collections,需要一个database级别的锁。当存储引擎在database 和collection的锁之间发生冲突时,其中的一个将会引发数据库写的冲突导致mongdb 去重新进行此操作。

Snapshots and Checkpoints

  WiredTiger 使用 多版本并发控制(MVCC)。再开始的操作中,WiredTiger 为这个事务提供一个数据的时间点的快照(snapshot),一个快照呈现一组在内存中的数据的视图。

  当写进磁盘时,WiredTiger 把所有的在snapshot中的数据通过相同的方法传递到磁盘中的数据文件。把在数据文件中的久经耐用的数据作为一个检查站(checkpoint),这个检查站确保数据文件和上一个检查站的数据是一致的,包括最后一个检查站。eg:检查站可以作为数据的恢复的点。mongodb配置的WiredTiger 去创建的站点是在间隔60秒或者2 GB的日志数据。

  在写一个新的站点期间,如果前面一个站点仍然是有效的,就这点而论,如果mongodb 意外结束或者突然遇到一个错误,再重新开始之前,mongodb 可以从上一个有效的checkpoint恢复数据。

  当WiredTiger 元数据的表被原子性的更新到新的检查站点的说明文档时,这个新的站点变得可用和稳定,一但新的站点变的可用,WiredTiger会释放pages从旧的检查站点。

Journal

  WiredTiger 使用一个write-ahead 处理log, 并且结合检查站点去确保数据的耐久性。

  WiredTiger 日志呈现了所有的数据在检查站点之间的变化,如果mongodb在检查站点之间退出,它使用日志去重新从上一个检查站点更新所有的被修改的数据,信息更新的频率和mongodb把日志数据写到磁盘的频率相同。WiredTiger 的日志是使用了快速压缩库被压缩,如果自己想指定一个混合的压缩运算或者不压缩使用 storage.wiredTiger.engineConfig.journalCompressor 

  WiredTiger的最小的log 记录大小是128 bytes。如果一个log 记录小于等于128 bytes, WiredTiger 不会压缩这个log 记录。

Compression

  在mongodb中,使用WiredTiger ,mongodb 支持压缩为所有的collection 和index ,压缩是使用额外CPU的开支减少存储空间。默认的情况下,WiredTiger使用块级别的压缩,所有的collections 被使用快速压缩库,所有的索引(index)被使用前缀压缩。在压缩collections 的时候 ,块级别的压缩用 zlib  也是可用的,去指定一个轮流的压缩运算或者不压缩,使用storage.wiredTiger.collectionConfig.blockCompressor ,假如你不想去压缩index,你可以看下storage.wiredTiger.indexConfig.prefixCompression

  对于大多数工作的负载,默认的压缩设置平衡了存储效率和处理要求。

Memory Use

  mongodb 使用WiredTiger,mongodb 利用WiredTiger内部的cache和文件系统的cache。

  在mongdb 3.4 的版本以后,WiredTiger 内部的cache将变得更大:50%内存减去1GB 或者是256MG,通过文件系统的cache ,mongodb 自动的使用所有的空闲的内存,这些内存是不被WiredTiger cache 或者其他进程使用的。数据是在文件系统的cache里被压缩的。去调整WiredTiger内部cache 的大小可以看storage.wiredTiger.engineConfig.cacheSizeGB

切记 ,不要调整WiredTiger内部cache的大小超过默认值。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.3px Helvetica; color: #525252; background-color: #fdf9bf }
span.s1 { }

时间: 2024-12-15 19:02:53

对mongodb 的 WiredTiger Storage Engine 的理解的相关文章

MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

今晚在自己老式笔记本来试了一下MongoDB的安装,由于配置比较低,只能选择32位版本的MongoDB进行安装,在安装过程中碰到了上述标题所示错误,自己也捣鼓了一个小时左右,终于在一篇博客中找到答案,具体原文链接如下:http://blog.csdn.net/u013457382/article/details/50775268 MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

mongodb 切换wiredtiger

1.由于最近用到mongodb但查询时前十分左右,用压力测试不太稳定,所以换成第三方引擎试试,但效果还是一样. 具说第三方引擎比较给力,但在使用没有发现.现将mongodb切换wiredtiger引擎的配置如下: destination: file path: /soft/mongodb/log/log.txt logAppend: true processManagement: fork: true storage: journal: enabled: true dbPath: /soft/m

mysql 1030 Got error 28 from storage engine

mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth=1 查看目录的大小,删除一部分内容

MySQL出现1030-Got error 28 from storage engine错误

Navicat for MySQL出现1030-Got error 28 from storage engine错误  刚刚还能用这会儿就用不了了,估计是磁盘空间不足引起的! 在根目录/下执行命令:df -h [[email protected]localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 48G 0 100% / tmpfs 1.9G 448K 1.

[转]Inside the Storage Engine: Ghost cleanup in depth

Inside the Storage Engine: Ghost cleanup in depth By: Paul Randal Over the years I was in the Storage Engine team I saw a lot of concern on the various forums about the ghost cleanup task. There have been a few bugs with it in previous versions  (see

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2.修改my.ini文件,把skip-innodb这行注释掉       3.打开MySQL数据库 原因:没有开启MySQL InnoDB存储引擎. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

Unknown/unsupported storage engine: InnoDB

症状:无法启动mysql,在“mysql数据库目录/主机名.err”日志文件中报错 Unknown/unsupported storage engine: InnoDB原因:MySQL5.5.8 GA默认引擎为InnoDB,而配置文件(my.cnf)中设置了skip-innodb解决:在配置文件(my.cnf)中设置default-storage-engine=MyISAM Error:2013-08-18 21:08:37 21440 [Note] Plugin 'FEDERATED' is

You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine.

w https://dev.mysql.com/doc/refman/5.7/en/create-index.html MySQL :: MySQL 5.7 Reference Manual :: B.5.4.3 Problems with NULL Valueshttps://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html You can add an index on a column that can have NULL va

MySQL启动时报Plugin 'InnoDB' registration as a STORAGE ENGINE failed.错误

当更改了MySQL参数后,重新启动MySQL数据库,查看日志发现以下错误信息 141029  2:23:37 [ERROR] Plugin 'InnoDB' init function returned error.141029  2:23:37 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 解决办法 [[email protected] mysql]# lsibdata1  master.info    mys