C++ cpp快速访问磁盘上的二进制数据

C++ cpp快速访问磁盘上的二进制数据,c++,database,binary,indexing,C++,Database,Binary,Indexing,目前,我的程序在内存中有很多会话。会话是具有无符号int-ID的对象,一些变量+可能的长大小std::map(会话的大小不同) 我想将一些会话卸载到磁盘,但不知道如何组织磁盘上的结构,以便有机会在磁盘上快速查找会话,以便在需要时加载它。如何通过磁盘上的ID快速查找会话?也许有些索引,但不知道如何使用它们。。。或者是一些额外的变量 *SQL Database*不是我的变体,因为稳定性、资源过度使用、可移植性、兼容性等需要像磁盘上的其他数据库一样进行组织 谢谢,对不起我的英语。如果我的文本有错误,请

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

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

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


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

使用数据库,这正是它们的好处。

您可以使用该库。它也有


此外,SQLite是一个数据库。它只是一个文件(您可以有一个文件),就像硬盘上的任何其他文件一样。你不需要为此安装任何大型软件。它既轻便又方便。

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

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


使用DB更容易,但如果这是您想要做的,那么它将起作用,并且性能应该非常好。如果你想在记录中搜索特定的值,你可以用这些值来构建另一个BTURE,但这是认真考虑DB路由的时候。< / P>不,数据库不是我的变体,原因很多。我想实现一些类似于我自己的东西。您列出的所有不使用SQL数据库的原因实际上都是此类数据库的优点。他们非常非常稳定。几乎每个平台都有。SQL是一种可移植的标准。等等。@DavidSchwartz很难解释为什么不是母语,但为了我的任务,我不能使用第三方数据库。已经从mysql迁移到自己的二进制文件数据库。目前,基于启动、退出和备份的保存/加载非常简单,但我想实现一些如上所述的高级功能。此外,我需要更多的控制,数据何时可以存储在磁盘上,何时可以从内存中卸载(sql可以提供更高级的内存管理和磁盘使用)。2) sql不是那么快3)库/进程请求额外的内存-最好在这个内存中存储会话。你很可能无法制作出比其他人使用和推荐的解决方案更好的解决方案。我们使用它们并推荐它们是有原因的。如果您有一长串需要的特定功能,那么您必须对它们全部进行编码。如果您不愿意或无法详细记录这些需求,我们当然无法为您提供满足您特定需求的解决方案。我强烈建议您研究轻量级数据库,例如。“写自己的东西是一项重大任务,可能会很糟糕。”DavidSchwartz事实上,我大部分时间都在处理对象,磁盘上的数据只需要备份和存储,而不是长时间使用记录。我不需要所有的SQL语法和特性。似乎只有在二进制文件中快速搜索会话位置的方法。感谢您的
Tokyo Cabinet
,这很有趣也很有用,但不是在当前的项目中,但我在文档中找到了这样的想法:
数据库的大小与键的范围和每个值的限制大小成比例。
因此,如果我将按大小限制每个会话,我将能够通过索引查找我需要搜索的有关如何在磁盘上实现简单的
表数据库的信息。如本文第段所述:表数据库的灵活实现<代码>东京内阁
还提供了我需要的更多功能。(我只需要序列化/取消序列化对象的方法)。谢谢!这正是我要寻找的!很难用我需要的
文件
实现的母语来描述,而不是数据库!我有了这个想法,会考虑如何编码。非常感谢!不客气,祝你好运,这个网站有一个关于btree索引如何工作的Java动画,应该让你开始:谢谢你的链接,在解决了阻塞
管道上所有应用程序线程的其他问题后,将从这个开始。如果你不介意的话,我稍后会接受你的回答。我认为如果其他人读到它并得到“simle use DB”不是一个答案,那就好了。此外,您将获得更多选票。:)