gpt4 book ai didi

indexing - 使用键值数据库作为具有持久索引的集合

转载 作者:行者123 更新时间:2023-12-03 23:07:58 27 4
gpt4 key购买 nike

由于下面有点长:这是 tl;dr;版本:是否有用于快速键和值查找的现有键/值最佳实践,例如具有持久索引的基于哈希的集合?

我对键值数据库的世界很感兴趣,但到目前为止还没有弄清楚如何有效地实现以下用例:

假设我们想要序列化一些数据并通过一个持久的、唯一的整数索引在其他地方引用它们。因此例如:Key = unsigned int,Value = MyData。

数据库应该具有快速键查找并确保 MyData 是唯一的。

现在,当我在数据库中插入一个新值时,我可以为它分配一个新的索引键,例如数据库的当前大小或为了防止删除项目后发生冲突,我可以在外部保留一些计数器。

但是我如何确保不会将相同的 MyData 值插入到我的数据库中?到目前为止,在我看来,键值数据库似乎无法有效地实现这一点 - 这是正确的吗? IE。我不想遍历整个数据库只是为了确保 MyData 值不在那里......

那么,实现这一点的最佳做法是什么?

对于背景:我在 KDevelop 上工作,我们将上述内容用于我们的代码分析缓存。我们实际上有上述用例的自定义实现 1 .如果您对内部结构感兴趣,请搜索 Bucket 和 ItemRepository,并查看 2有关 ItemRepository 的示例用法。

但是您可能会同意,这段代码很难理解,因此很难维护。我想将其性能与可能导致更简单代码的替代解决方案进行比较 - 但前提是它不会导致严重的性能损失。考虑到对 OpenLDAP MDB、Kyoto Cabinet 和 LevelDB 等键值存储性能的炒作,这就是我想要开始的地方。

我们在 KDevelop 中拥有的 - 据我所知 - 基本上是一种混合磁盘/内存哈希映射,它会定期保存到磁盘(当然,在崩溃等情况下会导致主要数据损坏。 )。项目根据它们的散列值存储在一个位置,然后当然也允许相对较快的值查找,只要散列函数是快速的。额外的变化是您还可以获得某种持久数据库索引,可用于非常有效地查找项目。

所以 - 长话短说 - 如何使用诸如 LevelDB、Kyoto Cabinet、OpenLDAP MDB 之类的键/值数据库来做到这一点 - 你能说出它的名字吗?

最佳答案

除非我在这里遗漏了一些东西——通常你的哈希算法是一致的,并且会为相同的数据提供相同的 key 。因此,您应该只需要查找 key 以查看它是否已经存在,或者处理数据库返回给您的(可能是重复的 key )错误。

afaik 键/值数据库可以并且将会为您强制执行唯一的值约束,即如果您尝试保存已经存在的值,您将收到错误消息。

关于indexing - 使用键值数据库作为具有持久索引的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com