cassandra、Hbase 等分布式数据库是如何处理写一致性问题的

cassandra、Hbase 等分布式数据库是如何处理唯一键并发写的问题?

假设有一个 Hbase 集群,有两台 slave 机器 A、B

现在我建了一个表T,表的 rowkey 是唯一的

此时有两个客户端同时发起写请求: habse.set(rowkey='hi',value='xxx')

此时 Hbase 集群会怎么做?

如果客户端 Aslave A 的 表 T 写入 habse.set(rowkey='hi',value='haha')

客户端 Bslave B 的 表 T 写入 habse.set(rowkey='hi',value='lala')

slave A 的角度是合法的,因为还没有 rowkey='hi',此时 slave A 接受了客户端 A 的写请求。

slave B 的角度是合法的,因为还没有 rowkey='hi',此时 slave B 接受了客户端 B 的写请求。

但是 slave Aslave B 要同步数据库的时候,发现重复 rowkey

有了两条会重复的 rowkey !

  • habse.set(rowkey='hi',value='haha')
  • habse.set(rowkey='hi',value='lala')

此时怎么办?

所以我的问题是:又发生这种情况吗?Hbase 是如何防止发生这种情况的?

我觉得有以下几种方案:

  • 方案一:对于一个表,同一时间段内,只有一个 slave 机器可以被写入,其他的 slave 机器是只读的,类似 Mysql 的读写分离,一台机器写,其余机器只读
  • 方案二:任意一个 slave A 接受到写请求之后,告知其余的 slave 机器,”我收到了 rowkey ='hi'“,避免其他机器继续写入相同的 rowkey,但是这种方案需要大量的网络广播,速度非常的缓慢!!!

两种方案都有很大的缺点!

我想知道类似的 MongoDB 集群、cassandra 集群和 Hbase 集群是如何解决这个问题的!

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题