Преимущества использования CQL над экономией
Есть ли какие-то явные преимущества использования cql над thrift или просто разработчики слишком привыкли к SQL? Я хочу переключиться с комиссионных запросов на cql, единственная проблема в том, что я не уверен в недостатках этого. Кто они такие?
2 ответа
Запрос
В CQL вы можете запросить cassandra и получить данные в несколько строк (используя драйвер JDBC):
String query = "SELECT * FROM message;";
PreparedStatement statement = con.prepareStatement(query);
В то время как в Thrift-API это немного сложнее (пример с Astyanax):
OperationResult<ColumnList<String>> result =
keyspace.prepareQuery(mail/*specify columnfamily structure*/)
.getKey("lyuben@1363115059").execute();
ColumnList<String> columns = result.getResult();
Спектакль
Основываясь на тестах, выполненных Acunu, Thrift (RPC) немного опережает CQL, когда речь идет о производительности запросов, но вам нужно оказаться в ситуации, когда высокая пропускная способность является ключевым фактором для того, чтобы это преимущество в производительности имело существенное преимущество.
Некоторые отличные статьи для поиска:
РЕДАКТИРОВАТЬ
Вышеуказанные критерии устарели, Павел предоставил новые критерии для подготовленных заявлений.
Ответ Любена хороший, но я считаю, что он может быть дезинформирован по нескольким пунктам. Во-первых, вы должны знать, что 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-ответе, но посмотрите этот пост для более нежного объяснения.