Reddit sta attualmente migrando il suo database da PosgreSQL ad Apache Cassandra. Qualcuno sa quale schema di database usa Reddit in Cassandra?Qual è lo schema del database Cassandra utilizzato in Reddit?
risposta
Inoltre non conosco lo schema esatto di Reddit, ma per ciò che si desidera archiviare, si è nel modo giusto, salvando una gerarchia di commenti in un database basato su documenti invece di un database relazionale. Raccomanderei di conservare un documento per ogni commento di root, quindi aggiungere tutti i bambini (e i figli dei bambini) a quel commento.
In CouchDB e MongoDB è possibile memorizzare direttamente i documenti JSON. In Cassandra salverei il JSON come una stringa. Quindi la struttura di dati sarebbe solo
root-comments
{
root-comment-id
root-comment-json-string
}
e ogni radice-commento-JSON-stringa sarebbe simile a questa:
{
comment : "hello world"
answers :
[
{
comment : "reply to hello world"
answers :
[
{
comment : "thanks for the good reply"
answers : []
},
{
comment : "yes that reply was indeed awesome"
answers : []
}
]
}
]
}
inoltre si potrebbe desiderare di aggiungere un nome utente, ID utente, timestamp, .. .. ecc. alla struttura di ogni commento.
Questa struttura "denormalizzata" renderà le query molto veloci rispetto a una struttura relazionale normalizzata SE si dispone DI MOLTI dati.
In ogni caso dovrai occuparti di tutte le eccezioni, che possono accadere quando si implementa un sistema di questo tipo per una grande scala di utenti, ad es. Cosa succede se qualcuno risponde al commento A con il commento B, ma allo stesso tempo (o successivo) il commento A viene cancellato.
Se si cerca in Internet "cassandra hierarchical data" si trovano altri approcci, ma tutti tornano alla normalizzazione o non sono completi per una gerarchia 'infinita'.
Il problema con l'approccio che descrivi è che ogni volta che viene aggiunto un nuovo commento, devi aggiornare il JSON, cioè analizzarlo, unire il commento e poi scriverlo a Cassandra. Immagina un albero con migliaia di commenti. Quindi questo approccio è più economico per il recupero, ma costoso durante l'aggiornamento. L'approccio relazionale è il contrario, costoso quando si recupera un albero dei commenti ed è economico quando si aggiorna. Penso che l'approccio migliore sia quello ibrido, memorizza i commenti più importanti mentre descrivi e quelli meno importanti in modo relazionale. –
@ Calin-AndreiBurloiu Sì, vero. Sono a conoscenza del fatto che un simile sistema di commenti (come in reddit) ha molte più letture che aggiornamenti. Quindi la mia risposta è esattamente la soluzione corretta. –
E la parsina del risultato può essere facilmente eseguita in JavaScript sul client, poiché è JSON. –
- 1. Qual è lo schema del tratto Laravel?
- 2. Qual è lo schema del database di Facebook per i messaggi come?
- 3. MySQL Workbench - Lo schema è lo stesso del database?
- 4. Qual è lo scopo del registro di commit di Cassandra?
- 5. Come visualizzare lo schema delle tabelle del database in VS
- 6. Qual è lo schema di progettazione "Dispatcher"?
- 7. Qual è la migliore pratica quando lo schema del database cambia nel framework entità?
- 8. Qual è lo schema del database suggerito per le informazioni su ordini/fatture?
- 9. Database FAIL - Lo schema del database non è in sincronia con il file di mapping corrente
- 10. Come creare lo schema del database utilizzando Hibernate
- 11. Progettazione del database di timeseries in Cassandra
- 12. Schema del database EtherPad?
- 13. Schema del database di Wufoo - Come lo progettereste?
- 14. Schema del database Sqlite Android
- 15. heroku non sta aggiornando lo schema del database
- 16. La modifica della posizione del database elimina lo schema proprietario
- 17. Database Pivoting: qual è lo scopo?
- 18. Ottieni lo schema del database con una query?
- 19. Come includere lo schema del database MySQL su GitHub?
- 20. Come creare lo script sql dello schema del database postgres?
- 21. Aggiorna lo schema del database senza perdere dati?
- 22. Qual è lo scopo del metodo Thread.SpinWait?
- 23. Semplifica Database ER Schema/Schema
- 24. Qual è lo scopo di MarkDownSharp quando utilizzato con PageDown?
- 25. Schema del database HR-XML
- 26. Mangusta: schema del database suggerito
- 27. Qual è lo scopo del trasformatore IdentityT?
- 28. Esiste uno strumento opensource per convertire lo schema xml nello schema del database per linux?
- 29. Qual è il $$ (doppio simbolo del dollaro) utilizzato in angolare?
- 30. Qual è il @ utilizzato in JavaScript?
Non ce l'ho, e non sono sicuro che qualcuno al di fuori di Reddit lo faccia, ma dovrebbe davvero importare? Mi aspetto che alcune persone qui su SO possano aiutare a determinare lo schema che è giusto per * la tua * applicazione. –
Reddit ha pubblicato il codice che alimenta il sito su GitHub: https://github.com/reddit/reddit. Potrei cercare nel codice e determinare lo schema da lì. Ma ho pensato che è più facile chiedere qui. –
Ho dato un'occhiata al codice e vedo qualcosa come due dozzine di famiglie di colonne diverse che vengono create e utilizzate in modi diversi. C'è un'area in particolare di cui ti stai chiedendo, o stai cercando qualcosa come l'output di 'show schema' da cassandra-cli? –