2010-07-15 13 views
22

Chiunque conosce una buona implementazione Java ORM per HBase. Questo sembra davvero bello per RubyJava ORM per Hbase

http://www.stanford.edu/~sqs/rhino/doc/

Ma non riusciva a trovare uno per Java.

Grazie.

+10

Perché questa domanda è chiusa !!!!!? è una domanda molto bella con 3390 visualizzazioni! Cosa fanno i moderatori SOF? – Heidarzadeh

+4

Questa è una domanda molto importante, perché è considerata non costruttiva? – nitefrog

+0

Questa è ancora una domanda pertinente. La maggior parte delle risposte a questa domanda indicano progetti obsoleti o inesistenti. Raccomando l'uso di uno dei seguenti elementi: [1] Apache Phoenix + Hibernate [2] https://flipkart-incubator.github.io/hbase-object-mapper/ (divulgazione: sono l'autore di questo progetto) –

risposta

2

C'è pigi e parhely e non ho usato nessuno di loro. IMO HBase è un motore veloce per la memorizzazione di chiavi/valori, ma se hai bisogno di un altro livello di astrazione, dovresti controllarli.

+0

Grazie . parmamente non sembra avere documentazione, quindi scelgo di usare prima pigi. –

4

Il punto di forza di HBase, secondo me, è nel mantenere le colonne dinamiche in famiglie di colonne statiche. Dalla mia esperienza nello sviluppo di applicazioni con HBase, trovo che non è così semplice come SQL determinare i qualificatori e i valori delle celle.

Ad esempio, un libro come molti autori, a seconda dei modelli di accesso, delle modifiche dell'autore, dell'implementazione della cache a livello di app che potresti voler scegliere di salvare l'intero autore nella tabella del libro (cioè l'autore risiede nella tabella 2, autore tavolo e tabella del libro) o solo l'id dell'autore. Inoltre, la raccolta dell'autore può essere salvata in una cella come XML/JSON o singole celle per singoli autori.

Con questa intesa ho concluso che scrivere un ORM in piena regola, come Hibernate, non solo sarà molto difficile potrebbe non essere in realtà conclusivo. Quindi ho adottato un approccio diverso, molto più simile a quello di ibasia per ibernazione.

Lasciami provare a spiegare come funziona. Per questo userò i codici sorgente da here e here.

  1. Il primo e più importante compito è quello di implementare un'interfaccia ObjectRowConverter, in questo caso SessionDataObjectConverter. La classe astratta racchiude le migliori pratiche di base come discusso e appreso dalla comunità HBase. L'estensione ti dà fondamentalmente il controllo del 100% su come convertire il tuo oggetto in una riga HBase e viceversa. Per questa unica restrizione dell'API è che gli oggetti dominio devono implementare l'interfaccia PersistentDTO che viene utilizzata internamente per creare Put, Delete, do byte [] all'oggetto id e viceversa.
  2. L'attività successiva consiste nel collegare le dipendenze come fatto in HBaseImplModule. Per favore fatemi sapere se siete interessati che farò le iniezioni di dipendenza.

E questo è tutto. Come sono utilizzati sono disponibili here. Fondamentalmente utilizza CommonReadDao, CommonWriteDao per leggere e scrivere dati da e verso HBase. Il comune read dao implementa la conversione multithreaded di righe su oggetti su query, il multithreading get by ids, ottiene con id e ha i suoi Hibernate Criteria come API per interrogare a HBase tramite Scan (nessuna funzione di aggregazione disponibile). Common write dao implementa codice comune di scrittura con alcune funzioni aggiuntive, come blocco ottimistico/pessimistico, override/controllo di unione entità (non) -esistenza su salvataggio, aggiornamento, eliminazione, ecc.

Questo ORM è stato sviluppato per il nostro scopo interno e sono stato al mio collo e quindi non posso ancora fare qualche documentazione.Ma se sei interessato fammi sapere e io prendi tempo per la documentazione con priorità.

2

Stiamo usando HBase ORM - Surus https://github.com/mushkevych/surus/wiki

Probabilmente vale la pena menzionare

  • lo stiamo usando pesantemente con la mappa Hadoop/riduci
  • ha un modulo aggiuntivo che ti permette di pompare i dati HBase dallo stream JSON (nel nostro caso proviene dal codice Python)