Новый проект Cassandra - Astyanax или Java Driver? - программирование
Подтвердить что ты не робот

Новый проект Cassandra - Astyanax или Java Driver?

Я начинаю новый проект с Cassandra (и планирую использовать последнюю версию стабильной версии (1.2.x)). Я пробовал несколько разных Java-библиотек, например Hector, Astyanax, Cassandra-jdbc...

Среди них (короче) мой выбор - Astyanax. Но потом я также нашел и попробовал DataStax Java Driver, который поддерживает новый двоичный протокол CQL, и намного чище, если вы используете только CQL. И похоже, что версия 1.0.0 GA скоро выйдет.

Какой из них вы порекомендуете? Спасибо.

4b9b3361

Ответ 1

Я бы посоветовал вам пойти с драйвером cql3. Некоторые варианты: JDBC-драйвер или даже лучше Драйвер Datastax который поддерживает асинхронные соединения. Возможно, вам придется самостоятельно создавать драйвер datastax, но это можно сделать с легкостью с помощью maven.

Thrift не будет получать какие-либо новые функции в Cassandra, его сохраняют для обратной сопоставимости, и большинство членов сообщества сообщества C * советуют использовать драйверы cql для новых проектов:

Как описано выше, мы считаем, что CQL3 - это более простой и улучшенный API для Cassandra, чем API бережливого бизнеса. Поэтому новым проектам/приложениям рекомендуется использовать CQL3

- источник

Также производительность CQL становится очень быстрой. Вот некоторые устаревшие тесты.
UPDATE

Поскольку ответ был написан, для драйвера был создан центральный репозиторий maven, поэтому теперь для его использования просто добавьте зависимость к maven:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-parent</artifactId>
    <version>1.0.0</version>
</dependency>

Ответ 2

Я лично использовал Hector, Astyanax, Pelops, Fluent Cassandra, Datastax Driver и Pycassa, и после использования так много API я наконец понял, что Astyanax подходит мне лучше всего (его личное внимание).

Функция, найденная в astyanax, которая отличает ее от других в лиге,

  • Простота использования API
  • Поддержка композитных столбцов
  • Пул соединений
  • Задержка
  • Документация
  • Обновление

Ответ 3

Я использовал Astyanax. Он хорошо документирован и прост в использовании, если у вас нет проблем с написанием в 5 раз больше кода, чем CQL.

Сейчас я использую CQL, поскольку люди, с которыми я работал, не полностью поняли код Astyanax - почему они должны писать класс для имен столбцов. Я думаю, что вы никогда не поймете внутренности Кассандры правильно, если не используете Astyanax или Hector.

Ответ 4

Вам обязательно нужно перейти с новым DataStax Java Driver и Cassandra 1.2 для нового проекта, который только начинается. Водитель просто отправился в GA, и оба водителя и Cassandra 1.2 будут только более стабильны в течение следующих нескольких месяцев при разработке вашего нового проекта.

Ответ 5

Я согласен с Зансоном/Вальчкоу. Драйвер Java DataStax - это будущее. Управлять Cassandra с SQL очень удобно. Тем временем я также рекомендую CassandraExecutor, простую оболочку DataStax Java Driver. По сравнению с драйвером Java, CassandraExecutor имеет следующие особенности:

  • Согласованные/интегрированные/краткие API для (синхронизация/асинхронизация) операций (CRUD) с SQL/сущностью.
  • DataSet, который поддерживает различные /merge/sort/groupBy/join/union/unionAll/кроме /intersect/paginate/filter/count/toJOSN/toXML/toCVS...

Вот простой пример CRUD (создание/чтение/обновление/удаление):

Account account = createAccount();
// create
String sql_insert = NE.insert(ID, GUI, FIRST_NAME, LAST_NAME, LAST_UPDATE_TIME, CREATE_TIME).into(Account.class).sql();
cassandraExecutor.execute(sql_insert, account);

// read
String sql_selectByGUI = NE.select(ID, GUI, FIRST_NAME, LAST_NAME).from(Account._).where(L.eq(ID, L.QME)).sql();
Account dbAccount = cassandraExecutor.queryForEntity(Account.class, sql_selectByGUI, account);

// update
String sql_updateByLastName = NE.update(Account.class).set(FIRST_NAME).where(L.eq(ID, L.QME)).sql();

dbAccount.setFirstName("newFirstName");
cassandraExecutor.execute(sql_updateByLastName, dbAccount);

// delete
String sql_deleteByFirstName = NE.deleteFrom(Account.class).where(L.eq(ID, L.QME)).sql();
cassandraExecutor.execute(sql_deleteByFirstName, dbAccount);

(Декларация: я разработчик CassandraExecutor)