Выбор высокого уровня Java-клиента для Apache Cassandra

Есть четыре API высокого уровня для доступа к Cassandra, и у меня нет времени попробовать их всех. Поэтому я надеялся найти кого-то, кто мог бы помочь мне выбрать правильный.

Я попытаюсь записать свои выводы о них:

DataNucleus-Cassandra-Plugin

плюсы:

  • поддерживает JPA1, JPA2, JDO1 - JDO3 - как я читал в обзоре, JDO масштабируется лучше, чем Hibernate с JPA
  • все плюсы, упомянутые в kundera?

минусы:

  • нет опыта с JDO до сих пор (актуально только для меня, конечно;)
  • документация не найдена!

Кундера

плюсы:

  • JPA 1.0 аннотации со всеми преимуществами (стандартное соответствие, без кода шаблона,...)
  • обещание следующих функций в ближайшем будущем: слушатели JPA, @PrePersist @PostPersist и т.д. - Отношения, @OneToMany, @ManyToMany и т.д. - Транзакционная поддержка, @Transactional

минусы:

  • ранняя стадия разработки плагина?
  • ошибки?
  • Невозможно устранить проблемы в рамках JDO/JPA?

s7 пелеты

плюсы:

  • чистый java api → более тонкий контроль над сохранением?

минусы:

  • чистый java api → шаблонный код

hector 0.7

плюсы:

  • mavenized
  • spring интеграция → инъекция зависимостей
  • чистый java api → более тонкий контроль над сохранением?
  • Мониторинг jmx?
  • Управление узлами кажется простым и гибким.

минусы:

  • чистый java api (без аннотаций) → код плиты котла

Заключение пока

Как я уверен в RDMS, Hibernate, JPA, Spring и не так уж в курсе событий с EJB, мое первое впечатление было, что пойти на kundera было бы правильным выбором. Но после прочтения некоторых сообщений относительно JPO, DataNucleus, я уже не уверен. Поскольку кривая обучения должна быть крутой (также для опытных разработчиков JPA?) Для DataNucleus, я не уверен, должен ли я ее использовать.

Моя главная проблема - это статус плагина. Насколько я понял, форум поддержки/помощи для JDO и Datanucleus-Cassandra-Plugin, поскольку он не так широко распространен.

Кто-нибудь есть, кто уже имеет опыт, с некоторыми фреймворками уже и может дать мне подсказку? Может быть, и смешанная стратегия будет иметь смысл. В случаях (если они существуют) JDO не является гибким/достаточным/все, что достаточно для моих потребностей, чтобы вернуться к одному из более простых API-панелей или певцов? Это возможно? Есть ли такой подход, как в JPA, чтобы получить соединение sql и получить/поместить данные?


После прочтения немного я нашел следующую дополнительную информацию:

Datanucleus-Cassandra-Plugin основан на пелетах, к которым также можно получить доступ для большей гибкости, большей производительности (?), которые должны использоваться в семействах столбцов с большим количеством данных, доступ JDO/JPA должен быть только используется для "административных" данных, где производительность не так важна, а количество данных не является ошеломляющим.

Которая все еще оставляет вопрос открытым, чтобы начать с hector или pelops.

для него более поздняя расширяемость Datanucleus-Cassandra-Plugin или hector для этого более достаточной поддержки на node hanldling.

Ответы

Ответ 1

Я попробовал большинство из этих решений и нашел лучшего для hector. Даже когда у вас есть проблемы, вы всегда можете связаться с людьми, которые написали гектора в #cassandra в freenode. и код более зрелый, насколько я касаюсь. В клиенте cassandra наиболее важной частью будет управление пулами соединений (так как все клиенты выполняют в основном одни и те же операции через бережливость, но пул соединений - это то, что делает рулон клиента высокого уровня). В этом случае я буду голосовать за hector, так как я использую его в производстве уже более года без видимых проблем (1 проблема повторного подключения исправлена, как только я обнаружил и отправлю электронное письмо об этом).

Я все еще использую cassandra 0.6.

Ответ 2

Автор плагина datanucleus, Тодд Девять, сейчас работает над поддержкой JPA следующего поколения в Hector.

Ответ 3

Клиент Hector был API, который мы выбираем из-за следующих вещей, которые у него были:

  • Пул соединений (огромный прирост производительности при совместном использовании соединения с node)
  • Полная пользовательская настройка с использованием интерфейсов для большинства всех.
  • Хосты Auto Discovery
  • Определения политики балансировки пользовательской нагрузки (LeastActiveBalancingPolicy или RoundRobinBalancingPolicy или реализация LoadBalancingPolicy)
  • Легкий адаптер на верхней части Thrift API.
  • Отличные примеры: см. hector-examples
  • Встроенная поддержка JMX.

Нижняя сторона Гектора:

  • Документация неплохая, но в Java Docs немного. Это легко может быть запросом Git fork/pull для сообщества пользователей.
  • Поддержка ORM была немного ограниченной, но не актуальной для использования в нашем случае. Я не мог заставить некоторые из ассоциаций "один ко многим" работать легко, а также не описывать тип модели Cassandra (супер-столбцы или семейства столбцов для связанных коллекций). Также отсутствие примеров Java (возможно, некоторые из них, пожалуйста, напишите, если вы найдете их).

Кроме того, я пробовал использовать kundera с очень небольшим успехом. Не так много примеров, чтобы использовать или попробовать, очень мало поддержки форума. Кажется, он поддерживается одним человеком, что делает его еще сложнее выбрать такой инструмент. Он появляется на основе активности SVN, которую он переносил на использование Hadoop вместо этого, а также для поддержки.

Ответ 4

Я предлагаю вам попробовать Kundera-2.0.1. С момента его создания произошли серьезные изменения, и я вижу много новых функций, которые добавляются и исправляются ошибки. В настоящее время он поддерживает JPA 1.0 и Cassandra 0.7.6, но они планируют добавить поддержку Cassandra 0.8 и JPA 2.0 в ближайшее время. Здесь есть довольно хороший пример: https://github.com/impetus-opensource/Kundera/wiki/Getting-Started-in-5-minutes

Ответ 5

Вышла версия Kundera 2.0.4.

Основные изменения в этой версии:

  • Перенасыщение перекрестного хранилища данных (простое для запуска существующего приложения mysql поверх nosql)
  • поддержка реляционных баз данных (например, Mysql и т.д.)
  • заменить solandra на индексирование на основе lucene.
  • Поддержка добавлена ​​для двунаправленных ассоциаций.
  • Исправлены улучшения производительности.

Ответ 6

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

API Astyanax

Astyanax реализует свободный API, который направляет вызывающего абонента к узкому или настроить запрос через набор четко определенных интерфейсов. Мы также включены некоторые рецепты, которые будут выполняться эффективно и как можно ближе на уровень RPC низкого уровня, насколько это возможно. Клиент также делает использование дженериков и перегрузка, чтобы практически исключить необходимость укажите сериализаторы. Некоторые ключевые особенности API включают:

  • Типы ключей и столбцов определены в классе ColumnFamily, который устраняет необходимость указания сериализаторов.
  • Типы ключей нескольких столбцов в том же ключевом пространстве. Имена композитных столбцов на основе аннотаций.
  • Автоматическая разбивка на страницы.
  • Параллельные запросы, которые распознаются токеном.
  • Настраиваемый уровень согласованности для каждой операции.
  • Настраиваемая политика повторения за операцию.
  • Операции со стрелками для конкретных node.
  • Операции Async с одним таймаутом с использованием фьючерсов.
  • Простой сопоставление объектов на основе аннотаций.
  • Результат операции возвращает хост, латентность, количество попыток.
  • Интерфейсы Tracer для регистрации пользовательских событий для отказа и успеха операции.
  • Оптимизированная групповая мутация.
  • Полностью скрыть часы для вызывающего абонента, но предоставить его для настройки.
  • Простая поддержка CQL.
  • RangeBuilders для упрощения построения простых, а также составных диапазонов столбцов.
  • Композитные сборщики упрощают создание составных имен столбцов.

Рецепты Рецепты для некоторых распространенных случаев использования:

  • Импортер CSV.
  • экспортер JSON для преобразования любого результата запроса в JSON с широким диапазоном настройки.
  • Поиск параллельного обратного индекса.
  • Ключевая уникальная проверка ограничений.

http://techblog.netflix.com/2012/01/announcing-astyanax.html

Ответ 7

Вы можете попробовать Achilles, новый разработанный мной диспетчер сущностей, который поддерживает все функции CQL3.

  • Отображение сущности
  • Операции стиля JPA
  • Ограниченная поддержка соединения
  • Отображение кластеризованных объектов с использованием составного первичного ключа
  • Запросы (native, typed, slice)
  • Поддержка счетчиков
  • Поддержка уровня согласованности
  • TTL и временная метка
  • JUnit 4 Правило для запуска встроенного сервера Cassandra для тестирования

    И так далее...

    Существует 2 реализации: Thrift и CQL

    Версия Thrift зависит от Гектор под капотом.

    Версия CQL выводит новый Java Core Core из Datastax для всех операций

    Краткая справка здесь