我正在创建一个有配置键和值的系统。例如:
config.key = 10
是配置键和值的示例。这些键也可以基于“尺寸”进行覆盖。例如,如果我们想将config.key
应用于维度为foo
的应用程序,则被覆盖的密钥基本上是:
config.key.foo = 20
将来我们可能会有任意顺序的多个维度,因此将来可能会出现这种情况:
config.key.foo.bar = 30
更具体的例子是,如果我们有一个名为display.pintrest.feed
的键/切换,其值为boolean
。因此默认值为false
,但您可以进行覆盖:
display.pintrest.feed = false
display.pintrest.feed.femaleUser = true
此处femaleUser
是一个维度(因此我们希望仅为女性用户将此配置的值设置为true
。)
这基本上就是我想要做的。我的问题是坚持不懈。保留这类数据的最佳方法是什么?这些数据会经常被查询,但写的次数会减少。天真的解决方案是使用MySQL或PostgreSQL并创建一个这样的表:
+----------------------------------+-------+
| Key | Value |
+----------------------------------+-------+
| config.key | 10 |
| config.key.foo | 20 |
| display.pintrest.feed | true |
| display.pintrest.feed.femaleUser | false |
+----------------------------------+-------+
但是我们失去了Value
的类型安全性,并且还有一个单点故障。我们也有很多冗余(每次重复配置键的基本部分)。所以我想知道可能将它表示为图形,以便我可以将其写入图形数据库。我正在考虑对它进行建模:
这是可行还是过度杀伤?
我不介意使用简单的键值存储,但它应该是容错的并且应该能够被群集化。此外,我们只关心最终的一致性(即,不要介意花时间将更改传播到所有节点)。
所以我的问题是我是否应该使用简单的键值存储来保存这些数据,还是应该使用图形数据库?我对后者的理由仅仅是减轻密钥的冗余,但我不知道这是否有充分的理由。