我将记录存储为 json 文档,根据记录类型组织成层次结构。将这些存储在 Redis 中的传统方法是:
customer:walmart = {...}
customer:target = {...}
order:po123 = {...}
person:bob = {...]
person:tom = {...}
但是,Rejson(又名 RedisJSON)让我们可以有效地从路径中查询子文档,因为它将 json 存储为哈希表的实际哈希表。因此,我可以改为将我的记录组织在一个实际的层次结构中,这也有助于在根目录下适应 Redis 中不同的键限制。
["customer"] = {"walmart": {...}, "target": {...}, "amazon": {...}}
["order"] = {"po1": {...}, "po2": {...}, "po3": {...}}
["transaction"] = {"uuid1": {...}, "uuid2": {...}, "uuid3": {...}}
["person"] = {"bob": {...}, "tom": {...}, "dave": {...}}
["widget"] = {"this": {...}, "that": {...}, "other": {...}}
我定期检索一个或多个相同类型的记录。例如,我可能想要检索target
(a customer
) 或两者bob
和tom
( person
s)。我很少从单一类型中检索所有记录。
这两种不同方法之间的性能差异是什么?Rejson 是否使基于 json 路径(上面的“记录”)检索子文档的效率与从根 Redis 存储中检索文档的效率大致相同?
Rejson 似乎没有办法在单个命令/获取中检索bob
及以上。跨多个根 Redis 键获取公共路径。这与我想要的相反,是我在滥用 Redis 的标志。tom
mget
即使使用 Rejson,以这种方式使用的故意数据层次结构是否应该被视为由于性能损失而导致的不良做法?