考虑到 HBase 将每个列族存储在单独的 HFile 中以及一行可以跨越多个列族的事实。HBase 如何确保跨多个列族的行上的 put/delete 操作确实是原子的?
2999 次
2 回答
7
对一行的所有写入,无论该行中有多少列族,都转到一个区域服务器,然后该区域服务器将编辑写入区域 WAL (Hlog),然后同步写入,然后是数据被添加到 memstore 中,因此它将被提供。然后 - 一旦 memstore 达到其限制 - memstore 将被刷新到磁盘。如果 regionserver 发生任何问题并且它崩溃/死亡/拔掉了插头,则可以运行 WAL 以保持一切一致。有关更多详细信息,请参阅HBASE-2283和Hbase Architecture 101。
于 2011-08-01T06:00:23.110 回答
1
尽管通过同时刷新所有列族来编写多个 HFile,但 HBase 目前实现了行级原子性。当最大的列族达到配置的刷新大小时,将触发刷新。还有一个额外的 MemStore 级时间戳,允许对 MemStore 读取进行多版本并发控制,但对于写入 HFile 的键/值不存在。切换到按列族刷新(提高效率的理想功能)也需要将类似的时间戳添加到文件格式中。
于 2011-08-03T21:31:02.753 回答