Database design 在RocksDB中高效地存储大型列表结构,以便在页面中检索数据

Database design 在RocksDB中高效地存储大型列表结构,以便在页面中检索数据,database-design,in-memory-database,rocksdb,memory-optimized-tables,Database Design,In Memory Database,Rocksdb,Memory Optimized Tables,说明: RocksDB是一个键值存储,因此我们可以简单地序列化对象列表并存储与键对应的值。如果列表中的数据足够小,这就可以了 但是,如果列表很大并且不断增加,那么我们需要对数据进行分页。因此,在这种情况下,存储与单个键对应的整个序列化列表数据不是一个好主意;由于每次在列表中插入新数据时都会出现性能问题,因此在向用户显示列表时,也需要在读取期间读取和更新这个非常大的值,此时将检索整个值,而用户只需要其中的一部分 比如说,我们想在rocksDB中存储用户下的订单。然后我们可以按照以下方式在RockD

说明:

RocksDB是一个键值存储,因此我们可以简单地序列化对象列表并存储与键对应的值。如果列表中的数据足够小,这就可以了

但是,如果列表很大并且不断增加,那么我们需要对数据进行分页。因此,在这种情况下,存储与单个键对应的整个序列化列表数据不是一个好主意;由于每次在列表中插入新数据时都会出现性能问题,因此在向用户显示列表时,也需要在读取期间读取和更新这个非常大的值,此时将检索整个值,而用户只需要其中的一部分

比如说,我们想在rocksDB中存储用户下的订单。然后我们可以按照以下方式在RockDB“u:1:li:o”中存储这个顺序数据:序列化([O1{},O2{},…On{}])。但是如果用户下了数千个订单,我们希望以页面的形式检索订单(一次10或20条记录)。因此,在同一个键中存储数千个订单并从该键中检索整个数据&然后给出所需的10-20条记录将不是一个好主意。此外,向同一密钥添加新的order by user将影响上述性能

所以我正在设计一个模式,以便在RocksDB中高效地存储和检索如此大的列表


如果你能就模式设计提出建议,那将非常有用。

@comeback4你不会给别人的问题添加不相关的标签。这与嵌入式系统无关。@ChrisStratton请检查历史记录我没有添加嵌入式系统。@comeback4事实上,历史记录显示您添加了“embedded”标记,该标记仅包含嵌入式系统,因此在此处不正确。@Pinank您使用的编程语言是什么?@Amirouch Golang