我有一个案例,我们需要在Hbase表中插入记录,其中90%来自源的记录被重复。在这种情况下, 建议首先从Hbase查询记录,如果不存在则调用put 要么 只需简单地打电话。
以上哪项在性能方面表现良好。
答案 0 :(得分:5)
两个HTable方法checkAndPut()和exists()都需要访问表数据,如果收到大量写入请求并且数据不在memstore中,这些数据可能会严重损害您。
HBase中的普通写入通常不是那么昂贵,因此,如果你有一个很好的rowKey设计并且你已经避开了热区,我只会坚持覆盖数据。
答案 1 :(得分:0)
如果您不想重新插入现有记录,可以使用HTable的checkAndPut方法。只有在满足您指定的条件时才会应用此put。因此,您可以检查是否存在仅在不存在的情况下放置的列。
答案 2 :(得分:0)
我同意这两个答案。确实,在使用CAS
(检查和设置)机制之前,必须首先修改他的设计,看看是否可以重构它并使用普通写入。但是,在某些情况下,这不是微不足道的。
在使用checkAndPut()
之前我要确定的另一件事是,在更新值时,此操作需要隔离。 HBase
只能在重写时保证,但不能更新。
最后,检查是否可以使用Append
代替checkAndPut
。