Sto creando un sistema in cui sono presenti chiavi e valori di configurazione. Quindi per esempio:
config.key = 10
È un esempio di una chiave di configurazione e un valore. Queste chiavi possono avere anche delle sostituzioni basate su "dimensioni". Ad esempio, se volessimo applicare config.key
alle applicazioni con la dimensione foo
, la chiave sostituita sarebbe essenzialmente:
config.key.foo = 20
In futuro potremmo avere più dimensioni in ordine arbitrario, quindi questa potrebbe essere una possibilità in futuro:
config.key.foo.bar = 30
Un esempio più concreto sarebbe se avessimo una chiave / commutatore chiamata display.pintrest.feed
che ha un valore boolean
. Quindi il valore predefinito sarebbe false
, ma potresti avere delle sostituzioni in questo modo:
display.pintrest.feed = false
display.pintrest.feed.femaleUser = true
Qui femaleUser
è una dimensione (quindi vogliamo impostare il valore di questa configurazione su true
solo per utenti di sesso femminile).
Questo è essenzialmente ciò che sto cercando di fare. La mia domanda riguarda la persistenza. Quale sarebbe il modo migliore per mantenere questo tipo di dati? Si tratta di dati che verranno interrogati con una certa frequenza ma scritti meno spesso. La soluzione ingenua sarebbe usare MySQL o PostgreSQL e creare una tabella come questa:
+----------------------------------+-------+
| Key | Value |
+----------------------------------+-------+
| config.key | 10 |
| config.key.foo | 20 |
| display.pintrest.feed | true |
| display.pintrest.feed.femaleUser | false |
+----------------------------------+-------+
Ma perdiamo la sicurezza del tipo di Value
e abbiamo anche un singolo punto di errore. Abbiamo anche molta ridondanza (la parte di base della chiave di configurazione viene ripetuta ogni volta). Quindi mi sono chiesto se fosse possibile rappresentarlo come un grafico in modo da poterlo scrivere su un database grafico. Stavo pensando di modellarlo in questo modo:
Questo è vitale o eccessivo?
Non mi dispiace usare un semplice archivio di valori-chiave, ma dovrebbe essere tollerante agli errori e dovrebbe essere in grado di essere raggruppato. Inoltre ci preoccupiamo solo della coerenza finale (ad esempio, non importa che ci sia bisogno di tempo per propagare le modifiche a tutti i nodi).
Quindi la mia domanda è che tipo di data store dovrebbe supportare questo tipo di dati? È sufficiente un semplice archivio di valori-chiave o devo andare per un database grafico? Il mio fondamento logico per quest'ultimo è semplicemente quello di mitigare la ridondanza dalle chiavi, ma non so se questo è un strong fondamento logico.