martedì 8 maggio 2012

Il futuro della NoSQL con Java EE

Ho seguito la dinamica recente NoSQL da qualche tempo ormai e sembra come se questa parola d'ordine è anche disegnando una sorta di attenzione nel mondo Java Enterprise. Vale a dire 2,4 EclipseLink iniziato sostenendo MongoDB e Oracle NoSQL . Avendo EclipseLink come l'implementazione di riferimento JPA ci si potrebbe chiedere che cosa questo significa per Java EE 7. A lato corto-nota qui: Anche se io faccio parte della EG JSR-342 questo non vuole essere una dichiarazione ufficiale. In seguito ho semplicemente cercare di riassumere le mie esperienze personali e sentimenti verso il sostegno NoSQL con le future versioni di Java EE. Un grande ringraziamento va a Emmanuel Bernard per fornire un feedback in anticipo! Felice per discutere quanto segue: Che cosa è NoSQL? NoSQL è una classificazione dei sistemi di database che non sono conformi al database relazionale o standard SQL. Molto spesso essi sono classificati in base al modo in cui memorizzare i dati e ricadono sotto categorie come chiave-valore negozi, implementazioni BigTable, database archivio di documenti e database grafici. In generale il termine non è ben definita abbastanza per ridurlo a un singolo JSR di supporto o tecnologia. Quindi l'unico modo per trovare idonee tecnologie di integrazione è quello di scavare in ogni singola categoria. chiave / valore Negozi chiave / valore negozi consentire l'archiviazione di dati in uno schema-less modo. Si potrebbe essere memorizzato in un tipo di dati di un linguaggio di programmazione o un oggetto. A causa di questo, non c'è bisogno di un modello di dati fissa. Questo è ovviamente paragonabile a parti di JSR 338 (Java Persistence 2.1) e  JSR 347 (griglie di dati per la piattaforma Java) e anche per ciò che viene fatto con il  JSR 107  ( JCACHE - API Java temporaneo Caching ). con nativo JPA2 anche primario volto a caching è la Cache L2 JPA. L'API Cache JPA è un bene per le operazioni di cache di base, mentre le quote di cache L2 lo stato di un ente - a cui si accede con l'aiuto della fabbrica entity manager - in contesti di persistenza diversi. Cache di livello 2 alla base del contesto di persistenza, che è altamente trasparente per l'applicazione. Quando di cache livello 2 è abilitato, il provider di persistenza cercherà le entità nel contesto di persistenza prima. Se non li trova lì, il provider di persistenza cercherà nella cache di livello 2 next invece di inviare una query al database. Lo svantaggio, ovviamente, ecco, che da oggi questo funziona solo con NoSQL come una sorta di "Cache". E non come una sostituzione per l'archivio dati RDBMS. Data la portata di questa spec sarebbe una buona forma: Ma credo fermamente che la APP è stato progettato per essere una astrazione RDBS e nient'altro. Se ci deve essere qualche tipo di supporto per i database relazionali non potremmo finire per avere un livello di astrazione più alto livello nel luogo in cui tonnellate di modalità di persistenza e caratteristiche diverse (forse qualcosa di simile a  dati primaverili ). In generale la mappatura a livello di oggetto ha molti vantaggi tra cui la capacità di pensare oggetto e lasciare che il motore sottostante guidare la de-normalizzazione, se necessario. Riducendo in tal modo JPA alle caratteristiche caching è probabilmente la decisione sbagliata. con JCache JCache avere un CacheManager che contiene e controlla una collezione di Cache Cache e ogni singolo ha le sue voci.L'API di base può essere pensato map-like con funzionalità aggiuntive (confrontare blog di Greg ). Con JCache essere concepito come un "Cache" usando come un'interfaccia standardizzata contro NoSQL archivi di dati questo non è un buon adattamento al primo sguardo. Ma data la natura dei casi d'uso per Key non strutturati / Dati valore based con enterprise java questo potrebbe essere il giusto tipo di integrazione. E il concetto NoSQL consente anche la "chiave-valore della cache in RAM", categoria che è una misura esatta sia per JCache e DataGrid. con DataGrid Questo JSR propone una API per interagire con in memoria e disco a base di griglie di dati distribuiti. L'API ha lo scopo di consentire agli utenti di eseguire operazioni sulla griglia di dati (PUT, GET, RIMUOVERE) in modo asincrono e non-blocking che restituiscono un java.util.concurrent.Futures piuttosto che i reali valori di ritorno. Il processo qui non è realmente visibili al momento (almeno per me). Quindi non ci sono esempi o concetti per l'integrazione di un NoSQL Key / Value negozio disponibile fino ad oggi. Oltre a questo le stesse riserve come per l'API JCache sono a posto. con EclipseLink NoSQL EclipseLink di sostegno si basa sul EIS precedenti, il supporto offerto dal EclipseLink 1.0. EclipseLink di EIS supportano permesso oggetti persistenti ai database legacy e non relazionali. EclipseLink di EIS e il sostegno NoSQL utilizza la Java Connector Architecture (JCA) per accedere ai dati-source simile a come supporto relazionale EclipseLink usa JDBC.Sostegno NoSQL EclipseLink è estendibile ad altri database NoSQL, attraverso la creazione di una classe EISPlatform EclipseLink e un adattatore JCA. Al momento supporta MongoDB (Document Oriented) e Oracle NoSQL (BigData). E 'interessante vedere, che Oracle non affronta il Key / Value DB prima. Potrebbe essere a causa della possibile confusione con le caratteristiche della cache (ad esempio, la coerenza). colonna in base DB leggere e scrivere è fatto utilizzando le colonne anziché righe. Gli esempi più noti sono Google BigTable e del calibro di HBase e Cassandra che si sono ispirati a BigTable. Il giornale dice che BigTable BigTable è una rada, distribuito, persistente, Map multidimensionale ordinati. GAE ad esempio, funziona solo con BigTable. Si offre una varietà di API: da "native" low-level API "nativa" di alto livello (quelli JDO e JPA ). Con la versione precedente Datanucleus utilizzato da Google sembra che ci siano un sacco di limitazioni in atto che possono essere rimossi ( vedi commenti ), ma sono ancora in atto. documento-oriented DB Il documento-oriented DB sono più, ovviamente, essere affrontate al meglio dalla JSR 170 ( Content Repository for Java) e  JSR 283 (Java Content Repository per la tecnologia API versione 2.0). Con JackRabbit come implementazione di riferimento è un segnale forte per questo :) Il supporto per altri negozi di documenti NoSQL è inesistente come di oggi. Anche Apache CouchDB non fornisce un JSR 170/283 modo conforme di accesso ai documenti. L'unico inconveniente è che sia JSR non sono sexy o sanguinamento bordo. Ma per me questo sarebbe il secchio diritto di mettere il supporto per documenti DB-oriented. Rilegatura a lato della medaglia? L'API repository contenuto non è esattamente un modello naturale per un'applicazione. Esiste un app davvero si vuole affrontare nodi e gli attributi in Java? La nozione di un modello di dominio funziona bene per molte applicazioni e se non vi è alcuna possibilità di usarlo, probabilmente sarebbe meglio andare native e utilizzare il driver MondoDB direttamente. grafo orientato DB Questo tipo di banche dati sono pensati per i dati di cui rapporti sono ben rappresentato con un grafico in stile (elementi interconnessi con un numero indeterminato di rapporti tra loro). Puntando soprattutto a qualsiasi tipo di topologia di rete di recente respinto JSR 357 (Social Media API) sarebbe stato un buon posto per mettere il supporto. Almeno da un uso caso punto di vista. Se quelli grafo-oriented DB sono considerati come un data-store ci sono un paio di opzioni. Se la persistenza Java EE sta indirizzando nella direzione di un più generale livello di astrazione dei dati i successori 338 o sarebbe il posto giusto per mettere sostegno. Se conoscete un po 'su come funziona internamente coerenza e che cosa doveva essere fatto per mettere JPA su di esso si potrebbe anche prendere in considerazione 347 una buona misura per esso. Con tutti gli inconvenienti già citati. Un'alternativa sarebbe quella di avere una separata JSR per esso. Il rappresentante più importante di questa categoria è Neo4J che si ha una facile API disponibili per includere semplicemente tutto ciò che serve direttamente nel progetto. C'è materiale aggiuntivo da considerare se avete bisogno di controllare l'istanza Neo4J tramite il server delle applicazioni. Conclusioni Per riassumere: Abbiamo già un sacco in vigore per la cosiddetta "NoSQL" DB. E le basi per l'integrazione in questo nuovo standard Java EE è promettente. Controllo delle istanze incorporati NoSQL dovrebbe avvenire mediante JSR 322 (Java EE Connector Architecture) con questo essere le uniche consentite le discussioni di spawn posto e aprire file direttamente da un filesystem. Io non sono un grande sostenitore di avere una più generale di astrazione dei dati JSR per la piattaforma paragonabile a quello che primavera sta facendo con i dati di primavera. Per me i concetti delle diverse categorie NoSQL sono troppo diverso da quello di avere un one-size-fits-all approccio. Il punto principale del dolore NoSQL oltre alla mancanza di standard di API è che gli utenti sono costretti a denormalizzare e mantenere la de-normalizzazione a mano. Quello che vorrei vedere sono alcuni piccoli cambiamenti per entrambe i prodotti per essere più pronti Java EE e anche per il modo in cui l'integrazione delle specifiche è fatto. Potrebbe essere una buona idea definire semplicemente i tipi di persistenza diversi e generalmente definire le JSR che potrebbero essere influenzati da questo e noSQLing quelli di conseguenza. Per gli utenti che vogliono favorire un modello di dominio (ad esempio un più alto livello di astrazione rispetto alla prima NoSQL API) , APP potrebbe essere il miglior veicolo per questo al momento. Il feedback da parte sia EclipseLink e Hibernate OGM utenti è necessario per valorizzare ciò che funziona e cosa no. Da un punto di vista politico potrebbe anche avere senso per intraprendere 347.Tanto più che i principali big player sono presenti già qui. La parte veramente difficile è l'esecuzione di query. In caso di query API standard per ogni famiglia? Con Java EE? O sarebbe meglio che essere collocato all'interno dello spazio NoSQL? Mi piacerebbe leggere i vostri commenti su questo! 



Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.