Cassandra Client Java API

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

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

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

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

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

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

CASSANDRA APIS

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

Поддержка Asynch
попытался реализовать, но решил не делать этого).

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

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

Ответ 2

Я бы порекомендовал драйвер Datastax java для 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>

Ответ 3

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

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

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

EDIT: Недавно я был в исходном коде cassandra-thrift, и это не очень хорошая api для асинхронной разработки с методом send и recv(), но вы не знаете, когда нужно вызвать метод recv. У Aaron morton в списке пользователей cassandra есть блог о том, как вы действительно можете это сделать, но он совсем не чист... нужно захватить селектор из бережливости в глубину и сделать кое-что, поэтому вы знаете, когда нужно вызвать метод recv.. Довольно неприятный материал.

позже, Дин

Ответ 4

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

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

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

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

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

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

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

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

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

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

Ответ 5

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

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

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