Google cloud Bigtable читает несколько строк - PullRequest
1 голос
/ 14 февраля 2020

У меня есть набор известных строк, подобных этому
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 * или было бы лучше выполнить один запрос на чтение для каждой строки?

1 Ответ

0 голосов
/ 14 февраля 2020

Выбор сканирования диапазона по сравнению со сканированием по вашим c запросам действительно зависит от того, что вы запланировали для этих данных. Если вы выполните сканирование диапазона, то любые другие данные в этом префиксе «h1-r *» будут включены и не будут такими же производительными. Но если ЕДИНСТВЕННЫЕ строки, начинающиеся с "h1-r", являются теми, которые указаны c строк, то он будет работать аналогичным образом, и я бы рекомендовал использовать сканирование префиксов для упрощения вашего кода.

Вот код фрагменты для каждого способа, и в настоящее время мы работаем над их интеграцией в нашу документацию, но вы можете проверить больше на 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());
}
...