2011-09-26 21 views
5

Sto usando PHP per sviluppare applicazioni web. Ho usato MySQL come mio RDMS. Per molte cose un RDMS funziona e molti problemi possono essere risolti dalla normalizzazione, tra le altre cose. Ma alcune situazioni semplicemente non funzionano bene con un RDMS, quindi sono state ideate altre soluzioni come NoSQL.Devo usare NoSQL invece di MySQL?

Ciò che non mi è chiaro sono le situazioni in cui NoSQL dovrebbe essere più adatto. In che modo differiscono alcune delle diverse opzioni di NoSQL, quali situazioni potrebbero essere migliori di altre e quali sono compatibili con PHP 5.3 o versioni successive (API wise)?

Quindi sto cercando un elenco di software server NoSQL che posso utilizzare (come MySQL come RDMS) e perché utilizzerei uno sull'altro (qualsiasi ibrido?). Anche esempi specifici di problemi che vengono risolti usando NoSQL invece di un RDMS.

Infine, voglio sapere se un server NoSQL avrebbe funzionato meglio in questa situazione:

una tabella di dati in cui ogni riga può avere diverse colonne/campi. Una riga potrebbe avere 5 colonne, un'altra potrebbe avere 5 colonne completamente diverse e un'altra potrebbe avere 10. Ma tra tutte queste righe, c'è un singolo ID numerico auto-incrementato primario. Milioni di "righe".

(Giusto con quanto sopra suppongo che NoSQL sia perfetto in quanto è una raccolta di oggetti, non di righe in una tabella. Non sono sicuro della chiave primaria A.I).

In un RDMS è possibile creare le colonne più utilizzate, quindi utilizzare serialize/unserialize di PHP per archiviare altre colonne. Ma questo è molto inefficiente e complica le cose quando è necessario eseguire report sulle colonne esistenti in questo " array serializzato ", ad esempio una SOMMA su tutte le righe di una colonna chiamata" birthday_pledge "(con ogni riga in cui viene utilizzata).

Nella mia situazione ogni "colonna", diversa dalla chiave primaria, è personalizzata e definita dall'utente. Ma ho bisogno di essere in grado di eseguire report (somme, filtri, ricerche) su queste "colonne". Quindi se NoSQL non è la soluzione, l'unica cosa che posso pensare di fare è creare tabelle personalizzate per l'utente (che però può essere complicato).

Vorrei anche sottolineare che la scalabilità (server di database multipli, ridondanza e failover) è molto importante.

+0

Cerca qui: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis – zerkms

+0

Suggerirei che un modello di dati relazionali per i dati che descrivesti probabilmente coinvolgere più tabelle che corrispondono ai dati di diversi tipi di ID. In un senso molto generale (che non consiglierei di usare direttamente), potresti avere una tabella 'integer_values',' text_values', ecc. Che sono associati agli oggetti con la loro chiave primaria. –

+0

Attualmente utilizziamo una tabella generalizzata che è 'id',' text', ma la tabella ha milioni di righe ed è impossibile effettuare report. Sto pensando di fare in modo che l'app crei tabelle personalizzate, a meno che NoSQL rappresenti una soluzione migliore per RDMS per la nostra situazione. – Luke

risposta

1

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

questo articolo confrontare la maggior parte populars NoSQL sistema di database e theire pro/contro.

Spero che possa essere d'aiuto.

PS: Nella mia idea quello che stai cercando è couchdb o mongodb ma posso sbagliarmi.

+1

Sarebbe bello se includessero più nella lista. Ho anche trovato questo [guida visiva] (http://blog.nahurst.com/visual-guide-to-nosql-systems) che aiuta molto. Anche questo [sito] (http: // nosql-database.org /) ha una lista completa di database NoSQL. – Luke