Tentativo di definire un criterio per le chiavi in un archivio di valori-chiave (stiamo usando Redis). Lo spazio delle chiavi dovrebbe essere:Qual è un buon modo per gestire le chiavi in un archivio di valori-chiave?
Shardable (può introdurre più server e diffondere lo spazio delle chiavi tra loro)
namespace (ci dovrebbe essere qualche meccanismo per i tasti "gruppo" insieme logicamente, ad esempio per dominio o concetti associati)
Efficiente (cercare di utilizzare il minimo spazio possibile nel DB per le chiavi, per consentire il maggior numero di dati una possibile)
Come collisione meno possibile (evitando chiavi per due oggetti differenti sono uguali)
due alternative che ho considerato sono queste:
Utilizzare i prefissi per gli spazi dei nomi, separati da un carattere (come
human_resources:person:<some_id>
). L'aspetto positivo di questo è che è abbastanza scalabile e facile da capire. Lo svantaggio sarebbe possibili conflitti a seconda del separatore (cosa succede seid
ha il carattere:
in esso?), Ed eventualmente l'efficienza della dimensione (troppi spazi dei nomi nidificati potrebbero creare tasti molto lunghi).Utilizzare una struttura di dati (come Set ordinato o Hash) per memorizzare gli spazi dei nomi. Lo svantaggio principale di questo sarebbe la perdita di "shardability", dal momento che la struttura per memorizzare gli spazi dei nomi avrebbe bisogno di essere in un unico database.
Domanda: Quale potrebbe essere un buon modo per gestire uno spazio delle chiavi in una configurazione sharded? Dovremmo usare una di queste alternative, o c'è qualche altro schema migliore che non abbiamo considerato?
Grazie mille!
Risposta meravigliosa. Grazie mille per aver dedicato del tempo e affrontato questo problema. Mi scuso per non aver cliccato prima sul pulsante "Bounty", ma questa è la prima volta che lo uso. Grazie! –