Domanda

Ho sperimentato con Redis, e mi piace molto la scalabilità che si porta in tavola. Tuttavia, mi chiedo come gestire le modifiche alle strutture di dati per un sistema che è già in produzione.

Per esempio, lasciatemi dire che sto raccogliendo informazioni su un utente, e io uso l'id_utente come una chiave, e il dumping gli altri dati sull'utente come valori separati da virgola.

user_id: name, email, etc.

Ora, dico dopo circa 100.000 record, mi rendo conto che avevo bisogno di query email - come potrei ora prendere una fotografia istantanea dei dati esistenti e creare un nuovo indice per esso

?
È stato utile?

Soluzione

Dalla mia comprensione di Redis, ciò richiederebbe una cosa che Redis non è progettato per fare. Si dovrà ciclo se tutti i record (tramite i tasti *) e quindi modificare l'ordine dei dati e fare una nuova chiave. Io, personalmente, consiglio di utilizzare un elenco invece di una virgola separati stringa. In un elenco, è possibile riordinare da Redis all'interno. A List Redis ha il seguente aspetto:

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something

Sto costruendo un app in cui ho incontrato lo stesso problema. Ho risolto da avere una lista per tutte le informazioni dell'utente, e quindi avere una chiave con e-mail dell'utente con un valore di id dell'utente. Così la mia base di dati sarebbe qualcosa di simile:

"Colum" => [0] c.mcgaley@gmail.com
            [1] password
            [2] Something
"c.mcgaley@gmail.com" => "Colum"

Così ho potuto interrogare l'ID o il mail e ancora ottenere le informazioni di cui avevo bisogno.

Mi dispiace che non ero in grado di rispondere direttamente alla tua domanda. Spero solo che questo ha aiutato.

Altri suggerimenti

Utilizzando csv non è una grande idea se si vuole supportare le modifiche. È necessario utilizzare un serializzatore che mancano le maniglie / nuovi valori se tutto è in una chiave, oppure è possibile utilizzare un hash Redis, che vi dà sottochiavi denominate. In entrambi i casi è possibile aggiungere / rimuovere i campi con l'unico requisito è che il codice sa cosa fare se si legge un record senza il nuovo valore.

Per consentire di ricerca per e-mail è necessario aggiungere un indice - fondamentalmente un tasto (o lista) per ogni e-mail con l'id utente come valore. Sarà necessario compilare questo indice da ottenere tutte le chiavi di una volta, poi fare in modo che si aggiorna quando le email cambiano.

Si potrebbe iterare su tutte le chiavi e memorizzarli con un diverso id, ma che è probabilmente più problemi di quanto vale la pena.

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