Gestione di migliaia di inserti / aggiornamenti di cassandra

2

Ho un'app mobile con server back-end in esecuzione in nodejs con cassandra come database. L'app è come un social network in cui è possibile condividere foto e seguire altre persone. Alcune operazioni come l'aggiornamento del nome utente, il nodojs esegue selezionare la query per trovare tutte le immagini condivise dall'utente e aggiorna il nome utente lì e alcune altre tabelle, ovunque sia presente il nome utente e infine restituisce.

A volte finisce per aggiornare 5-10k record e richiede circa 15-20 secondi. Ho provato a eseguire quegli aggiornamenti su tabelle diverse in modo parallelo utilizzando la libreria asincrona, non ho potuto ottenere miglioramenti significativi. Come gestire questo scenario in cui l'app client non dovrebbe dover attendere così a lungo? Inoltre, come gestisce Facebook questo tipo di scenario?

    
posta turbo 22.02.2015 - 05:50
fonte

1 risposta

2

Se devi SELEZIONARE prima di AGGIORNARE lo stai facendo male. Cassandra è più veloce nella scrittura di quanto non lo sia nella lettura. Non avrai mai 100k di scrittura / s se devi leggere prima di scrivere.

Suggerisco di utilizzare id per l'utente. In tal caso non è necessario aggiornare tutte le altre tabelle quando il nome utente cambia.

Infine, se non vuoi fare nulla di quanto sopra, puoi provare a ottimizzare con:

  1. Uso di BATCH es per gli aggiornamenti. Ciò eliminerebbe l'overhead.
  2. Assicurati di non utilizzare LWT . Leggi lì perché.
  3. Potresti anche ridurre la coerenza a one , ma suppongo che tu non voglia farlo perché significa perdere consistenza. I dati che hai letto prima della scrittura non sarebbero la rappresentazione "più recente".

Dovrai chiedere a Facebook come lo fanno. Per ora non usano più Cassandra.

    
risposta data 28.10.2015 - 23:04
fonte

Leggi altre domande sui tag