Database design Redis是这个模型的正确选择吗

Database design Redis是这个模型的正确选择吗,database-design,redis,Database Design,Redis,我有以下模型: | string (unique key) | about 10 other strings, that have all a fixed length and may be empty | 通常情况下,查询使用“唯一键并查看其他字符串”。使用Redis应该没问题 但另一个查询是“显示n列为空的键”。我不确定Redis是否能处理好这个性能 要在redis中解决这个问题,您需要维护一些元数据。一种解决方案是为每个“列”添加一个set-type键,该键将保存该“列”为空的所有元素的

我有以下模型:

| string (unique key) | about 10 other strings, that have all a fixed length and may be empty |
通常情况下,查询使用“唯一键并查看其他字符串”。使用Redis应该没问题


但另一个查询是“显示n列为空的键”。我不确定Redis是否能处理好这个性能

要在redis中解决这个问题,您需要维护一些元数据。一种解决方案是为每个“列”添加一个set-type键,该键将保存该“列”为空的所有元素的唯一键。显然,在应用程序逻辑中,在主哈希中添加和删除值时,需要从这些集合中添加和删除唯一键。这将非常快,因为对于单个项目,
sadd
srem
sismember
的集合操作都是O(1)(即与集合的大小不成比例)。要获取“列”为空的所有键,可以使用
smembers
。至少,这就是我解决类似问题的方法


(我在列的周围加上引号,因为在redis模型中,它们将是散列字段,而不是RDBMS中的列)

谢谢。听起来很完美!你认为Redis是解决这个问题的好选择吗?这取决于你的问题。redis和RDBMS之间的权衡是灵活的存储与灵活的查询。在redis中,很难查询任意字段——你要么需要在应用程序中获取所有内容并进行过滤,要么像我在回答中描述的那样建立索引。另一方面,添加字段非常容易,即使是只存在于某些项目上的字段。这取决于你在哪里需要灵活性。我喜欢使用它,但我确实有大量代码使用各种过滤器和排序维护索引。