Google cloud Bigtable 读取多行

Google cloud Bigtable read multiple rows

我有一组这样的已知行键
h1-r1-en
h1-r1-es
h1-r1-fr
h1-r1-pt
h1-r2-en
h1-r2-es
h1-r2-fr
h1-r2-pt

我的问题是,我应该执行范围扫描来检索 h1-r* 范围内的所有行,还是对每个行键执行一次读取查询会更好?

选择对特定查询执行范围扫描还是扫描实际上取决于您对此数据的计划。如果您进行了范围扫描,那么该前缀 "h1-r*" 内的任何其他数据都将被包含在内并且性能不佳。但是,如果以 "h1-r" 开头的唯一行是那些特定的行,那么它将以相同的方式执行,我建议使用前缀扫描来简化您的代码。

以下是每种方式的代码片段,我们目前正在努力将它们集成到我们的文档中,但您可以在 GitHub.

上查看更多信息

前缀扫描:

try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
  Query query = Query.create(tableId).prefix("h1-r");
  ServerStream<Row> rows = dataClient.readRows(query);
  for (Row row : rows) {
    // do something
  }
} catch (IOException e) {
  System.out.println(
      "Unable to initialize service client, as a network error occurred: \n" + e.toString());
}

添加单行:

try (BigtableDataClient dataClient = BigtableDataClient.create(projectId, instanceId)) {
  Query query = Query.create(tableId)
         .rowKey("h1-r1-en")
         .rowKey("h1-r1-es")
         .rowKey("h1-r1-fr"); // Continue adding all your rows this way.
  ServerStream<Row> rows = dataClient.readRows(query);
  for (Row row : rows) {
    // do something
  }
} catch (IOException e) {
  System.out.println(
      "Unable to initialize service client, as a network error occurred: \n" + e.toString());
}