Cassandra Client Java API [закрыто]

недавно я начал работать с базой данных Cassandra. Теперь я нахожусь в процессе оценки того, что Cassandra client мы должны идти вперед.

Я видел не один пост на StackOverflow о том, какой клиент использовать для Кассандры, но не имеет однозначного ответа.

моя команда попросила меня сделать некоторые исследования по этому и придумали определенные pros and cons для каждого Cassandra Client API’s в Java.

как я уже упоминал, я недавно связался с Cassandra Так что не имейте это представление, почему некоторые люди выбирают Pelops client и почему некоторые люди ходят с Astyanax и некоторые другие клиенты.

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

Ниже приведена информация, которую я имею до сих пор.

КАССАНДРА АПИС

  • Гектор (Готовые К Производству)
    Этот самый стабильный API Java, готовый к прайм-тайму.

  • Астианакс (восходящий и заходящий)
    Чистый API Java от Netflix. Это не так широко используется, как Гектор, но он твердый.

  • Кундера (NoSQL ORM)
    JPA совместимый, это удобно, когда вы хотите взаимодействовать с Cassandra через объекты.
    Это несколько ограничивает вас в том, что вы не сможете иметь динамическое число столбцы/имена и т. д. Но это позволяет вам переносить ORMs или централизовать хранилище на Cassandra для более традиционных польз.

  • Пелоп
    Я использовал Пелопса только ненадолго. Это был прямой API, но, похоже, не двигался позади него.

  • PlayORM (ORM без ограничений?)
    Я только что узнал об этом. Похоже, он пытается решить импеданс несоответствие между традиционными JPA-основанными ORMs и NoSQL путем введения JQL. Это выглядит многообещающий.

  • Бережливость (Избегайте Меня!)
    Это" низкоуровневый " API.

ниже-наши приоритеты в решении Cassandra Client-

  • первые приоритеты: низкие накладные расходы латентности, API Asynch и надежность / стабильность для производственной среды.
    (например, более удобный API, который можно иметь в DAL, который обертывает клиент.)
  • объединение соединений и осознание разделов-это еще одна хорошая функция.
  • возможность обнаружения любых новых узлов, которые были добавлены.
  • хорошая поддержка, а также (как отметил декан ниже)

может ли кто - нибудь предоставить некоторые мысли по этому поводу? А также любые плюсы и минусы для каждого Cassandra Client и также который клиент может выполнить мои требования будет большой помощи также.

Я думаю, в основном я буду вращаться вокруг Astyanax client or New Datastax client that uses Binary protocol Я думаю, на основе моих исследований до сих пор. Но у меня нет определенной информации, чтобы поддержать мое исследование и представить его моей команде.

любое сравнение между клиентом Astyanax и новым клиентом Datastax(который использует новый двоичный протокол) будет иметь большую помощь.

это будет большим подспорьем для меня в моих исследованиях и получит много знаний об этом от разных людей, которые использовали разных клиентов в прошлом.

5 ответов


бережливость становится все более устаревшим API:

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

поэтому я бы избегал API на основе бережливости (бережливость сохраняется только для обратной совместимости).

говоря, что если вам нужно использовать API на основе бережливости, я бы пошел на Астианакт. Astyanax очень прост в использовании (по сравнению с другими API бережливости, но мой личный опыт заключается в том, что драйвер Datastax еще проще).

Так что вы должны взглянуть на Datastax это API-интерфейс (и GitHub РЕПО)? Я не уверен, есть ли скомпилированные версии API для загрузки, но вы можете легко построить его с помощью Maven. Кроме того, если вы посмотрите на журналы фиксации GitHub repo, он подвергается очень частым обновлениям.

драйвер работает исключительно с CQL3 и является асинхронным, но имейте в виду, что Cassandra 1.2 является самой ранней поддерживаемой версией.

производительность
Astyanax основан на бережливости, а диск Datastax-двоичный протокол. Вот последние критерии я мог бы найти между бережливостью и CQL (обратите внимание, что они определенно устарели). Но, справедливости ради, небольшая разница в показателях, показанная в этих контрольных показателях, редко будет иметь значение.

Asynch поддержка
Datastax это асинхронный поддержка является определенным преимуществом перед Astyanax (Netflix пробовал реализации это, но решил не делать).

документация
Я не могу спорить против Вики Netflix. Документация превосходна и довольно часто обновляется. Их wiki включает примеры кода, и вы можете найти тесты в исходном коде, если вам нужно увидеть код на работе. Я изо всех сил пытался найти любую документацию драйвера Datastax, однако тест предоставляется в репозитории GitHub, так что это отправная точка.

Смотрите также ответ (ну.. в любом случае, не мой), он рассматривает некоторые преимущества/недостатки бережливости и CQL.


Я бы рекомендовал драйвер Java Datastax для Cassandra http://www.datastax.com.

для поддержки JPA, как попробуйте мой инструмент отображения. http://valchkou.com/cassandra-driver-mapping.html

Аннотация управляемый Ни картографических файлов, ни скриптов, ни конфигурационных файлов. Нет необходимости в сценариях DDL. Схема автоматически синхронизируется с определением сущности.

пример использования:

   Entity entity = new Entity();
   mappingSession.save(entity);
   entity = mappingSession.get(Entity.class, id);
   mappingSession.delete(entity); 

доступно на maven центральный

   <dependency>
      <groupId>com.valchkou.datastax</groupId>
      <artifactId>cassandra-driver-mapping</artifactId>          
    </dependency>

Я бы также добавил достойную поддержку. Мы публикуем ответы на playORM все время при переполнении стека;). Он также собирается начать поддерживать mongodb (работа почти завершена), поэтому любые клиенты могут работать на mongodb или cassandra. Он имеет свой собственный язык запросов, так что этот порт работает просто отлично. У вас всегда есть доступ к интерфейсу raw astyanax, когда вам действительно нужна скорость.

кроме того, ваша заметка об asynch...бережливость ранее не поддерживала asynch, поэтому клиенты тоже как они сгенерировали бережливый код. Поскольку это изменилось, я не знаю клиента, который добавил бы асинхронный материал.

Я знаю, что у hbase есть клиент asynch. В любом случае, я просто подумал, что добавлю свои 2 цента, если это немного поможет.

EDIT: недавно я был в исходном коде cassandra-thrift, и это не очень хороший api для асинхронной разработки с помощью метода send и recv (), но вы не знаете, когда вызывать метод recv. Аарон Мортон о Кассандре в списке пользователей есть блог о том, как вы действительно можете это сделать, но он не чист...нужно захватить селектор из бережливости глубоко и сделать некоторые вещи, чтобы вы знали, когда вызывать метод recv...довольно неприятная штука.

, Дин!--1-->

Я использовал Гектора, Астианакс и бережливость напрямую. Я также использовал клиент Python PyCassa.

функции, которые я нашел важными и дифференцирующими, были:

  • простота использования API
  • поддержка составных столбцов
  • объединение подключений
  • задержка
  • документация

одна из основных проблем - получение правильных типов. Вы хотите иметь возможность передавать в longs, Strings, byte[], так далее.. И Гектор, и Астианакс решают это с помощью объектов сериализатора. В Astyanax вы указываете их выше по цепочке, поэтому вам нужно указывать их реже. В Hector синтаксис часто очень неуклюж и трудно адаптируется, если вы меняете свою схему.

поскольку Python имеет динамические типы, с этим намного проще справиться в PyCassa. Поскольку это не вариант для вас, я не буду много говорить об этом, но я нашел его самым простым в использовании (на сегодняшний день), но и довольно медленным.

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

насколько я знаю, объединение соединений одинаково для Гектора и Астианакса. Как избежать сбитых hosts и откройте новые кольца. Оба из этих характеристик критические к надежности и ремонтопригодности. Кажется, у Пелопа есть эти функции, но я никогда не пробовал.

ключевым отличием Astyanax от Hector является оптимизация задержки. Астианакт имеет возможность направлять запросы чтения и записи на узел реплики, потенциально избегая дополнительного сетевого перехода. Это может уменьшить задержку на несколько миллисекунд.

наконец, посмотрите, у Astyanax была плохая документация, но теперь она кажется намного улучшенной.

единственное преимущество Гектора, которое я вижу сегодня, заключается в том, что он гораздо шире используется, поэтому, вероятно, менее багги. Но Astyanax имеет лучший набор функций.


У меня есть аналогичная рекомендация, как Valchkou. Драйвер DataStax java CQL, очень хорош. Я попытался астианаксом, Кундера и playorm buffalosw по. Астианакс очень низкий уровень и какой-то сложный. Kundara и playorm являются универсальными ORMs для баз данных nosql и сложны для настройки и начала работы.

API Datastax в значительной степени похожи на драйвер JDBC, и вам нужно встроить операторы CQL в DAO и написать несколько строк кода для загрузки и сохранения ваших сущностей. Решить это проблема, я написал Java object mapper под названием cassandra-jom, построенный вокруг драйвера datastax cql. Аннотации Cassandra-jom очень похожи на аннотации JPA/Hibernate и могут даже создавать/обновлять схему семейства столбцов из вашей объектной модели. Он прост в использовании и надежен и используется в других моих живых веб-приложениях. Проверьте это на своей странице GitHub.

https://github.com/w3cloud/cassandra-jom