У нас есть одна CF, в которой всего около 1000 строк. Есть ли способ с astyanax прочитать все 1000 строк? Бережливость даже поддерживает это?
спасибо, Дин
У нас есть одна CF, в которой всего около 1000 строк. Есть ли способ с astyanax прочитать все 1000 строк? Бережливость даже поддерживает это?
спасибо, Дин
Вы можете прочитать все строки с помощью бережливого вызова get_range_slices. Обратите внимание, что он возвращает строки в порядке токенов, а не в порядке ключей. Так что можно читать все строки, но не делать диапазоны между ключами строк.
Вы можете использовать его в Astyanax с функцией getAllRows(). Вот пример кода (скопирован из документации по адресу https://github.com/Netflix/astyanax/wiki/Reading-Data#iterate-all-rows-in-a-column-family)
Rows<String, String>> rows;
try {
rows = keyspace.prepareQuery("ColumnFamilyName")
.getAllRows()
.setBlockSize(10)
.withColumnRange(new RangeBuilder().setMaxSize(10).build())
.setExceptionCallback(new ExceptionCallback() {
@Override
public boolean onException(ConnectionException e) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
}
return true;
}})
.execute().getResult();
} catch (ConnectionException e) {
}
// This will never throw an exception
for (Row<String, String> row : rows.getResult()) {
LOG.info("ROW: " + row.getKey() + " " + row.getColumns().size());
}
Это вернет первые 10 столбцов каждой строки партиями по 10 строк. Увеличьте число, переданное в RangeBuilder().setMaxSize, чтобы получить больше (или меньше) столбцов.