web-dev-qa-db-ja.com

Cassandra Client Java API

私は最近Cassandra Databaseで作業を開始しました。現在、どのCassandra client私たちは前進すべきです。

どのクライアントをCassandra=に使用するかについて、stackoverflowに関するさまざまな投稿を見てきましたが、非常に明確な答えはありません。

私のチームは、これについて調査を行い、特定のpros and consCassandra Client API’s Javaで。

先ほど述べたように、最近Cassandraに関与したので、特定の人々がPelops clientおよび特定の人々がAstyanaxおよび他のクライアントと一緒に行く理由。

各Cassandra=クライアントについて簡単なことを知っています。つまり、その作業を行い、Cassandraデータベースへの読み書きを開始できます。

以下は私がこれまでに持っている情報です。

CASSANDRA APIS

  • ヘクター(生産準備完了)
    最も安定したJava API、プライムタイムに対応。

  • Astyanax(アップアンドカマー)
    クリーンなJava NetflixのAPI。Hectorほど広く使用されていませんが、堅牢です。

  • Kundera(NoSQL ORM)
    JPA準拠。これは、オブジェクトを介してCassandra=と対話する場合に便利です。
    これにより、動的な数の列/名前などを持つことができなくなるという点で多少制約がありますが、ORMを移植したり、ストレージをCassandraより伝統的な用途向け。

  • Pelops
    Pelopsを簡単に使用しただけです。これは単純なAPIでしたが、その背後には勢いがなかったようです。

  • PlayORM(制約のないORM?)
    これについて聞いたばかりです。 JQLを導入することで、従来のJPAベースのORMとNoSQLの間のインピーダンスミスマッチを解決しようとしているようです。有望に見えます。

  • Thrift(Avoid Me!)
    これは「低レベル」APIです。

以下は、Cassandra Client-

  • 最優先事項は、低レイテンシのオーバーヘッド、非同期API、および本番環境の信頼性/安定性です。
    (たとえば、クライアントをラップするDALで使用できる、よりユーザーフレンドリーなAPI)。
  • 接続プーリングとパーティション認識は、その他の優れた機能です。
  • 追加された新しいノードを検出できます。
  • 良好なサポート(下記の学部長が指摘)

誰でもこれについての考えを提供できますか?また、それぞれの長所と短所Cassandra Clientまた、どのクライアントが私の要件を満たすことができるかも、非常に役立ちます。

主に、Astyanax client or New Datastax client that uses Binary protocolこれまでの研究に基づいていると思います。しかし、私の研究を裏付けてチームに提示する特定の情報を持っていません。

AstyanaxクライアントとNew Datastaxクライアント(新しいBinaryプロトコルを使用)の比較は非常に役立ちます。

私の研究において私にとって大きな助けになり、過去にさまざまなクライアントを使用したさまざまな人々からこれに関する多くの知識を得るでしょう。

48
arsenal

Thriftは従来のAPIになりつつあります。

まず、Thrift APIには新しい機能が追加されないことに注意してください。下位互換性のためにあり、新しいプロジェクトには推奨されません。
- the paul

そのため、ThriftベースのAPIは避けたいと思います(thriftは後方互換性のためにのみ保持されています)。

節約ベースのAPIを使用する必要がある場合は、Astyanaxに行きます。 Astyanaxは非常に使いやすいです(他のother約APIと比較して、個人的な経験では、Datastaxのドライバーはさらに簡単です)。

Datastax's API( and GitHub repo )をご覧ください。ダウンロードするAPIのコンパイルされたバージョンがあるかどうかはわかりませんが、Mavenで簡単にビルドできます。また、GitHubリポジトリのコミットログを確認すると、非常に頻繁に更新されます。

このドライバーはCQL3でのみ動作し、非同期ですが、Cassandra 1.2がサポートされている最も古いバージョンであることに注意してください。

パフォーマンス
Astyanaxは節約ベースであり、Datastaxのドライブはバイナリプロトコルです。ここに最新の benchmarks があります。th約とCQLの間で見つけることができます(これらは間違いなく古いことに注意してください)。ただし、これらのベンチマークで示されているパフォーマンスのわずかな違いは、公平性においてはほとんど問題になりません。

非同期サポート
Datastaxのasynchサポートは、Astyanax(Netflixそれを実装しようとしたが、しないことを決めた。

ドキュメント
Netflixのwiki に反論することはできません。ドキュメントは優れており、かなり頻繁に更新されます。 Wikiにはコード例が含まれており、作業中のコードを確認する必要がある場合は、ソースコードでテストを見つけることができます。 Datastaxドライバーのドキュメントを見つけるのに苦労しましたが、テストはGitHubリポジトリで提供されているため、それが出発点になります。

this answer もご覧ください(とにかく私のものではありません)ThriftとCQLの長所/短所を調べます。

23
Lyuben Todorov

Datastax Java driver for 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>
8
Valchkou

私も適切なサポートを追加します。スタックオーバーフローについては常にplayORMに回答を投稿します;)。すべてのクライアントがmongodbまたはcassandraで実行できるように、mongodbのサポートを開始しようとしています(作業はほぼ終了しています)。このポートは問題なく機能するように、独自のクエリ言語を備えています。本当に速度が必要なときは、常に生のastyanaxインターフェースにもアクセスできます。

また、asynch ... thriftに関するメモは以前はasynchをサポートしていなかったため、thriftコードを生成するクライアントもサポートしていませんでした。それが変わったので、私は非同期のものを追加したクライアントを知りません。

ただし、hbaseには非同期クライアントがあります。とにかく、それが少し助けになるなら、私は2セントを加えると思った。

編集:私は最近cassandra-thriftが生成したソースコードにいましたが、sendとrecv()メソッドを使用した非同期開発にはあまり良いAPIではありませんが、recvメソッドをいつ呼び出すかわかりません。 Aaron morton on cassandraユーザーリストには、あなたが本当にそれを行う方法についてのブログがありますが、それはまったくきれいではありません... recvメソッドを呼び出すタイミングを知る...かなり厄介なもの。

後で、ディーン

3
Dean Hiller

ヘクター、アスティアナックス、スリフトを直接使用しました。また、Python client PyCassa。

重要で差別化された機能は次のとおりです。

  • APIの使いやすさ
  • 複合柱のサポート
  • 接続プーリング
  • 待ち時間
  • ドキュメンテーション

大きな問題の1つは、型を正しく取得することです。 long、String、byte []などを渡すことができます。HectorとAstyanaxの両方が、Serializerオブジェクトを使用してこれを解決します。 Astyanaxでは、チェーンの上位で指定するため、指定頻度を減らす必要があります。 Hectorでは、スキーマを変更すると構文が非常に不格好になり、適応させるのが難しいことがよくあります。

Pythonには動的な型があるため、PyCassaでこれを処理する方がはるかに簡単です。これはオプションではないため、あまり説明しませんが、最も簡単に使用できることがわかりました(はるかに)しかし、非常に遅い。

複合カラムのサポートは、Hectorでは非常にわかりにくいものです。 Astyanaxには、これを大幅に簡素化する注釈があります。

私の知る限り、接続プーリングはHectorとAstyanaxで同じです。どちらもホストのダウンを回避し、リングに追加された新しいホストを発見します。これらの機能は両方とも、信頼性と保守性にとって重要です。 Pelopsにはこれらの機能があるように見えますが、私は試したことはありません。

AstyanaxとHectorの主な違いは、レイテンシの最適化です。 Astyanaxには、読み取りおよび書き込み要求をレプリカノードにルーティングする機能があり、余分なネットワークホップを回避できる可能性があります。これにより、待ち時間が数ミリ秒短縮されます。

最後に、Astyanaxのドキュメントは貧弱でしたが、今ではかなり改善されているようです。

今日私が見ることができるヘクターの唯一の利点は、はるかに広く使用されているため、おそらくバグが少ないことです。しかし、Astyanaxにはより優れた機能セットがあります。

2
Richard

Valchkouと同様の推奨事項があります。 DataStax Java CQLドライバー、非常に良い。astyanax、kundera、buffaloswのplayormを試してみました。Astyanaxは非常に低レベルで、いくらか複雑です。Kundaraとplayormはnosqlデータベースの汎用ORMであり、複雑ですセットアップして開始します。

Datastax apiはJDBCドライバーに非常によく似ており、DAOにCQLステートメントを埋め込み、エンティティをロードおよび保存するために数行のコードを記述する必要があります。この問題を解決するために、datastax cqlドライバーを中心に構築されたcassandra-jomと呼ばれるJavaオブジェクトマッパーを作成しました。Cassandra-jomアノテーションはJPA/Hibernateアノテーションに非常に似ており、オブジェクトモデルの列ファミリスキーマ:使いやすく、信頼性があり、他のライブWebアプリケーションでも使用されています。GitHubページで確認してください。

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

1
Karthik Sankar