用于c++的数据存储库
Data storage library for C++
我想在我的代码中使用一些小的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)
的方式有一个小问题:您实际上不能从同一函数返回int
和std::string
。您可以编写一个以std::string
为引用的函数,另一个以int
为引用的函数,或者诸如此类的函数。
如果你需要有很多键,那就更有趣了——此时,你可能需要某种哈希或二叉树类型的组织来搜索键。10k个键可能不是什么大问题——如果您按顺序存储它们,就会变得更容易。
我必须说,我不同意那件事。我发现文本可编辑文件是非常专业的。事实上,它是二进制的,只是让事情变得尴尬,更难处理,如果应用程序中的某些东西不像你希望的那样工作(例如,它存储了安装路径,你移动了它,它不再工作,因为你不能启动它,它将不允许你编辑配置)。文件不应该用文本编辑器编辑(否则看起来更专业)
相关文章:
- 使用 char* 存储数据和产生的错误
- 我可以存储数据的地方/C++,Linux,QtCreator
- 如何在共享库的整个生命周期内存储数据
- 在字符串数组中动态创建和存储数据
- 用指向文件的指针存储数据结构
- 如何存储数据/我们如何获取存储在 unordered_map c++11 中存储桶中的数据
- 存储数据的对象和存储指向数据的智能指针的对象
- C++读取文本文件并存储数据
- Cocos2dx: 无法存储数据?
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 尝试从每个预期数据之间有多个空间的文件中读取和存储数据
- 存储数据列表并自动分配给结构的最佳方法是什么
- QT MAC应用程序存储数据路径
- 动态分配存储数据在堆中的随机位置中
- 鸟类调查中的项目在代码中遇到问题.如何像数据库系统一样存储数据
- 可以在C 中永久存储数据中的数据
- 用于存储数据的结构和外部二进制文件
- 使用 char 数组存储数据
- 在结构中读取和存储数据
- 尝试在结构中存储数据时出现堆分配错误