为顺序数据选择正确的类似 DBM 的 C++ 库

Posted

技术标签:

【中文标题】为顺序数据选择正确的类似 DBM 的 C++ 库【英文标题】:Choosing the right DBM-like C++ library for sequential data 【发布时间】:2021-03-10 00:11:48 【问题描述】:

我正在尝试为新开发的应用程序选择数据库。有很多选择,很容易选择错误的。首先,要求不使用数据库服务器。所需的数据库应该是静态或动态 C++ 库。需要存储的数据是一个记录数组。它们会有所不同,但对于给定的数据集是固定的(因此它们可以存储在表中)。每行中的信息可以从几百字节到几兆字节。目前可能有数百万行,并且预计还会增长。

行的索引可以用作键。无需维护单独的键列。

数据按顺序插入。仅通过按顺序迭代所有数据或其中的某些段来执行读取访问(可能需要像每 5 次这样的步骤进行迭代)。

    出于多种原因,我不认为关系数据库是好方法。 一种。它们大多是基于服务器的。我知道 SQLite,但据我所知,它将数据存储在一个文件中,我认为这可能会导致与最大文件大小相关的问题。 湾。我们不需要 SQL 提供的强大功能,而是希望在存储数据类型方面具有更大的灵活性。 有一些 Key/Value 非 SQL dbms,例如 BerkeleyDB、RocksDB 或类似 luxio 的更轻量级的替代品。他们提供的功能足以完成任务。这可能是正确的选择,但是我不知道它们在我们有连续整数键的情况下优化得如何。关联键访问(我们不需要)可能会产生一些性能开销。 我知道有一些我不熟悉的称为“宽列”的非 SQL 数据库。然而,这个名字听起来很适合我们的任务。我能找到的所有数据库都是基于 claud 的服务器。如果您知道此类数据库的类 dbm 库,请告知。 我在数据库方面没有经验,所以如果我在上述 3 个花蕊中的任何一个有错误,请纠正我。

【问题讨论】:

【参考方案1】:

如果您的行数据可以增长到兆字节,而您只是在谈论数百万条记录,也许只是想办法将其放置在文件系统中?如果您需要一个更像数据库的索引,请使用 SQLite 作为键,并让数据记录指向文件系统上的某个位置。与尝试在一个巨大的数据库中完成所有这些事情相比,这种事情实施起来要快得多。

【讨论】:

以上是关于为顺序数据选择正确的类似 DBM 的 C++ 库的主要内容,如果未能解决你的问题,请参考以下文章

TestCafe:在多个测试中使用相同的选择器会返回旧的、不正确的数据

从数据库中选择数据并在分组后获得正确的顺序

谷歌电子表格:脚本从 html 导入的数据中选择正确的值,并且从不以正确的顺序

java程序题目解析

请问ACM的正确入门方式是啥?

无线部署模式