我正致力于写入HBase集群。我只有在数据不存在时才写,因此我使用checkAndPut()
。但与put(List<Put>)
相比,表现较差。有什么方法可以将这两个操作结合起来吗?我试着环顾四周但找不到任何东西。
答案 0 :(得分:6)
使用checkAndPut()
时,每个请求都会执行一次RPC调用。因此,您无法达到每秒1 / rtt
次请求的性能(rtt是往返时间)。如果您的客户端和区域服务器之间的距离为1毫秒,则理论最大值为1000 rps。使用put(List<Put>)
之类的批处理操作时,需要更少的RPC调用,从而导致性能提升。我看到两种解决问题的方法:
使用工作池来并行请求。您可以找到有用的HTablePool
类来管理工作人员的连接。
如果您不需要了解操作状态(插入新单元格或旧单元格仍然存在),您可能会尝试编写协处理器,以便在单元格存在时静默地丢弃请求。在这种情况下,如果您需要更换某个单元格,则必须先将其删除。