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.