首页 > 解决方案 > 对 Apache HBase 基础知识感到困惑?

问题描述

我目前正在阅读七周内的七个数据库,并且遇到了这个声明。

HBase 还提供了强大的一致性保证,使得在某些用例中更容易从关系数据库转换。最后,HBase 保证了行级别的原子性,这意味着您可以在 HBase 的数据模型的关键级别上获得强一致性保证。

我很难理解它。

我浅浅的理解是 Apache HBase 是一个分布式数据库,所以它就像一个 Master-Slave 之类的东西?

因此,当您进行写入时,您首先在 Master 上执行此操作,然后 Master 将写入内容复制到从站。一致性保证是所有从属服务器的记录具有相同的相同值吗?因此,高一致性保证意味着它们都将具有相同的值,而低一致性保证意味着主控可能已经将更改写入某些从属,但不是全部(因此,如果您正在从其中一个读取值奴隶,您可能会根据您读取的奴隶得到不同的结果)?

到目前为止这是正确的吗?

那么,使用 HBase ......“保证行级别的原子性”意味着只有当主服务器写入所有从服务器时才会完成事务?这提供了高一致性?

我走在正确的轨道上吗?如果不是,我真的很感谢您对该段的含义进行澄清。

非常感谢!

标签: databasehbasegoogle-cloud-bigtablebigtable

解决方案


如果“主”是指区域/分片/分区主,那么您就在正确的轨道上。每个行键都与一个区域(分片的 HBase 术语)相关联,并且每个区域都在多个服务器/磁盘/机架/任何东西上复制。根据每个行键,客户端只有一个主区域服务器(或“主服务器”)与之通信。

那么,使用 HBase ......“保证行级别的原子性”意味着只有当主服务器写入所有从服务器时才会完成事务?这提供了高一致性?

不,一致性和原子性是两个不同的东西。HBase 在行级别提供原子性,这意味着当您写入行时,整个写入操作已完全完成或没有更改任何内容 - 中间没有(部分更新)。当您在一个命令中写入多行时,情况并非如此 - 有些可能会更改,有些可能不会,但不会部分更新或更改任何行。一致性(在此上下文中)意味着更新必须首先由远程副本确认,然后客户端才能正常。这主要通过基于 HDFS 的事务日志文件完成。您可以阅读 HBase WAL 了解更多详细信息。


推荐阅读