Есть ли какие-либо отличительные преимущества для использования cql для бережливости или это просто случай, когда разработчики слишком привыкли к SQL? Я хочу переключиться с бережливого запроса на cql, единственная проблема - я не уверен в недостатках этого. Что они?
Преимущества использования cql over бережливость
Ответ 1
Запросы
В CQL вы можете запросить cassandra и получить данные в нескольких строках (используя драйвер JDBC):
String query = "SELECT * FROM message;";
PreparedStatement statement = con.prepareStatement(query);
В API, основанном на бережливости, это немного сложнее (пример с Astyanax):
OperationResult<ColumnList<String>> result =
keyspace.prepareQuery(mail/*specify columnfamily structure*/)
.getKey("[email protected]").execute();
ColumnList<String> columns = result.getResult();
Производительность
Основываясь на эталонах, выполненных Acunu, Thrift (RPC) немного опережает CQL, когда дело доходит до производительности запросов, но вам нужно быть в ситуация, когда высокая пропускная способность является ключевым для этого преимущества производительности, чтобы иметь значительную выгоду.
Некоторые превосходные статьи для поиска:
ИЗМЕНИТЬ
Вышеуказанные тесты устарели, paul предоставил более новые эталоны в подготовленных отчетах.
Ответ 2
Ответ Любена - хороший, но я считаю, что он может быть дезинформирован по нескольким пунктам. Во-первых, вы должны знать, что Thrift API не будет получать новые функции; он там для обратной совместимости и не рекомендуется для новых проектов. Уже есть некоторые функции, которые нельзя использовать через интерфейс Thrift.
Другим фактором является то, что цитируемые тесты от Acunu вводят в заблуждение; они не измеряют производительность CQL с помощью подготовленных операторов. См., Например, графики на https://issues.apache.org/jira/browse/CASSANDRA-3634 (вероятно, тот же набор данных, на котором основана запись Acunu, так как Эрик Эванс написал оба). В прошлом году также были некоторые улучшения в синтаксическом анализе и производительности CQL. Вряд ли вы заметите какую-либо реальную разницу в скорости между CQL 3 и Thrift.
Наконец, я не думаю, что я даже согласен с тем, что Thrift более гибкий. Датамодель CQL 3 позволяет использовать те же структуры данных, что и Thrift для почти всех применений, которые не являются антипаттернами; это просто позволяет вам думать о модели более организованным образом. Например, Любен упоминал строки с различным числом столбцов. Таблица CQL 3 все еще может использовать эту возможность: существует разница между "строками ядра хранилища" (который является хранилищем низкого уровня Cassandra и тем, что Thrift использует напрямую) и "CQL-строки" (что вы видите через интерфейс Thrift). CQL просто выполняет дополнительную работу, необходимую для визуализации больших строк механизма хранения в виде структурированных таблиц.
Немного трудно объяснить быстрым ответом SO, но см. этот пост для нежного объяснения.