问题描述
我正在尝试为新开发的应用程序选择数据库。有很多选择,很容易选择错误的。首先,有一个要求是不使用数据库服务器。所需的数据库应该是静态或动态 C++ 库。需要存储的数据是一组记录。它们各不相同,但对于给定的数据集是固定的(因此它们可以存储在表中)。每行中的信息可能从几百字节到几兆字节不等。并且目前的行数可能达到数百万,并且预计还会增长。
行的索引可以用作键。无需维护单独的键列。
数据按顺序插入。读取访问将仅通过按顺序迭代所有数据或其中的某些段来执行(可能需要以每 5 次之类的步骤进行迭代)。
- 出于多种原因,我认为关系数据库不是好脚。 一种。它们大多基于服务器。我了解 sqlite,但据我所知,它将数据存储在一个文件中,我认为这可能会导致与最大文件大小相关的问题。 湾我们不需要 sql 提供的强大功能,而是希望在存储数据类型方面具有更大的灵活性。
- 有像 BerkeleyDB、RocksDB 这样的 Key/Value 非 sql dbms,或者像 luxio 这样的轻量级替代品。他们提供的功能足以完成任务。这可能是正确的选择,但是我不知道它们在我们有连续整数键的情况下优化得如何。关联密钥访问(我们不需要)可能会带来一些性能开销。
- 我知道有些类型的非 sql 数据库称为“宽列”,但我并不熟悉。然而,这个名字听起来很适合我们的任务。我能找到的所有数据库都是基于克劳德的服务器。如果您知道此类数据库的类 dbm 库,请提供建议。 我在数据库方面没有经验,所以如果我在以上 3 个雄蕊中的任何一个方面有错误,请纠正我。
解决方法
如果您的行数据可以增长到兆字节,而您只是在谈论数百万条记录,也许只是想办法将它放在文件系统中?如果您需要更像数据库的索引,请使用 SQLite 作为键,并使数据记录指向文件系统上的某个位置。与试图在一个巨大的数据库中完成所有工作相比,这种事情的实施和正确执行要快得多。