Domanda

Sono nel bel mezzo della costruzione di una nuova applicazione che avrà caratteristiche molto simili a Facebook e anche se ovviamente non ci vorrà sempre avere a che fare con artisti del calibro di 400.000.000 milioni di utenti sarà ancora essere utilizzato da una base di utenti sostanziale e la maggior parte di li richiederanno funzionare molto molto rapidamente.

Ho una vasta esperienza con MySQL, ma un sociali offerte app complessità che MySQL non è adatto anche. So che Facebook, Twitter, ecc si sono spostati verso Cassandra per molti dei loro dati, ma non sono sicuro quanto lontano per andare con esso.

Per esempio vuoi memorizzare le cose come i dati utente - nome utente, password, indirizzi ecc in Cassandra? Ti archiviare le e-mail, commenti, aggiornamenti di stato, ecc a Cassandra? Ho anche letto un sacco che qualcosa di simile Neo4j è molto meglio per rappresentare l'amico rapporti utilizzati da applicazioni sociali in quanto è un database grafico. Sto appena iniziando verso il basso il percorso NoSQL in modo che qualsiasi guida è molto apprezzato.

Qualcuno dovrebbe essere in grado di consigliare su questo? Spero di non sto essendo troppo generico!

È stato utile?

Soluzione

  

Per esempio vuoi memorizzare le cose come i dati utente - nome utente, password, indirizzi ecc in Cassandra?

No, dal momento che non garantisce la coerenza. Cassandra è alla fine coerente . Sicuramente non ci dovrebbe essere concorrenza sui dati di un certo account utente, ma io non vorrei scommettere su di essa. Potrebbe non essere necessario coerenza sulla vostra ricerca full-text, il messaggio casella di posta elettronica, ecc, ma si vuole coerenza in tutto ciò che è connesso con la sicurezza.

  

Inoltre ho letto un sacco che qualcosa di simile Neo4j è molto meglio per rappresentare l'amico rapporti utilizzati da applicazioni sociali in quanto è un database grafico.

Sono un grande fan dello strumento giusto per il lavoro giusto. Non ho usato Neo4j ma ho usato db4o (che è un database ad oggetti) e lo trovo molto utile. Si rende lo sviluppo più facile da usare uno strumento che supporta in modo nativo le vostre esigenze. Dal momento che hai bisogno di grafici e di lavoro con i grafici in SQL è un dolore, vi consiglio di dargli un'occhiata, e valutare se si adatta alle vostre esigenze specifiche.

miscelazione database suona come una buona idea per me fino a quando la scelta è naturale (cioè la relativa banca dati è utile con i posti di lavoro specifici, un database del grafico per i grafici, un tavolo per le tabelle, database ACID per tutto ciò che la sicurezza esigenze delle transazioni , eccetera...).

Altri suggerimenti

vorrei suggerire di fare qualche test con MySQL e con Cassandra. Quando abbiamo dovuto fare una scelta tra PostgreSQL e MongoDB in uno dei miei posti di lavoro, abbiamo rispetto di query tempo su milioni di record in entrambi e scoperto che con circa 10 milioni di record Postgres ci avrebbe fornito con tempi di risposta adeguati.

Sapevamo che non avremmo arrivare a quel numero di record per almeno un paio di anni, e abbiamo avuto esperienza con Postgres (mentre MongoDB non è stato molto maturo al momento), così siamo andati con Postgres.

Il mio punto è che probabilmente si può guardare ai parametri di riferimento di MySQL, fare alcuni test di performance da soli, stimare le dimensioni del set di dati e di come sta andando a crescere, e prendere una decisione informata in quel modo.

Per quanto riguarda la miscelazione database relazionali e non relazionali, è qualcosa che abbiamo preso in considerazione pure, ma ha deciso che sarebbe troppo di una seccatura, come ciò significherebbe il mantenimento di due tipi di software, e la scrittura di un po 'di codice di colla per ottenere i dati da entrambi. Credo che Cassandra sarebbe perfettamente in grado di memorizzare tutti i dati.

Facebook non ha fatto mossa per Cassandra, che lo ha creato. :) A mia conoscenza, NoSQL DBMS non richiedono o anche parlare (grazie al mnemosyn per la correzione, Facebook utilizza Oracle e Cassandra) in esecuzione fianco a fianco con un database relazionale. Questo è uno esempio opposto (memorizzare informazioni dell'utente in un NoSQL DB).

direi che se Cassandra è abbastanza buono per Facebook, è probabile che sia abbastanza buono per il vostro progetto. Potrebbe non male per cercare di astrarre la logica di persistenza in modo da avere la possibilità di passare a qualcos'altro, se si tratta assolutamente di questo.

Disclaimer: non sono (ancora?) Avuto le mani su esperienza con i database NoSQL:. Quello che so viene dalla lettura su di esso

Cassandra offre una bella distribuito soluzione, e probabilmente meglio di Facebook come piattaforma di MySQL (se avrà bisogno di scala). Ma Cassandra non è adatto per i rapporti di dati in cui dovrete una relazione molti-a-molti sfida relazione. Un database grafico legato a Cassandra fornirebbe sia le esigenze volume di massa, più una capacità di query rapporto molto veloce. Stiamo lavorando su qualcosa che combina le due tecnologie, e sempre interessato alle tipi di requisiti vostra piattaforma sarebbe presentare. Se avete domande su come gestire alcune questioni relative dati mi piacerebbe sentire loro, forse possiamo contribuire a capirlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top