0

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

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

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

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

4

3 回答 3

6

使用数据库,这正是他们擅长的。

于 2012-06-03T18:17:35.420 回答
6

您可以SQLite为此目的使用库。它也有C/C++ 接口

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

于 2012-06-03T18:19:00.827 回答
2

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

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

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

于 2012-06-09T14:27:15.497 回答