2013-04-13 20 views
45

Ho recentemente iniziato a lavorare con Cassandra Database. Ora sono in procinto di valutare a quale Cassandra client dovremmo andare avanti.API del client Cassandra Java

Ho visto vari post su Stackoverflow su quale client utilizzare per Cassandra ma nessuno ha una risposta molto definitiva.

La mia squadra mi ha chiesto di fare qualche ricerca su questo e di trovare un certo pros and cons per ogni Cassandra Client API’s in Java.

Come ho già detto, ho recentemente è stato coinvolto con Cassandra quindi non avere più di tanto idea del perché alcune persone scelgono Pelops client e perché certe persone vanno con Astyanax e alcuni altri clienti.

Conosco brevi cose su ciascuno dei client Cassandra, con cui intendo dire che sono in grado di farlo funzionare e iniziare a leggere e scrivere nel database di Cassandra.

Di seguito sono le informazioni che ho finora.

CASSANDRA APIS

  • Hector (produzione-Ready)
    Il più stabile delle API Java, pronto per il prime-time.

  • Astianatte (su e Comer)
    Un pulito API Java da Netflix. Non è così diffuso come Hector, ma è solido.

  • Kundera (La NoSQL ORM)
    JPA compatibile, questo è utile quando si vuole interagire con Cassandra attraverso oggetti.
    Questo ti costringe in qualche modo a non essere in grado di avere un numero dinamico di colonne/nomi, ecc. Ma ti permette di eseguire il port over ORM, o centralizzare lo storage su Cassandra per usi più tradizionali.

  • Pelope
    Ho usato solo Pelope brevemente. Era un'API semplice, ma non sembrava che lo avesse lo slancio dietro.

  • PlayORM (ORM senza i vincoli?)
    Ho appena sentito parlare di questo. Sembra che stia cercando di risolvere l'impedenza di disaccordo tra gli ORM tradizionali basati su JPA e NoSQL introducendo JQL. Sembra promettente .

  • Thrift (evitarmi!)
    Questa è l'API "di basso livello".

seguito sono nostre priorità nel decidere Cassandra Client -

  • Prima priorità sono: basso overhead latenza, Asynch API, e affidabilità/stabilità ambiente di produzione.
    (ad esempio un'API più user-friendly che si può avere nel DAL che avvolge il client).
  • Il pool di connessioni e la consapevolezza delle partizioni sono altre buone caratteristiche.
  • In grado di rilevare eventuali nuovi nodi aggiunti.
  • buon supporto, nonché (come sottolineato dal decano di seguito)

Qualcuno può fornire alcuni pensieri su questo? E anche qualsiasi pro e contro per ogni Cassandra Client e anche quale client può soddisfare i miei requisiti sarà di grande aiuto pure.

Credo, principalmente girerò intorno a Astyanax client or New Datastax client that uses Binary protocol Credo che sia la base della mia ricerca fino ad ora. Ma non ho certe informazioni per sostenere la mia ricerca e presentarla alla mia squadra.

Qualsiasi confronto tra il client Astyanax e il client New Datastax (che utilizza un nuovo protocollo Binary) sarà di grande aiuto.

Sarà di grande aiuto per me nella mia ricerca e otterrò molte informazioni su questo da persone diverse che hanno usato clienti diversi in passato.

+3

È inoltre possibile aggiungere cassandra-JDBC alla tua lista https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/ – phatfingers

+0

Buone phatfingers punto. Ho conosciuto un'altra roba. Freddo. – ferhan

+0

Ho scelto astyanax ad un certo punto e posso dire di sicuro che è facile da usare e molto stabile. Pochi indicatori: [per il driver datastax è beta per ora] (https://github.com/datastax/java-driver/blob/master/README.rst); [Astyanax su protocollo nativo] (https://github.com/Netflix/astyanax/issues/280) –

risposta

23

Thrift sta diventando più di un vecchie API:

In primo luogo, si deve essere consapevoli che l'API Thrift non sta per essere sempre nuove funzionalità; è lì per compatibilità con le versioni precedenti e non è raccomandato per i nuovi progetti.
- the paul

Quindi eviterei API basate Thrift (risparmio viene mantenuto solo per compatibilità all'indietro).

Dicendo che se si ha bisogno di utilizzare un'API basata sul risparmio, opterei per l'Astyanax. Astyanax è molto facile da usare (rispetto ad altre API di risparmio, ma la mia esperienza personale è che il driver di Datastax è ancora più semplice).

Quindi dovresti dare un'occhiata all'API Datastax's (and GitHub repo)? Non sono sicuro se ci siano versioni compilate dell'API per il download, ma puoi facilmente crearlo con Maven. Inoltre, se si guardano i registri di commit del repository GitHub subiscono aggiornamenti molto frequenti.

Il driver funziona esclusivamente con CQL3 ed è asincrono, ma si avverte che Cassandra 1.2 è la prima versione supportata.

prestazioni
Astianatte è parsimonia based e rigido del Datastax è il protocollo binario. Ecco l'ultimo benchmarks che ho trovato tra parsimonia e CQL (nota che questi sono decisamente obsoleti). Ma in tutta onestà la piccola differenza di prestazioni mostrata in questi benchmark raramente conta.

supporto Asynch supporto asynch
di Datastax è un indubbio vantaggio rispetto Astianatte (Netflix tried implementing, ma ha deciso di non).

Documentazione
Non posso davvero sostengo contro Netflix's wiki. La documentazione è eccellente e viene aggiornata abbastanza frequentemente. Il loro wiki include esempi di codice e puoi trovare test nel codice sorgente se hai bisogno di vedere il codice al lavoro. Ho faticato a trovare la documentazione del driver Datastax, ma i test sono forniti nel repository GitHub in modo che sia un punto di partenza.

Anche dare un'occhiata a this answer (beh .. non il mio uno comunque) Guarda alcuni vantaggi/svantaggi di Thrift e CQL.

+0

Sì. E 'stato utile ma, come hai detto, non otterrà nuove funzionalità, quindi non ha senso nemmeno valutarlo. Ma questa è una buona cosa sapere che supporta anche async. – ferhan

+0

@TechGeeky Il driver datastax ** avrà ** nuove funzionalità, il suo risparmio che non otterrà nuove funzionalità. –

3

Vorrei anche aggiungere un supporto decente. Pubblichiamo le risposte per giocare continuamente su overflow dello stack;). Inoltre sta per iniziare a supportare mongodb (il lavoro è quasi finito), quindi qualsiasi client può girare su mongodb o cassandra. Ha il proprio linguaggio di query tale che questa porta funziona perfettamente. Hai sempre accesso all'interfaccia raw astyanax anche quando hai veramente bisogno della velocità.

Inoltre, la nota su asynch ... parsimonia in precedenza non supportava asynch, quindi nessun client ha mai generato il codice risparmio. Dal momento che questo è cambiato, non conosco un cliente che ha aggiunto la roba asynch.

So che hbase ha un client asynch però. Ad ogni modo, ho pensato di aggiungere i miei 2 centesimi nel caso in cui aiuti un po '.

EDIT: Recentemente sono stato nel codice sorgente di cassandra-deriva e non è un ottimo api per lo sviluppo asincrono con send e un metodo recv() ma non si sa quando chiamare il metodo recv. Aaron morton sulla lista degli utenti di cassandra ha un blog su come puoi farlo davvero ma non è affatto pulito ... devi afferrare il selettore dal basso e fare alcune cose in modo da sapere quando chiamare il metodo recv .. .pretty brutte cose.

tardi, Dean

+0

Ho provato Kundera. Vorrei provare anche a playORM prima di decidere in che direzione andare. Si prega di aggiornare con la tua ultima esperienza con playORM. È supportato con versioni di framework di gioco più recenti (v2.3)? –

2

Ho usato direttamente Hector, Astyanax e Thrift. Ho anche usato il client Python PyCassa.

Le caratteristiche che ho trovato importante e differenziazione sono:

  • Facilità di utilizzo delle API
  • supporto colonna composita
  • pool di connessioni
  • Latenza
  • Documentation

Uno dei maggiori problemi è ottenere i tipi corretti. Vuoi essere in grado di passare long, stringhe, byte [], ecc. Sia Hector che Astyanax risolvono questo problema usando gli oggetti Serializer. In Astyanax specificali più in alto nella catena, quindi devi specificarli meno spesso. In Hector la sintassi è spesso molto complessa e difficile da adattare se si modifica lo schema.

Dato che Python ha tipi dinamici, è molto più semplice gestirli in PyCassa. Dal momento che non è un'opzione per te, non dirò molto a riguardo, ma l'ho trovato più facile da usare (di gran lunga), ma anche piuttosto lento.

Il supporto di colonne composite è molto confuso in Hector.Astyanax ha annotazioni per semplificare notevolmente questo.

Per quanto ne so, il pool di connessioni è lo stesso per Hector e Astyanax. Entrambi eviteranno gli ospiti abbattuti e scopriranno nuovi aggiunti sul ring. Entrambe queste funzionalità sono cruciali per affidabilità e manutenibilità. Pelops sembra avere queste caratteristiche ma non l'ho mai provato.

Una differenza fondamentale tra Astyanax e Hector è l'ottimizzazione della latenza. Astyanax ha la capacità di indirizzare le richieste di lettura e scrittura a un nodo di replica, evitando potenzialmente un hop di rete aggiuntivo. Questo può ridurre la latenza di alcuni millisecondi.

All'ultimo sguardo, l'astanax ha una documentazione scarsa, ma ora sembra molto migliorata.

L'unico vantaggio di Hector I oggi è che è molto più utilizzato, quindi probabilmente meno buggato. Ma Astyanax ha un set di funzionalità migliori.

8

Vorrei raccomandare il driver java Datastax per Cassandra http://www.datastax.com.

Per il supporto simile a JPA, provare il mio strumento di mappatura. http://valchkou.com/cassandra-driver-mapping.html

Annotation driven Nessun file di mapping, nessun script, nessun file di configurazione. Non c'è bisogno di script DDL. Lo schema si sincronizza automaticamente con la definizione dell'entità.

campione Uso:

Entity entity = new Entity(); 
    mappingSession.save(entity); 
    entity = mappingSession.get(Entity.class, id); 
    mappingSession.delete(entity); 

accessibile Maven centrale

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

ho una raccomandazione simile a Valchkou. Il driver DataStax Java CQL è molto buono. Ho provato il playorm di astyanax, kundera e buffalosw. L'astanax è un livello molto basso e un po 'complesso. Kundara e playorm sono ORM generici per i database nosql e sono complessi da configurare e iniziare.

Gli apis di Datastax sono praticamente simili a un driver JDBC e devi incorporare le istruzioni CQL nel tuo DAO e scrivere diverse righe di codice per caricare e salvare le tue entità. Per risolvere questo problema, ho scritto un java object mapper chiamato cassandra-jom, costruito attorno al driver csl datastax. Le annotazioni di Cassandra-jom sono molto simili alle annotazioni JPA/Hibernate e possono persino creare/aggiornare lo schema della famiglia di colonne dal modello a oggetti. È facile da usare, affidabile e utilizzato nelle mie altre applicazioni web live. Dai un'occhiata alla sua pagina github.

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

Problemi correlati