database - 对 Apache HBase 基础知识感到困惑?
问题描述
我目前正在阅读七周内的七个数据库,并且遇到了这个声明。
HBase 还提供了强大的一致性保证,使得在某些用例中更容易从关系数据库转换。最后,HBase 保证了行级别的原子性,这意味着您可以在 HBase 的数据模型的关键级别上获得强一致性保证。
我很难理解它。
我浅浅的理解是 Apache HBase 是一个分布式数据库,所以它就像一个 Master-Slave 之类的东西?
因此,当您进行写入时,您首先在 Master 上执行此操作,然后 Master 将写入内容复制到从站。一致性保证是所有从属服务器的记录具有相同的相同值吗?因此,高一致性保证意味着它们都将具有相同的值,而低一致性保证意味着主控可能已经将更改写入某些从属,但不是全部(因此,如果您正在从其中一个读取值奴隶,您可能会根据您读取的奴隶得到不同的结果)?
到目前为止这是正确的吗?
那么,使用 HBase ......“保证行级别的原子性”意味着只有当主服务器写入所有从服务器时才会完成事务?这提供了高一致性?
我走在正确的轨道上吗?如果不是,我真的很感谢您对该段的含义进行澄清。
非常感谢!
解决方案
如果“主”是指区域/分片/分区主,那么您就在正确的轨道上。每个行键都与一个区域(分片的 HBase 术语)相关联,并且每个区域都在多个服务器/磁盘/机架/任何东西上复制。根据每个行键,客户端只有一个主区域服务器(或“主服务器”)与之通信。
那么,使用 HBase ......“保证行级别的原子性”意味着只有当主服务器写入所有从服务器时才会完成事务?这提供了高一致性?
不,一致性和原子性是两个不同的东西。HBase 在行级别提供原子性,这意味着当您写入行时,整个写入操作已完全完成或没有更改任何内容 - 中间没有(部分更新)。当您在一个命令中写入多行时,情况并非如此 - 有些可能会更改,有些可能不会,但不会部分更新或更改任何行。一致性(在此上下文中)意味着更新必须首先由远程副本确认,然后客户端才能正常。这主要通过基于 HDFS 的事务日志文件完成。您可以阅读 HBase WAL 了解更多详细信息。
推荐阅读
- splunk - Splunk -> 以毫秒为单位获取时间
- android - 如何选择正确的文字大小
- udp - Busybox 二进制文件的 Nmap 端口无法访问
- reactjs - 允许用户使用反应组件将模块添加到页面
- android-mediacodec - MTK 平台中的 Mediacodec 解码器问题?
- reactjs - 当我设置相同的状态值时,如何避免触发 useEffect?
- sql - MariaDB 如何处理已经系统版本化的表
- python - 能不能用pandas过滤亿万行数据
- javascript - 如何根据订单号通过文本删除特定的 Li 标签?
- html - 为什么这些框不能垂直对齐?