Per un po 'di background - questa domanda riguarda un progetto eseguito su una singola piccola istanza EC2 e sta per migrare a una media. I componenti principali sono Django, MySQL e un gran numero di strumenti di analisi personalizzati scritti in python e java, che fanno il pesante sollevamento . Lo stesso computer sta eseguendo anche Apache.Passaggio da MySQL a Cassandra - Pro/Contro?
Il modello di dati è simile al seguente - una grande quantità di dati in tempo reale è disponibile in streaming da vari sensori collegati in rete, e, idealmente, mi piacerebbe stabilire un approccio a lungo sondaggio, piuttosto che il sondaggio in corso ogni approccio 15 minuti (una limitazione delle statistiche di calcolo e scrittura nel database stesso). Una volta che i dati arrivano, memorizzo la versione grezza in MySQL, lascio perdere gli strumenti di analisi su questi dati e memorizzo le statistiche in altre tabelle. Tutto questo è reso utilizzando Django.
caratteristiche relazionali avrei bisogno -
- Ordina per [SliceRange nella API di Cassandra sembra satisy questo]
- Gruppo per
- rapporti ManyToMany tra più tabelle [Cassandra SuperColumns sembrano fare bene per uno a molti]
- La sfinge su questo mi dà un bel motore di testo completo, quindi è anche una necessità. [On Cassandra, il progetto Lucandra sembra soddisfare questa esigenza]
Il mio problema principale è che i dati si legge sono estremamente lento (e le scritture non sono così caldo o). Non voglio buttare un sacco di soldi e hardware in questo momento, e preferirei qualcosa che possa scalare facilmente con il tempo. Scalare verticalmente MySQL non è banale in questo senso (o economico).
Quindi, in sostanza, dopo aver letto molto su NoSQL e sperimentato con le cose come MongoDB, Cassandra e Voldemort, le mie domande sono,
In un'istanza EC2 media, dovrei ottenere alcun beneficio in legge/scrive passando a qualcosa come Cassandra? This article (pdf) sembra decisamente suggerirlo. Attualmente, direi che alcune centinaia di scritture al minuto sarebbero la norma. Per le letture, poiché i dati cambiano ogni 5 minuti circa, l'invalidazione della cache deve avvenire abbastanza rapidamente. A un certo punto, dovrebbe essere in grado di gestire anche un numero elevato di utenti simultanei. La performance dell'app viene attualmente uccisa su MySQL facendo alcuni join su tabelle di grandi dimensioni, anche se vengono creati degli indici - qualcosa per l'ordine di 32k righe richiede più di un minuto per il rendering. (Potrebbe trattarsi anche di un artefatto di I/O virtualizzati EC2). La dimensione delle tabelle è di circa 4-5 milioni di righe e ci sono circa 5 di queste tabelle.
Tutti parlano dell'utilizzo di Cassandra su più nodi, dato il teorema CAP e la consistenza finale. Ma, per un progetto che sta appena iniziando a crescere, ha senso distribuire un server cassandra a un nodo? Ci sono dei avvertimenti? Ad esempio, può sostituire MySQL come backend per Django? [È raccomandato?]
Se faccio shift, sto indovinando che dovrò riscrivere parti dell'app per fare molto più "administrivia" dato che dovrei fare più ricerche per recuperare le righe .
sarebbe alcun senso utilizzare solo MySQL come un negozio di valore chiave piuttosto che un motore relazionale, e andare con quella? In questo modo potrei utilizzare un gran numero di API stabili disponibili, oltre a un motore stabile (e diventare relazionale se necessario). (Post di Brett Taylor da Friendfeed su questo - http://bret.appspot.com/entry/how-friendfeed-uses-mysql)
eventuali approfondimenti da parte di persone che hanno fatto un cambiamento sarebbe molto apprezzato!
Grazie.
Sono curioso di sapere se hai finito per passare a Cassandra. Sono già sulla strada del passaggio da php e asp.net a django ma non sono sicuro se sia prematuro passare da mssql e mysql a Cassandra in questo momento. Ho anche centinaia di record al secondo in arrivo. – avatar
@itgorilla - Io uso cassandra per un compito molto specifico in cui ora funziona bene. Ho capito che usarlo per i database "in movimento" non era probabilmente una buona idea, e i miei risultati confermano che (sono d'accordo con la risposta di codemonkey qui sotto). Quindi se vuoi davvero scrivere velocemente, cercare e denormalizzare i dati e vuoi ridimensionarli, Cassandra è un'opzione piuttosto buona. (Il numero più alto sarebbe dire, qualche milione scrive al minuto!) – viksit
Dai un'occhiata a questo progetto di Django Cassandra se sei interessato: https://github.com/vaterlaus/django_cassandra_backend – Alex