WiredTiger数据存储引擎是一个高性能,可扩展,支持事务,拥有产品级别,开源的NOSQL数据引擎。它的目的就是最大化你买的每一个电脑的价值。
1.WiredTiger提供低延迟和高吞吐量。(在cache中的读操作不需要latch,而写需要一个单独的latch)(不懂)
2.WiredTiger处理比RAM大的数据集时,没有性能和资源方面的恶化。
3.WiredTiger在处理大量访问和大数据集时的行为是可以预测的。
4.WiredTiger提供事务语义而不用blocking(这里意思是使用NO-Blocking IO)。
5.WiredTiger存储的数据不会被断写损坏,因为在系统故障后会恢复到一个检查点(checkpoint)。
6.WiredTiger支持PB级别的表,4G大小的record,64-bits的record数量。
WiredTiger在设计时遵守以下几个核心的原则:
一:多cpu核心扩展
WiredTiger的扩展技术是基于现代多CPU结构的架构。使用了多种编程技术例如:hazard pointers,lock-free算法,fast latching和message passing。它可以更好地利用每一个CPU核心。
WiredTiger的事务使用了一种优化的并发控制算法,这种算法有效地避免了集中式锁管理的性能瓶颈。一个线程中的事务性操作不会阻塞另一个线程的事务性操作。它提供了健壮的隔离级别,并且可以检测到update操作的冲突。
二:Hot caches
WiredTiger同时支持两种数据存储方式 row-oriented storage和column-oriented storage.这两种存储方式又为何物?row-oriented storage是把一行数据存储在一起,而column-oriented storage是把每列数据存储在不同的文件中。
这样做可以更高效地使用存储空间。当你读或写以列存储的数据时,只有与查询相关的列文件会被放入内存。列存储的核心问题是值存储在表中的逻辑位置,而不是物理位置。最后补充一点,行和列的存储方式可以在表的级别上混合和匹配:例如一个以行方式存储的索引可以被创建在一个以列存储的表中。
WiredTiger之所以写的速度非常快,究其根本原因是使用了LSM算法。(LSM可以查询相关资料,WiredTiger的LSM实现也可以查询相关资料)
WiredTiger支持不同类型的Btree结点,从而增加了内存的使用效率。
WiredTiger支持前缀压缩算法和值字典。
WiredTiger支持使用huffman engine进行静态编码。
三:提高I/O的价值
WiredTiger使用紧凑的文件格式,来减少硬盘消耗。WiredTiger不会在磁盘上存储页面内容的索引信息,而是在页被读或被需要时实例化内容的索引信息。这样做简化了文件格式,就拿小型K/V文件来说,它可以减少20%-50%的文件写入。
WiredTiger支持可变长度的页,这意味着对于大对象来说,浪费的空间减小了。你不必为压缩而烦恼,因为当K/V键值对插入和删除时,页会自然的增长和收缩。
WiredTiger可对表页上的块进行压缩。因为WiredTiger支持可变长度的页,所以页不必收缩*固定*的大小来进行块压缩。块压缩对于页来说是可选的,使用者可以自行选择适合自己的压缩算法,块压缩可以减少30%-80%的数据。
WiredTiger的叶页大小可以达到512M。所以当从磁盘读取大量数据时,要在磁盘搜索的情况下,显著提高表扫描性能的可能性较小。