Java-API клиента Cassandra

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

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

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

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

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

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

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

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

  • Astyanax (The Up and Comer)
    Чистый Java API от Netflix. Он не так широко используется, как Гектор, но он прочный.

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

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

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

  • Экономия (Избегай меня!)
    Это "низкоуровневый" API.

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

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

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

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

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

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

5 ответов

Решение

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

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

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

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

Итак, вам стоит взглянуть на API Datastax ( и GitHub repo)? Я не уверен, что есть какие-либо скомпилированные версии API для загрузки, но вы можете легко собрать его с Maven. Также, если вы посмотрите журналы коммитов репозитория GitHub, он будет очень часто обновляться.

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

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

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

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

Также взгляните на этот ответ (ну, во всяком случае, не мой). В нем рассматриваются некоторые преимущества / недостатки Thrift и 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 Central

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

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

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

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

РЕДАКТИРОВАТЬ: Я недавно был в исходном коде, сгенерированном cassandra-thrift, и это не очень хороший API для асинхронной разработки с использованием send и метода recv(), но вы не знаете, когда вызывать метод recv. У Аарона Мортона в списке пользователей Кассандры есть блог о том, как вы действительно можете это сделать, но он совсем не чистый... нужно взять селектор из глубины и сделать некоторые вещи, чтобы вы знали, когда вызывать метод recv... очень неприятные вещи.

позже, Дин

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

Особенности, которые я нашел важными и отличительными, были:

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

Одной из основных проблем является получение правильных типов. Вы хотите иметь возможность передавать long, Strings, byte[] и т. Д. И Гектор, и Astyanax решают эту проблему с помощью объектов Serializer. В Astyanax вы указываете их выше по цепочке, поэтому вы должны указывать их реже. В Гекторе синтаксис часто очень неуклюж, и его сложно адаптировать, если вы меняете схему.

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

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

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

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

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

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

У меня есть рекомендации, аналогичные Valchkou. DataStax Java-драйвер CQL, это очень хорошо. Я попробовал астьянакс, кундеру и буйволов. Astyanax очень низкий уровень и кое-что сложное. Kundara и playorm являются общими ORM для баз данных nosql и сложны в настройке и начале работы.

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

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

Другие вопросы по тегам