- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找 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/
我是一名优秀的程序员,十分优秀!