2013-11-02 1 views
1

Я работаю над проектом, в котором мне нужно удалить все столбцы и его данные, за исключением одного столбца и его данных в Кассандре, используя клиент Astyanax.Удалить все столбцы и его данные, за исключением одного столбца с помощью клиента Astyanax?

У меня есть динамическое семейство столбцов, как показано ниже, и у нас уже есть пара миллионов записей в этой семье колонок.

create column family USER_TEST 
with key_validation_class = 'UTF8Type' 
and comparator = 'UTF8Type' 
and default_validation_class = 'UTF8Type' 
and gc_grace = 86400 
and column_metadata = [ {column_name : 'lmd', validation_class : DateType}]; 

user_id У меня есть как RowKey и другие столбцы У меня есть что-то вроде этого -

a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,lmd 

Теперь мне нужно удалить все столбцы и свои данные для a15 столбца, за исключением. Значение, я хочу сохранить a15 колонки и свои данные для всех user_id(rowKey) и удаления остальных столбцов и его данные ..

Я уже знаю, как удалить данные из Cassandra с помощью Astyanax клиента для конкретного rowKey -

public void deleteRecord(final String rowKey) { 

    try { 
     MutationBatch m = AstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch(); 

     m.withRow(AstyanaxConnection.getInstance().getEmp_cf(), rowKey).delete(); 

     m.execute(); 

    } catch (ConnectionException e) { 
     // some code 
    } catch (Exception e) { 
     // some code 
    } 
} 

Теперь, как удалить все столбцы и свои данные для одного столбца для всех ИО пользователей, который мой RowKey кроме ...

Любые мысли, как это может быть сделано эффективно, используя Astyanax клиента?

ответ

2

Похоже, что Astyanax в настоящее время не поддерживает функциональность удаления фрагментов, которая является довольно недавним дополнением к механизму хранения и Thrift API. Если вы посмотрите справочную информацию о затратах API: http://wiki.apache.org/cassandra/API10 Вы видите, что операция удаления принимает SlicePredicate, который может принимать либо список столбцов, либо SliceRange. SliceRange может указывать все столбцы больше или меньше столбца, который вы хотите сохранить, чтобы вы могли выполнять две операции удаления среза для удаления всех, кроме одного столбца в строке.

К сожалению, Astyanax имеет возможность удалять целую строку или определенный список столбцов и не переносит полную функциональность SlicePredicate. Итак, похоже, что у вас есть два варианта: 1) Посмотрите, как удалить необработанный срез бережливого среза, минуя обертку Astyanax, или . 2) Прочитайте прочитанный столбец, за которым следует строка delete, за которым следует запись столбца. Это не идеально эффективно, но если это не делается слишком часто, не должно быть запретительным. или 3) Прочитайте всю строку и явно удалите все столбцы, отличные от тех, которые вы хотите сохранить.

Следует отметить, что в то время как механизм хранения и API-интерфейс экономии поддерживают обезболивающие срезы, это также еще не полностью поддерживается CQL.

Я подал этот билет для решения, что последнее ограничение: https://issues.apache.org/jira/browse/CASSANDRA-6292

Смежные вопросы