什么是SSTable?

kno*_*orv 105 computer-science bigtable gfs cassandra nosql

在BigTable/GFS和Cassandra术语中,SSTable的定义是什么?

Sch*_*jer 99

Sorted Strings Table(从谷歌借来的)是一个键/值字符串对的文件,按键排序

  • 感谢另一个优秀的SO Cassandra答案!顺便说一下,你看过这个问题:http://stackoverflow.com/questions/2573106/what-are-the-alternative-ways-to-model-mm-relations-in-cassandra (3认同)
  • @xjcl SSTable 段是不可变的。排序行为是通过利用 AVL 树等排序数据结构在内存级别设计的。当您将内存中的内容刷新到磁盘上时,您将以排序的格式写入它。一旦在磁盘上形成段,就无法对其进行编辑,因此它是不可变的。 (3认同)
  • 那么如何才能既可排序又不可变呢? (2认同)

小智 53

"SSTable提供从键到值的持久的,有序的不可变映射,其中键和值都是任意字节串.提供操作以查找与指定键相关联的值,并迭代所有键/​​值对.在内部,每个SSTable包含一系列块(通常每个块大小为64KB,但这是可配置的.)块索引(存储在SSTable的末尾)用于定位块;索引被加载打开SSTable时进入内存.可以使用单个磁盘搜索执行查找:我们首先通过在内存索引中执行二进制搜索找到适当的块,然后从磁盘读取相应的块.可选地,SSTable可以完全映射到内存中,这使我们可以在不触摸磁盘的情况下执行查找和扫描."

  • "没有触摸磁盘" - >"没有意识到正在触摸磁盘".内存映射IO是一种非常方便的技术,因为它将实际的IO委托给操作系统,假设它可以很好地进行缓存(特别是当多个进程共享同一个文件时).但它的缺点是你无法控制它.如果页面没有驻留在内存中,则线程将阻塞并且不能执行其他操作; 将它与"异步IO"进行对比,在那里你可以注册回调并在同一个线程中执行其他操作,同时IO处于挂起状态. (4认同)
  • 以上引用来自[BigTable论文](https://research.google.com/archive/bigtable-osdi06.pdf). (3认同)
  • @ithkuil:你完全可以控制内存映射IO,至少可以确保某些页面在内存中或者已经提交到磁盘上(对于不能保证在页面中的页面仍然存在摆动空间)记忆但非常好可能).这就是mlock(),msync()和MAP_LOCKED等奇妙之处.您还可以通过mincore()了解当前和未被分页的内容. (2认同)
  • @ChristopherSmith:是的,你是对的,有办法控制它.但是,通常它用于关键性能部分(实时)或安全相关问题(例如避免内存密码在磁盘上交换).内存映射文件非常有用,因为您无需决定将多少内存保留在内存中; 否则你可以在没有mmap的情况下在内存中读取整个文件并获得相同的效果.事实上,我只是通过cassandra代码; 唯一的调用是`mlockall(MCL_CURRENT);`在启动时完成.另见:http://goo.gl/AEgPM (2认同)

mik*_*iii 7

  • SSTable(英语:Sorted Strings Table)是一个键/值字符串对的文件,按键排序。

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

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


man*_*ngh 6

一个tablet以SSTables的形式存储。

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

定义:

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