Cassandra客戶端Java API

我最近開始使用Cassandra數據庫。 現在,我正在評估應該前進哪個Astyanax client or New Datastax client that uses Binary protocol

我在stackoverflow上看到過很多關于使用哪個客戶端作為Cassandra的文章,但是沒有一個有明確的答案。

我的團隊要求我對此進行一些研究,并為Java中的每個Pelops client提出一些Astyanax client or New Datastax client that uses Binary protocol

正如我提到的,我最近參與了Astyanax client or New Datastax client that uses Binary protocol,所以對為什么某些人選擇Pelops client以及為什么某些人選擇Astyanax和其他一些客戶一無所知。

我了解有關每個Cassandra客戶端的簡要信息,這意味著我能夠進行這項工作并開始讀寫Cassandra數據庫。

以下是我到目前為止的信息。

卡桑德拉APIS

  • 赫克托(生產就緒)
    最穩定的Java API,已準備就緒。

  • Astyanax(崛起與來臨)
    Netflix提供的干凈Java API。 它沒有像Hector那樣廣泛使用,但是很可靠。

  • 昆德拉(The NoSQL ORM)
    兼容JPA,當您想通過對象與Cassandra進行交互時,這非常方便。
    這會在某種程度上限制您,因為您將無法獲得動態數量的列/名稱等。但是它確實允許您通過ORM進行移植或集中存儲在卡桑德拉(Cassandra)上用于更多傳統用途。

  • 佩洛普斯
    我只是簡單地使用過Pelops。 這是一個簡單的API,但似乎沒有有它背后的動力。

  • PlayORM(沒有限制的ORM?)
    我剛剛聽說了 似乎正在嘗試解決阻抗問題通過引入JQL,傳統的基于JPA的ORM與NoSQL之間不匹配。 它看起來有希望。

  • 節儉(避免我!)
    這是“低級” API。

以下是決定Astyanax client or New Datastax client that uses Binary protocol-

  • 第一要務是:低延遲開銷,Asynch API和生產環境的可靠性/穩定性。
    (例如,可以在包裝客戶端的DAL中使用更加用戶友好的API)。
  • 連接池和分區意識是其他一些不錯的功能。
  • 能夠檢測添加的任何新節點。
  • 以及良好的支持(如下院長指出)

有人可以對此提供一些想法嗎? 此外,每一個Astyanax client or New Datastax client that uses Binary protocol的優缺點以及哪個客戶可以滿足我的要求,也將有很大的幫助。

我相信,到目前為止,我想主要是圍繞Astyanax client or New Datastax client that uses Binary protocol進行研究。 但是沒有足夠的信息來支持我的研究并將其呈現給我的團隊。

Astyanax客戶端和New Datastax客戶端(使用新的Binary協議)之間的任何比較都會有很大的幫助。

這將對我的研究大有幫助,并且會從過去使用過不同客戶的不同人士那里獲得很多知識。

asked 2020-02-29T10:40:15Z
5個解決方案
23 votes

Thrift越來越成為舊版API:

首先,您應該意識到Thrift API不會獲得新功能; 它在那里是為了向后兼容,不建議用于新項目。
-保羅

因此,我會避免使用基于Thrift的API(僅為了向后兼容而保留了Thrift)。

說的是,如果您確實需要使用基于節儉的API,那么我會選擇Astyanax。Astyanax非常易于使用(與其他節儉API相比,但我的個人經驗是Datastax的驅動程序更容易使用)。

因此,您應該看看Datastax的API(和GitHub存儲庫)嗎? 我不確定是否有可供下載的API編譯版本,但是您可以使用Maven輕松構建它。 另外,如果您查看GitHub存儲庫的提交日志,它會進行非常頻繁的更新。

該驅動程序僅與CQL3配合使用,并且是異步的,但請注意,Cassandra 1.2是最早受支持的版本。

性能
Astyanax是基于節儉的,而Datastax的驅動器是二進制協議。 這是我在節儉和CQL之間可以找到的最新基準(請注意,這些絕對過時了)。 但是公平地說,這些基準中顯示的性能上的細微差別幾乎沒有關系。

異步支持
與Astyanax相比,Datastax的異步支持是絕對的優勢(Netflix嘗試實現它,但決定不這樣做)。

文獻資料
我真的不能反對Netflix的Wiki。 該文檔非常出色,并且經常更新。 他們的Wiki包含代碼示例,如果您需要查看工作中的代碼,則可以在源代碼中找到測試。 我很難找到Datastax驅動程序的任何文檔,但是GitHub存儲庫中提供了測試,因此這是一個起點。

也看看這個答案(好吧..反正不是我的)。它探討了Thrift和CQL的一些優點/缺點。

answered 2020-02-29T10:41:23Z
8 votes

我會推薦Cassandra的Datastax Java驅動程序[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>
answered 2020-02-29T10:42:00Z
3 votes

我還將添加體面的支持。 我們一直在堆棧溢出時將答案發布到playORM;)。 它還即將開始支持mongodb(工作已接近完成),因此任何客戶端都可以在mongodb或cassandra上運行。 它具有自己的查詢語言,因此該端口可以正常工作。 當確實需要速度時,您也始終可以訪問原始的astyanax界面。

另外,您關于asynch ... thrift的說明以前不支持asynch,因此在生成Thrift代碼時也沒有客戶端也這樣做。 既然改變了,我不知道有一個客戶端添加了異步內容。

我知道hbase通過一個異步客戶端。 無論如何,只是想我會加2美分,以防有所幫助。

編輯:我最近是在cassandra-thrift生成的源代碼中,它不是用于使用send和recv()方法進行異步開發的很好的api,但是您不知道何時調用recv方法。 在cassandra用戶列表上的Aaron morton上有一個博客,介紹了如何真正做到這一點,但根本不干凈...必須從節儉的角度抓住選擇器并做一些事情,以便您知道何時調用recv方法。 。漂亮的東西。

后來,院長

answered 2020-02-29T10:42:39Z
2 votes

我直接使用了Hector,Astyanax和Thrift。 我還使用了Python客戶端PyCassa。

我發現重要且與眾不同的功能是:

  • 易于使用API
  • 復合柱支撐
  • 連接池
  • 潛伏
  • 文獻資料

主要問題之一是使類型正確。 您希望能夠傳入long,String,byte []等。Hector和Astyanax都通過使用Serializer對象來解決此問題。 在Astyanax中,您可以在鏈條的較高位置指定它們,因此您不必經常指定它們。 在赫克托(Hector)中,語法通常很笨拙,如果更改架構,則很難適應。

由于Python具有動態類型,因此在PyCassa中處理它要容易得多。 由于這不是您的選擇,因此我不會贅述,但我發現(到目前為止)它最容易使用,但速度也很慢。

在Hector中,復合柱的支持非常令人困惑。 Astyanax具有注釋,可以大大簡化此操作。

據我了解,Hector和Astyanax的連接池相同。 兩者都將避免掉落的主機,并發現添加到環中的新主機。 這兩個功能對于可靠性和可維護性至關重要。 Pelops似乎具有這些功能,但我從未嘗試過。

Astyanax和Hector之間的主要區別在于延遲優化。 Astyanax能夠將讀寫請求路由到副本節點可以领救济金的游戏,從而有可能避免額外的網絡躍遷。 這樣可以將延遲減少幾毫秒。

最后看,Astyanax的文檔不多,但現在似乎有了很大的改進。

我今天看到的赫克托爾的唯一優勢是,它被廣泛使用,因此越野車可能更少。 但是Astyanax具有更好的功能集。

answered 2020-02-29T10:43:58Z
1 votes

我有與Valchkou類似的建議。 DataStax java CQL驅動程序,非常好。 我嘗試過Astyanax,Kundera和Buffalosw的播放器。 Astyanax的級別很低,有些復雜。 Kundara和playorm是用于nosql數據庫的通用ORM,并且設置和入門都很復雜。

Datastax API與JDBC驅動程序非常相似可以领救济金的游戏,您必須在DAO中嵌入CQL語句,并編寫幾行代碼來加載和保存實體。 為了解決這個問題,我編寫了一個名為cassandra-jom的Java對象映射器可以领救济金的游戏,它圍繞datastax cql驅動程序構建。 Cassandra-jom批注與JPA / Hibernate批注非常相似,甚至可以從對象模型創建/更新列族模式。 它易于使用且可靠,可用于我的其他實時Web應用程序。 在其github頁面上查看。

[HTTPS://GitHub.com/我3cloud/Cassandra-Jo M]

answered 2020-02-29T10:44:28Z
translate from