gpt4 book ai didi

java - HBase:原子 'check row does not exist and create' 操作

转载 作者:可可西里 更新时间:2023-11-01 14:25:26 24 4
gpt4 key购买 nike

我认为这应该是一种常见情况,但可能是我在谷歌搜索时使用了错误的关键字。

我只需要用完全随机的键创建新的表记录。假设我获得了具有良好随机性(几乎随机)的 key 。但是我不能 100% 确定还没有行存在。所以我需要自动执行的操作:

  • 使用行键检查尚无行存在。
  • 如果行存在则拒绝操作。
  • 如果不退出则创建行。

我找到的关于此主题的最有用的信息是关于 HBase row locks. 的文章我认为 HBase 行锁是合适的解决方案,但我想在没有显式行锁定的情况下做得更好。

  • ICV 看起来不合适,因为我确实希望 key 是随机的。
  • 如果 CAS 可以处理“行不存在”的情况,那会很棒,但看起来他们做不到。
  • 显式行锁有一些缺点,例如区域拆分问题。

有人可以添加有用的建议吗?首选 API 是基于 Java 的,但实际上它更多的是关于概念而不是实现。

最佳答案

此案例的“足够好”解决方案恰好基于 checkAndPut() method .我打算做的是使用键重复检查插入新行,对于单个插入解决方案是完美的:

  • HTable checkAndPut() 方法可以检查某些列是否未设置(检查它是否为 null 值)。
  • 无论如何行都包含一些“ID”字段,这对所有字段都是强制性的对象(您可以使用您始终为您的对象设置的任何其他字段对象)可以检查行是否存在。
  • 传递给 checkAndPut()
  • Put 对象包含初始值具有强制字段集的对象状态。

好吧,对于批量插入(我真正需要的),它碰巧太慢了,所以我转而使用 UUID 作为行键,而没有对新行插入进行任何检查。对我来说要好得多。在这种情况下唯一需要考虑的是非常好的随机生成器。标准 Java java.util.UUID 类包含我需要的一切,包括它基于有点慢但非常强大的 java.security.SecureRandom 生成器。

请注意:由于安全性/与其使用相关的其他风险,HBase 用户行锁定功能似乎将被删除。

关于java - HBase:原子 'check row does not exist and create' 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com