使用 ReJson 存储数值树
Using ReJson to store a numerical tree
我想在树中插入固定长度的数值,稍后检查它们是否存在。大多数数值都是相似的,所以将它们放在 SET
中没有意义,因为我会浪费 space.
由于 ReJson PATH
期望 "Java-like" 键名的命名约定,这就是我想出的:
{
"_0": {
"_1": {
"_2": true
}
},
"_2": {
"_3": {
"_4": true
}
}
}
所以,当我需要知道是否设置了“012”时,我需要检查是否 "JSON.GET key ._0._1._2" == true
。
最初,我尝试保存自然树值,例如:
{
"0": {
"1": {
"2": true
}
},
"2": {
"3": {
"4": true
}
}
}
但是我写不出任何能够遍历这棵树的PATH
,无论是点还是括号形式。
有什么建议吗?我应该坚持我的带下划线的价值观和 ._a._b._c
模式还是有更好的方法?
ReJSON 使用类似于 JSONPath 的路径(但不完全是)。具体来说,docs 表示 "Names must begin with a letter, a dollar ($) or an underscore (_) character"。这意味着不支持您的第二棵树。
虽然 ReJSON 可用于存储树状结构,但您的用例似乎不会从中受益。相反,我会研究展平树并将其存储为哈希(甚至是集合),其中每个字段代表一个路径,例如:
HSET tree 0.1.2 1 2.3.4 1
然后你可以使用 HEXISTS
之类的东西来检查 "truthiness"。
我想在树中插入固定长度的数值,稍后检查它们是否存在。大多数数值都是相似的,所以将它们放在 SET
中没有意义,因为我会浪费 space.
由于 ReJson PATH
期望 "Java-like" 键名的命名约定,这就是我想出的:
{
"_0": {
"_1": {
"_2": true
}
},
"_2": {
"_3": {
"_4": true
}
}
}
所以,当我需要知道是否设置了“012”时,我需要检查是否 "JSON.GET key ._0._1._2" == true
。
最初,我尝试保存自然树值,例如:
{
"0": {
"1": {
"2": true
}
},
"2": {
"3": {
"4": true
}
}
}
但是我写不出任何能够遍历这棵树的PATH
,无论是点还是括号形式。
有什么建议吗?我应该坚持我的带下划线的价值观和 ._a._b._c
模式还是有更好的方法?
ReJSON 使用类似于 JSONPath 的路径(但不完全是)。具体来说,docs 表示 "Names must begin with a letter, a dollar ($) or an underscore (_) character"。这意味着不支持您的第二棵树。
虽然 ReJSON 可用于存储树状结构,但您的用例似乎不会从中受益。相反,我会研究展平树并将其存储为哈希(甚至是集合),其中每个字段代表一个路径,例如:
HSET tree 0.1.2 1 2.3.4 1
然后你可以使用 HEXISTS
之类的东西来检查 "truthiness"。