Нужно ли создавать специальное семейство столбцов для счетчиков столбцов? - PullRequest
4 голосов
/ 09 июня 2011

Мой вопрос касается Кассандры 0.8 и Пелопса.Я обнаружил, что Пелопс использует ту же команду Thrift для чтения фрагмента столбцов, что и для фрагмента столбцов счетчика.Затем он перебирает извлеченную коллекцию объектов Thrift ColumnOrSuperColumn, утверждая, что это поле столбца (или counter_column) не равно нулю.Кажется очевидным, что для семейства смешанных столбцов выполнение любого из этих методов завершится неудачно.

Итак, требует ли Кассандра, чтобы все столбцы в семействе столбцов были одного типа?

Следующий код является фрагментом класса 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 Ответ

1 голос
/ 10 июня 2011

Итак, требует ли Кассандра, чтобы все столбцы в семействе столбцов были одного типа?

Да, в том смысле, что в настоящее время требуется, чтобы CFсодержать все счетчики или все не счетчики.Тем не менее,

  • Это изменит , возможно, как только 0.8.1
  • не-счетчики определенно не должны быть одного типа данных (байты, long, utf8 и т. д. могут быть смешаны в одном ряду)
...