HBase如何保证行级原子性?

时间:2011-07-31 09:08:26

标签: database nosql hadoop hbase distributed-system

考虑到HBase将每个列族存储在单独的HFile中,以及行可以跨越多个列族的事实。 HBase如何确保跨越多个列族的行上的put / delete操作确实是原子的?

2 个答案:

答案 0 :(得分:7)

对该行的所有写入,无论该行中可能有多少列族,都转到一个regionserver,然后该regionserver将编辑写入区域WAL(Hlog),然后写入同步,然后将数据添加到memstore中,以便提供服务。然后 - 一旦memstore达到极限 - 将memstore刷新到磁盘。如果区域服务器出现任何问题并且崩溃/死亡/拔出了插头,则可以运行WAL以保持一切都一致。有关更多详细信息,请参阅HBASE-2283Hbase Architecture 101

答案 1 :(得分:1)

HBase目前实现了行级原子性,尽管通过同时刷新所有列族来编写多个HFile。当最大列族达到配置的刷新大小时,将触发刷新。还有一个MemStore级别的时间戳,允许对MemStore读取执行多版本并发控制,但对于写入HFile的键/值不存在。切换到每列系列刷新(提高效率的理想功能)也需要将类似的时间戳添加到文件格式中。