Rom*_*nko 3 java hadoop hbase acid nosql
我建议这应该是常见的情况之一,但可能在谷歌搜索时使用错误的关键字.
我只需要用完全随机的密钥创建新的表记录.假设我获得了具有良好随机性的密钥(几乎是随机的).但是,我不能100%确定没有行存在.所以我需要原子地做什么:
我在这个主题上找到的最有用的信息是关于HBase行锁的文章. 我认为HBase行锁是合适的解决方案,但我想在没有显式行锁定的情况下更好地做到这一点.
有人可以加一些有用的建议吗?优选的API是基于Java的,但实际上它更多的是概念而不是实现.
对于这种情况,"足够好"的解决方案恰好基于checkAndPut()方法.我打算做的是新的行插入与密钥重复检查和单个插入解决方案是完美的:
HTable checkAndPut()方法可以检查某些列是否未设置(检查它的null值).Put传递给的对象 checkAndPut()是包含具有必填字段集的初始对象状态.好吧,对于批量插入(我真正需要的)它碰巧太慢了所以我移动到用作行键的UUID而没有对新行插入进行任何检查.对我来说它好多了.在这种情况下唯一的考虑因素是非常好的随机发生器.标准Java java.util.UUID类包含我需要的一切,包括它基于有点慢但非常强大的java.security.SecureRandom生成器.
请注意:由于与其使用相关的安全性/其他风险,HBase用户行锁定功能似乎将被删除.