什么是SSTable?


Answers:



56

“ SSTable提供了从键到值的持久,有序的不可变映射,其中键和值都是任意字节字符串。提供了操作以查找与指定键关联的值,并遍历一个键中的所有键/值对。指定的键范围。内部,每个SSTable包含一系列块(通常每个块的大小为64KB,但这是可配置的)。块索引(存储在SSTable的末尾)用于定位块;已加载索引当打开SSTable时将其存入内存,可以通过单个磁盘查找执行查找:我们首先通过在内存索引中执行二进制搜索找到合适的块,然后从磁盘中读取合适的块。可以完全映射到内存中,这使我们无需触摸磁盘即可执行查找和扫描。”


4
“不触摸磁盘”->“不知道正在触摸磁盘”。内存映射的IO是一种非常方便的技术,因为它将实际的IO委托给OS,前提是它可以很好地进行缓存(尤其是当多个进程共享同一文件时)。但是它的缺点是您无法控制它。如果页面不在内存中,则线程将阻塞并且无法执行其他操作;与“异步IO”形成对比,在IO待处理的情况下,您可以在其中注册回调并在同一线程中执行其他操作。
ithkuil 2011年

2
@ithkuil:您绝对可以控制内存映射的IO,至少可以确保某些页面在内存中或已提交到磁盘上(仍然有一定的余地,无法保证某些页面位于记忆力,但很好)。这就是mlock(),msync()和MAP_LOCKED之类奇妙的东西。您还可以通过mincore()来了解当前的页面内容和不的页面内容。
Christopher Smith

2
@ChristopherSmith:是的,您是对的,有很多方法可以控制它。但是,通常将其用于关键性能部分(实时)或与安全性相关的问题(例如避免在磁盘上交换内存密码)。内存映射文件之所以非常有用,正是因为您不必决定要保留多少内存;否则,您可以不使用mmap读取内存中的整个文件并达到相同的效果。实际上,我只是在cassandra代码中摸索了一下。唯一的调用mlockall(MCL_CURRENT);在启动时完成。另请参见:goo.gl/AEgPM
ithkuil 2012年

4
以上报价来自BigTable论文
ShreevatsaR

4

平板电脑以SSTables的形式存储。

SSTable(直接映射到GFS)是基于键值的不可变存储。它存储数据块,每个数据块大小为64KB。

定义:

  • 键索引:键和起始位置
  • 块是GFS中的存储单元,副本管理按块进行

3
  • SSTable(engl。Sorted Strings Table)是键/值字符串对的文件,按键排序。

  • SSTable提供了从键到值的持久,有序的不变映射,其中键和值都是任意字节字符串。

  • 在内部,每个SSTable包含一系列块(通常
    每个块的大小为64KB,但这是可配置的)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.