在HBase中实现批处理与checkAndPut的任何方法

在HBase中实现批处理与checkAndPut的任何方法,hbase,Hbase,我正在写HBase集群。我必须只在数据不存在时才进行写入,因此我使用checkAndPut()。但与put(List)相比,性能较差。我有没有办法把这两种操作结合起来?我试图四处看看,但什么也找不到。当您使用checkAndPut()时,每个请求执行一个RPC调用。因此,您无法获得超过每秒1/rtt请求数的性能(rtt是往返时间)。如果您的客户机和区域服务器之间有rtt 1ms,那么理论上最大值为1000 rpm。当使用诸如put(List)之类的批处理操作时,需要的RPC调用会大大减少,从而提

我正在写HBase集群。我必须只在数据不存在时才进行写入,因此我使用
checkAndPut()
。但与
put(List)
相比,性能较差。我有没有办法把这两种操作结合起来?我试图四处看看,但什么也找不到。

当您使用
checkAndPut()
时,每个请求执行一个RPC调用。因此,您无法获得超过每秒
1/rtt
请求数的性能(rtt是往返时间)。如果您的客户机和区域服务器之间有rtt 1ms,那么理论上最大值为1000 rpm。当使用诸如
put(List)
之类的批处理操作时,需要的RPC调用会大大减少,从而提高性能。我看到两种解决问题的方法:

  • 使用工作池来并行请求。您可以找到有用的
    HTablePool
    类来管理worker中的连接

  • 如果您不需要知道操作状态(插入新单元或保留旧单元),您可以尝试编写协处理器,在单元存在的情况下默默地丢弃put请求。在这种情况下,如果需要替换某些单元格,则必须先将其删除


  • 使用
    checkAndPut()
    时,每个请求执行一个RPC调用。因此,您无法获得超过每秒
    1/rtt
    请求数的性能(rtt是往返时间)。如果您的客户机和区域服务器之间有rtt 1ms,那么理论上最大值为1000 rpm。当使用诸如
    put(List)
    之类的批处理操作时,需要的RPC调用会大大减少,从而提高性能。我看到两种解决问题的方法:

  • 使用工作池来并行请求。您可以找到有用的
    HTablePool
    类来管理worker中的连接

  • 如果您不需要知道操作状态(插入新单元或保留旧单元),您可以尝试编写协处理器,在单元存在的情况下默默地丢弃put请求。在这种情况下,如果需要替换某些单元格,则必须先将其删除