CPP 快速访问磁盘上的二进制数据

cpp fast access to binary data on disk

本文关键字:二进制 数据 磁盘 访问 CPP      更新时间:2023-10-16

目前,我的程序在内存中有很多会话。session是具有unsigned int ID的对象,一些变量+可能的长大小std::map(每个会话的大小不同)。

我想将一些会话卸载到磁盘,但不知道如何组织磁盘上的结构,以便有机会在磁盘上快速查找会话以在需要时加载它。如何在磁盘上按ID快速查找会话?也许有些索引,但不知道如何使用它们...或者也许是一些额外的变量?

*

SQL数据库*不是我的变体,因为稳定性,资源过度使用,可移植性,兼容性等需要像磁盘上的其他数据库一样组织一些东西。

谢谢,对不起我的英语。 如果有错误,请编辑我的文本

使用数据库,这正是它们的优点。

您可以使用SQLite库来实现此目的。它还具有C/C++接口。

此外,SQLite是一个跨平台的可移植数据库。它只是一个文件(您可以有一个文件),就像硬盘上的任何其他文件一样。您无需为此安装任何大型软件。它轻巧方便。

为什么在像

这样的这么多网站上,这么多人回答一个简单的问题,"你为什么要这样做?"或者提供没有回答这个人的替代方案?(阅读本页底部的"您的答案"框)可能是有更好的方法,或者这个人几乎是在浪费他们的时间。但是,他们可能只是为了尝试和提出解决方案的乐趣而尝试,无论它的功能如何。@abrahab显然想尝试一下(他试图说得很清楚),所以让他回答他的问题,或者如果你不知道答案,请保持沉默。

@abrahab,一种方法是使用二进制文件格式来存储会话数据。对保存在单独文件中的会话 ID 使用 btree 索引(Google btree),存储在 btree 中每个会话 id 下的值是一个文件指针,指向数据文件中二进制记录开始的位置。从文件中读取的第一个字节(short int、int、long)告诉您记录的长度(以字节为单位),读取这些字节并处理它们。由您定义会话记录的格式(结构等)。如果编辑/删除/插入记录,则必须更新该记录的 btree 以及数据文件中重新定位的任何记录。

使用数据库更容易,但如果这是您想要做的,这将起作用并且性能应该非常好。如果你想在记录中搜索特定的值,你可以用这些值构建另一个btree,但那是认真考虑沿着DB路线走的时候。