Computer science 什么是SSTable?

Computer science 什么是SSTable?,computer-science,nosql,cassandra,bigtable,gfs,Computer Science,Nosql,Cassandra,Bigtable,Gfs,在BigTable/GFS和Cassandra术语中,SSTable的定义是什么?排序字符串表(借用自google)是一个键/值字符串对文件,按键排序SSTable提供从键到值的持久、有序的不可变映射,其中键和值都是任意字节字符串。提供的操作用于查找与指定键关联的值,并在指定键范围内迭代所有键/值对。在内部,每个SSTable包含一系列块(通常每个块的大小为64KB,但这是可配置的)。块索引(存储在SSTable末尾)用于定位块;打开SSTable时,索引将加载到内存中。可以使用单个磁盘搜索执行

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

排序字符串表(借用自google)是一个键/值字符串对文件,按键排序SSTable提供从键到值的持久、有序的不可变映射,其中键和值都是任意字节字符串。提供的操作用于查找与指定键关联的值,并在指定键范围内迭代所有键/值对。在内部,每个SSTable包含一系列块(通常每个块的大小为64KB,但这是可配置的)。块索引(存储在SSTable末尾)用于定位块;打开SSTable时,索引将加载到内存中。可以使用单个磁盘搜索执行查找:我们首先通过在内存索引中执行二进制搜索来查找适当的块,然后从磁盘读取适当的块。或者,SSTable可以完全映射到内存中,这允许我们在不接触磁盘的情况下执行查找和扫描。”

平板电脑以SSTable的形式存储

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

定义:

  • 键的索引:键和起始位置
  • 区块是GFS中的一个存储单元,副本管理是按区块进行的
      • SSTable(英语排序字符串表)是键/值字符串的文件 成对,按键排序


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

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


      SSTable表示排序字符串表“基于键值对。在Cassandra中,SSTables是不可变的,并按键排序。

      感谢Cassandra给出的另一个极好的答案!顺便说一句,你看到这个问题了吗:它通常是不可变的吗?是的,sstables是设计上不可变的——这是一个很棒的特性。那么它如何既可以排序又不可变呢?@xjcl你找到答案了吗?“不触摸磁盘”->“不知道磁盘正在被触摸”。内存映射IO是一种非常方便的技术,因为它将实际IO委托给操作系统,假设它可以很好地缓存(特别是当多个进程共享同一文件时)。但它的缺点是你无法控制它。如果页面不在内存中,线程将阻塞,无法执行其他操作;与“异步IO”相比,在“异步IO”中,当IO挂起时,您可以注册回调并在同一线程中执行其他操作。@ithkuil:您完全可以控制内存映射IO,至少可以确保某些页面在内存中或已提交到磁盘(对于不能保证在内存中但很可能在内存中的页面,仍然有回旋的余地)。这就是像mlock()、msync()和MAP_LOCKED这样奇妙的事情的全部内容。您还可以通过mincore()了解当前的页面和未被页面插入的页面@Christophermith:是的,你是对的,有很多方法可以控制它。但是,它通常用于关键性能部分(实时)或与安全相关的问题(例如避免在磁盘上交换内存中的密码).Memory mapped文件非常有用,因为您不必决定要在内存中保留多少文件;否则,您可以在内存中读取整个文件而不使用mmap,并获得相同的效果。事实上,我只是浏览了cassandra代码;唯一的调用是
      mlockall(MCL_CURRENT)
      在启动时完成。另请参见:上面的引文来自。这是一篇关于SSTables的精彩介绍文章: