#api #cassandra #thrift
#API #cassandra #бережливость
Вопрос:
Мой вопрос касается Cassandra 0.8 и Pelops. Я обнаружил, что Pelops использует ту же команду Thrift для чтения фрагмента столбцов, что и для фрагмента столбцов-счетчиков. Затем выполняется итерация по извлеченной коллекции объектов Thrift Column или SuperColumn, утверждая, что поле столбца (или counter_column) не равно null. Кажется очевидным, что для смешанного семейства столбцов выполнение любого из этих методов завершится неудачей.
Итак, требует ли Cassandra, чтобы все столбцы в семействе столбцов были одного типа?
Следующий код является фрагментом класса Selector из Pelops.
private List<Column> getColumnsFromRow(final ColumnParent colParent, final Bytes rowKey, final SlicePredicate colPredicate, final ConsistencyLevel cLevel) throws PelopsException {
IOperation<List<Column>> operation = new IOperation<List<Column>>() {
@Override
public List<Column> execute(IPooledConnection conn) throws Exception {
List<ColumnOrSuperColumn> apiResult = conn.getAPI().get_slice(safeGetRowKey(rowKey), colParent, colPredicate, cLevel);
return toColumnList(apiResult);
}
};
return tryOperation(operation);
}
private List<CounterColumn> getCounterColumnsFromRow(final ColumnParent colParent, final Bytes rowKey, final SlicePredicate colPredicate, final ConsistencyLevel cLevel) throws PelopsException {
IOperation<List<CounterColumn>> operation = new IOperation<List<CounterColumn>>() {
@Override
public List<CounterColumn> execute(IPooledConnection conn) throws Exception {
List<ColumnOrSuperColumn> apiResult = conn.getAPI().get_slice(safeGetRowKey(rowKey), colParent, colPredicate, cLevel);
return toCounterColumnList(apiResult);
}
};
return tryOperation(operation);
}
private static List<Column> toColumnList(List<ColumnOrSuperColumn> coscList) {
List<Column> columns = new ArrayList<Column>(coscList.size());
for (ColumnOrSuperColumn cosc : coscList) {
assert cosc.column != null : "The column should not be null";
columns.add(cosc.column);
}
return columns;
}
private static List<CounterColumn> toCounterColumnList(List<ColumnOrSuperColumn> coscList) {
List<CounterColumn> columns = new ArrayList<CounterColumn>(coscList.size());
for (ColumnOrSuperColumn cosc : coscList) {
assert cosc.counter_column != null : "The column should not be null";
columns.add(cosc.counter_column);
}
return columns;
}
Ответ №1:
Итак, требует ли Cassandra, чтобы все столбцы в семействе столбцов были одного типа?
Да, в том смысле, что в настоящее время требуется, чтобы CF содержал все счетчики или все не-счетчики. Однако,
- Это изменится, возможно, как только появится версия 0.8.1
- не-счетчики определенно не обязательно должны иметь один и тот же тип данных (байты, длина, utf8 и т.д. Могут быть смешаны в одной строке)