2010-11-12 18 views
5

Questa non è una domanda di tipo NoSQL contro SQL. Sono interessato a tipi di scenari in cui è possibile utilizzare una combinazione di database RDBMS e NoSQL e l'utilizzo della combinazione è adatto. In generale, comprendo che "dipende" dalla situazione e dal compito in corso, ma penso che debbano esserci alcune situazioni generali/comuni in cui questa combinazione è molto utile.Quali tipi di situazioni sono adatte per utilizzare sia un database relazionale che NoSQL?

Ognuno dei suddetti tipi di soluzioni ha punti di forza e punti deboli: quello che sto cercando sono situazioni/scenari in cui i punti di forza di entrambi possono essere pienamente sfruttati e utilizzati.

Nella mia mente, uno potrebbe essere l'e-commerce. Pagamenti, transazioni ecc. Su un RDBMS (pensare ACID) e informazioni sui prodotti e cataloghi in un database NoSQL. Ma è adatto?

Problemi di taglio trasversale di un'applicazione es. La registrazione è probabilmente adatta per una soluzione di tipo NoSQL come un altro esempio.

In alternativa, perché non dovresti utilizzare entrambi questi tipi di tecnologie in combinazione?

Modifica: solo per reiterare, capisco che sia SQL che NoSQL hanno i loro vantaggi e svantaggi intrinseci e che determinati tipi di situazioni sono più adatti a uno solo dei suddetti archivi di dati.

Iknow i giganti come Facebook, Google ecc probabilmente utilizzano una combinazione di questi, ma in quasi tutti i maggior parte dei casi non penso più così i membri potranno mai lavorare su tali soluzioni enormi. Più roba tipica di tutti i giorni.

RavenDB è una soluzione NoSQL che supporta le transazioni ACID

+0

Non sono sicuro che il tag soggettivo debba essere aggiunto qui. Si prega di avvisare. – Ahmad

+0

Potrebbe aiutare questa domanda, se limito l'aspetto 'NoSQL' solo al tipo orientato al documento, ad esempio MongoDB, CouchDB, RavenDB? – Ahmad

risposta

0

Non è davvero una questione di programmazione, ma qui è quello che penso.

Se si considera il teorema PAC http://en.wikipedia.org/wiki/CAP_theorem, si potrebbe supporre che Relationnal database concentrarsi sulla coerenza e di disponibilità, mentre NoSQL concentrarsi sulla disponibilità e la partizione tolleranza (con EVENTUALE COERENZA).

Se si desidera che la query SQL sia realmente coerente, è consigliabile utilizzare un RDBMS. Se non si tratta di un pre-requisito, è possibile utilizzare un database NoSQL.

Ecco perché la maggior parte delle volte, la migliore risposta è utilizzare entrambi, approfittando di entrambi.

+0

@sebastian - re l'ultimo punto - esattamente ciò di cui tratta la domanda: esempi di situazioni in cui vengono utilizzati i vantaggi di entrambe le soluzioni. – Ahmad

0

Un buon esempio potrebbe essere qualsiasi archivio dati distribuito che viene aggiornato su più nodi contemporaneamente e che deve supportare query ad hoc potenzialmente complesse. I nodi sarebbero "alla fine coerenti", il che significa che qualsiasi nodo particolare potrebbe avere lacune nella sua immagine dei dati in qualsiasi momento.

Questo si adatta bene a un RDBMS perché gli spazi possono essere gestiti in modo molto semplice dai collegamenti "esterni" tra le relazioni. Il modello relazionale dovrebbe essere più adatto a questo, ad esempio, a un modello basato sul grafico, perché il modello grafico si basa su percorsi di navigazione tra diversi elementi di dati. Se manca un elemento, il grafico viene suddiviso in due grafici e quindi qualsiasi query basata su percorso potrebbe essere invalidata.Questo problema non esiste nel modello relazionale perché i database relazionali sono non di navigazione: non esistono "collegamenti" strutturali tra gli elementi di dati, quindi la "forma" delle query sui dati non deve essere modificata solo perché mancano i dati.

+0

Nota che ho adottato un approccio leggermente diverso rispetto alle altre risposte qui. Stavo tentando di fornire un esempio adatto a una soluzione di database * relazionale * NOSQL, cioè un database che sia sia relazionale che NOSQL. Dal mio punto di vista, NOSQL e relazionale non si escludono a vicenda, anche se alcune persone sembrano presumere che lo siano. – sqlvogel

+0

Penso che il punto NoSQL e quello che cerca di forzare (anche se può essere fatto) un modello relazionale in una soluzione NoSQL, sconfigge lo scopo di NoSQL? – Ahmad

+0

@Ahmad: non in alcun modo riesce a sconfiggere lo scopo. NoSQL non è un modello di dati diverso e NoSQL non significa "non relazionale".NoSQL significa solo una soluzione di database che supporta la massiccia scalabilità, coerenza finale e tutto ciò che implica. Il modello relazionale è ideale per questo, meglio di altri modelli di dati NoSQL. http://relevantknowledge.wordpress.com/2010/10/04/why-nosql-does-not-mean-non-relational/ – sqlvogel

1

Una risposta ovvia potrebbe essere la segnalazione di un punto in cui uno è più appropriato dell'altro in una semplice applicazione.

Ad esempio, è possibile utilizzare un databae di documento come RavenDB o Couch per il proprio lavoro OLTP, poiché consente di salvare le entità e di interrogare tali entità in proiezioni appiattite su tutti i documenti (viste a query singola). (RavenDB più di CouchDB, ma non è né qui né lì ;-))

Si potrebbe anche usarlo per la segnalazione semplice, utilizzando Map/Reduce per darvi alcune statistiche per la visualizzazione su determinate pagine (prodotti popolari, tag cloud, ecc).

Tuttavia, molti sistemi di reporting sono creati per interrogare gli archivi relazionali, quindi è possibile che si desideri replicare i dati in un database di report.

Ad esempio, in RavenDB, è possibile prendere qualsiasi indice e replicare automaticamente i dati in tale indice in un archivio relazionale.

Ha senso perché avere i dati in un formato relazionale significa che è possibile eseguire complesse query su più documenti e integrarsi con i prodotti di reporting esistenti, senza intralciare il lavoro OLTP standard o la progettazione del database dei documenti.

Questa è solo una delle tante risposte, perché ci sono altri esempi in cui un particolare tipo di archivio dati è più adatto a uno scopo specifico, alla fine della giornata non c'è modo di allontanarsi da quello. (A meno che non crediate ai ragazzi VoltDB)

+0

Mi piace il fatto che tu abbia una mentalità "invertita" quando rispondi a questa domanda. NoSQL come primario e usa SQL per i report hardcore. Le statistiche semplici sono qualcosa che penso che la maggior parte delle persone desidera visualizzare sui propri siti, quindi si utilizza un datastore SQL e si utilizza una soluzione NoSQL per le statistiche semplici. – Ahmad

+0

Se si può essere disturbati a replicare i dati, certo - che funzionerà - ma se si sta lavorando su un progetto da zero non c'è un vero motivo per usare un database SQL come negozio primario =) –

1

A meno che non stiate operando su una scala in cui i database relazionali semplicemente non funzioneranno, il grande vantaggio di NoSQL è la facilità di sviluppo - cose come non richiedere un ORM o script di aggiornamento del database. Non appena inizi a utilizzare SQL per una parte del sistema, è necessario uno sforzo minimo per utilizzarlo per altre parti.

In quasi tutti i progetti ci saranno componenti più adatti a un particolare tipo di archivio dati. La domanda importante è se la differenza sia sufficiente a giustificare il sovraccarico dell'utilizzo di più archivi di dati. Generalmente ciò significa una combinazione di scale, rapporti ad hoc e strutture dati che non si adattano bene ad un database relazionale.

+0

solo per chiarire, voi stanno rispondendo alla parte "alternativa" della domanda. Se possibile, un esempio potrebbe davvero aiutare a solidificare la tua risposta. – Ahmad

+1

Sì, questa è la risposta alternativa - presupponendo un sistema su piccola scala costruito per eseguire una singola attività non posso pensare a casi in cui più negozi varrebbero la pena. La segnalazione è una possibilità, anche se tende a presentarsi di più in contesti in cui NoSQL non è comunque un'opzione. Per qualcosa come il tuo esempio di ecommerce, le transazioni non sono così importanti come potresti pensare - le transazioni assicurano che l'ordine e l'ordine siano aggiornati insieme, ma con NoSQL possono far parte dello stesso oggetto e aggiornarsi comunque. –

1

NOSQL potrebbe essere utilizzato per replicare i dati da un datastore SQL. In questo scenario voglio creare documenti da record SQLITE mobili e fare affidamento su couch o mongo per replicarli su un nosql sul server. Il server SQL può quindi elaborare i documenti in arrivo.

Problemi correlati