gpt4 book ai didi

c++ - RocksDB 是存储同质对象的好选择吗?

转载 作者:行者123 更新时间:2023-11-30 03:19:08 24 4
gpt4 key购买 nike

我正在寻找 C++ 中的嵌入式数据存储引擎。 RocksDB 是一个键值存储。

我的数据非常同质。我有一定数量的类型(大约 20 个),并且存储了这些类型的许多实例(大约 100 万个)。

我认为数据的同质性​​使得 RocksDB 成为一个糟糕的选择。如果我单独序列化每个对象,我肯定会复制架构元数据吗?这肯定会导致性能不佳吗?

所以我的问题是:RocksDB 是存储同类对象的好选择吗?如果是,如何避免复制模式元数据对性能的影响?

最佳答案

与 sqlite 等不同,RocksDB 中没有模式元数据,因为没有模式:它将二进制键映射到二进制值。 RocksDB 没有内置序列化。如果您要存储对象,则必须自己序列化它们并使用键、键前缀或列族(〜数据库表灯)等来区分类型。

通常您会使用 RocksDB 来构建某种自定义数据库。有人在其之上构建了一个 protobuf 对象的缓存(ProfaneDB)。我经常会说它太低级了,但是如果您不需要结构化数据和查询,它会工作得很好,速度非常快,并且通常使用起来很愉快(他们的代码是可读的,有时是最好的文档,因为您将处理数据库内部结构)。

我之前在一个小型玩具应用程序中使用过 varint key-prefix,它只需要一个字节开销,最多 127 种类型,但列族可能更适合产品应用程序。它们还具有恒定的开销,并且可以单独调整、添加、删除和管理。我不会为了几个字节而放弃从它们那里获得的附加功能。如果您使用 RocksDB,这也大致代表了您处理问题的级别。

关于c++ - RocksDB 是存储同质对象的好选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002486/

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