我正在研究一种设计,其中数据的二级索引将使用键中的所有信息构建,而在值方面不需要任何信息。这可能会导致问题吗?
我不是问技术上是否可以有空白值。是否存在任何结构后果,例如:添加排序键可能会导致某些树结构不平衡? (我并不是说 leveldb 使用树,只是想打个比方;-))
即:说“主记录”看起来像(空值作为分隔符)
- key = uniqueTableID\0 uniqueRowID
- 值 = 一些字段的集合
典型单值字段的二级索引如下所示:
- key = uniqueFieldID\0 keyValue\0 uniqueRowID
允许通过部分键 [uniqueFieldID\0 keyValue] 进行迭代,并且如果主记录被删除或键值发生更改,还可以轻松找到这些键并删除它们,从主记录的 uniqueRowID 进行返回。因此,可能有多个以相同 uniqueRowID 结尾的键值,但对于以 uniqueFieldID 开头并以 uniqueRowID 结尾的特定组合来说,只能有一个键
唯一的事情是我不需要将值放入该对的值一侧。
我对这个概念设计非常满意,只是检查一下是否有人能发现其中的漏洞。例如,它是否会扭曲 leveldb 内部结构并导致性能问题。
我预计在一个特定的应用程序中会有数以万计的此类 key 。
作为我们可能想要存储的值的示例,文本字段的辅助单词索引可能如下所示:
- key = uniqueFieldID\0 keyValue\0 GUID
- 值 = 单词出现次数的计数,或者如果扫描大 blob 的成本较高,则可能是偏移量列表
最佳答案
LevelDB中的键和值是不透明数组,快速查看constructor of a Slice的文档显示如何创建空切片:
// Create an empty slice.
Slice() : data_(""), size_(0)
这对于没有任何值数据的情况非常有用。
关于leveldb - 如果值为空并且只有一个键,leveldb 是否存在结构问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762509/