27

Non ho usato Spring Data prima, ma ho usato Hibernate ORM un certo numero di volte per l'applicazione basata su MySQL. Semplicemente non capisco quale framework scegliere tra i due per un'applicazione basata su MongoDB.Qual è la differenza tra Spring Data MongoDB e Hibernate OGM per MongoDB?

Ho provato a cercare la risposta ma non riesco a trovare la risposta che fa un confronto tra i due in un ambiente di produzione. Qualcuno ha riscontrato problemi nel lavorare con questi due framework con MongoDB?

risposta

39

Disclaimer: io sono il capo del progetto Primavera Dati, quindi mi occuperò principalmente il lato primavera dati di cose qui:

Credo che la distinzione nucleo tra i due progetti IST che la squadra di Hibernate OGM ha scelto centrare i loro sforzi attorno all'APP mentre il team di Spring Data non lo fece esplicitamente. Le ragioni sono le seguenti:

  • JPA è un'API relazionale intrinsecamente. Le prime due frasi dello stato delle specifiche, che è un'API per il mapping relazionale agli oggetti. Questo è anche incarnato nei temi centrali dell'API: parla di tabelle, colonne, join, transazioni. Concetti che non sono necessariamente trasferibili nel mondo NoSQL.
  • Generalmente si sceglie un negozio NoSQL a causa dei suoi tratti speciali (ad esempio query geo-spaziali su MongoDB, essendo in grado di eseguire attraversamenti grafici per Neo4j). Nessuno di questi è (e sarà) disponibile in JPA, quindi sarà necessario fornire estensioni proprietarie comunque. Ancora peggio, JPA presenta concetti che guidano semplicemente gli utenti in direzioni sbagliate se li assumono per lavorare su un negozio NoSQL come sono stati definiti in JPA: come dovrebbe essere implementato un rollback della transazione ragionevolmente su un MongoDB?

Quindi, con dati primavera abbiamo scelto di fornire piuttosto un coerente modello di programmazione per i negozi supportati, ma non cercare di forzare il tutto in un unico API over-astrazione: si ottiene i ben noti implementazioni di modello, si ottiene l'astrazione del repository, che funziona in modo identico per tutti i negozi, ma facciamo leva su funzionalità e concetti specifici del negozio.

+3

Dati primaverili è :) ... Amore con Spring in generale ... Grazie per aver risposto alla mia domanda. – hajime

13

Disclaimer: Sono uno degli sviluppatori di OGM di Hibernate, quindi cercherò di fornire alcune delle ragioni alla base.

Hibernate OGM fornisce supporto Java Persistence (JPA) per soluzioni NoSQL. Riusa il motore di Hibernate ORM ma persiste le entità in un datastore NoSQL invece che in un database relazionale. Mira anche a fornire l'accesso a specifiche funzionalità di datastore quando JPA non ha una buona corrispondenza.

Questo approccio è interessante per diversi motivi:

  • Conosciuto semantica e le API. Gli sviluppatori Java hanno già familiarità con JPA, questo significa che non sarà necessario imparare l'API di livello inferiore. Supporta anche HQL e query di backend native.

  • Scelta del backend in ritardo. Scegliere il giusto datastore NoSQL non è banale. Con Hibernate OGM non dovrai impegnarti in una specifica soluzione NoSQL e sarai in grado di cambiare e testare facilmente backend diversi.

  • Strumenti e librerie esistenti. Gli ORM JPA e Hibernate sono in circolazione da un po 'e sarai in grado di riutilizzare le librerie e gli strumenti che li utilizzano al di sotto.

  • La maggior parte del modello logico JPA si adatta. Un esempio di buona vestibilità è @Embedded, @EmbeddedCollection e @Entity (che può essere un nodo, un documento o una cache in base all'archivio dati scelto). Certo, i nomi delle annotazioni potrebbero essere strani perché dovrai anche occuparti di @Table e @Column.

  • JPA astrae la persistenza a livello di oggetto, lasciando spazio a molti trucchi e ottimizzazioni. Abbiamo pianificato diverse idee, come la persistenza poliglotta: memorizzare i dati in diversi archivi dati e utilizzare quello migliore per uno specifico lavoro di lettura.

Lo svantaggio principale è che alcuni dei concetti di APP non sono facilmente mappati al mondo NoSQL: transazioni per esempio. Sebbene sia possibile accedere ai metodi di demarcazione delle transazioni, non sarà possibile eseguire il rollback sugli archivi dati che non supportano le transazioni in modo nativo (le transazioni, in questo caso, verranno utilizzate per raggruppare le operazioni e cercare di ottimizzare il numero di chiamate a il db).

Inoltre, se il set di dati è per natura non basato sul modello del dominio, Hibernate OGM non fa per voi.

Problemi correlati