用于c++的数据存储库

Data storage library for C++

本文关键字:存储 数据 c++ 用于      更新时间:2023-10-16

我想在我的代码中使用一些小的c++库,它将允许做以下事情:

DataStore ds;
ds.open("data.bin");
int num=5;
std::string str="some text";
ds.put("key1",num);
ds.put("key2",str);
ds.get("key1");// returns int(5)
ds.get("key2");// returns std::string("some text")
使用风格不必与代码示例相同,但原则应该保持不变(获取/设置任何类型的值并将其存储在文件blob中)。库也不应该是基于SQL的,也不应该是SQL包装器。这些库是什么?它们的优势是什么?

编辑:最多将使用10k个键,大约使用10k个键。每个密钥100字节的数据,文件不需要在计算机或操作系统之间移植,文件不应该用文本编辑器编辑(如果不这样看起来更专业),也不需要多线程意识。

您可以选择使用BerkeleyDB及其C API, c++ API或c++ STL API:

BekeleyDB占用空间小、速度快、成熟、健壮。BerkeleyDB的另一个优点是,大多数脚本语言(如Python, Perl等)都与它绑定,因此您可以使用它们来操作(检查,可视化)数据。

缺点是,您只能在其中存储键值对,其中键和值都是字符串(或者更确切地说是blob),因此您必须将c++数据类型转换为字符串/blob。

创建一个以基本方式完成您所描述的功能的类并不难。你所需要的只是一些可以读/写键的函数,一个"这是什么类型"的标签[如果我们假设存储的数据不是很大——我的意思是每个项目几MB左右,那么可能与存储数据的大小相结合]。您可能会发现使用某种"索引结构"或"下一个元素在哪里"位置引用会有所帮助。

显示ds.get(std::string)的方式有一个小问题:您实际上不能从同一函数返回intstd::string。您可以编写一个以std::string为引用的函数,另一个以int为引用的函数,或者诸如此类的函数。

如果你需要有很多键,那就更有趣了——此时,你可能需要某种哈希或二叉树类型的组织来搜索键。10k个键可能不是什么大问题——如果您按顺序存储它们,就会变得更容易。

文件不应该用文本编辑器编辑(否则看起来更专业)

我必须说,我不同意那件事。我发现文本可编辑文件是非常专业的。事实上,它是二进制的,只是让事情变得尴尬,更难处理,如果应用程序中的某些东西不像你希望的那样工作(例如,它存储了安装路径,你移动了它,它不再工作,因为你不能启动它,它将不允许你编辑配置)。