【发布时间】:2013-10-17 06:15:11
【问题描述】:
尝试为键值存储中的键定义一些策略(我们使用的是 Redis)。键空间应该是:
Shardable(可以引入更多的服务器并分散它们之间的密钥空间)
命名空间(应该有某种机制将键按逻辑“分组”在一起,例如按域或相关概念)
高效(尽量在数据库中为键使用尽可能少的空间,以允许尽可能多的数据)
尽可能避免碰撞(避免两个不同对象的键相等)
我考虑过的两种选择是:
为命名空间使用前缀,由一些字符分隔(如
human_resources:person:<some_id>)。这样做的好处是它具有相当的可扩展性和易于理解。不利的一面是可能存在冲突,具体取决于分隔符(如果id中包含字符:怎么办?),以及可能的大小效率(嵌套命名空间过多可能会创建很长的键)。使用一些数据结构(如有序集或散列)来存储命名空间。这样做的主要缺点是失去“可分片性”,因为存储命名空间的结构需要位于单个数据库中。
问题:在分片设置中管理键空间的好方法是什么?我们应该使用这些替代方案中的一个,还是我们没有考虑过其他更好的模式?
非常感谢!
【问题讨论】:
标签: database namespaces redis key key-value-store