CPP 快速访问磁盘上的二进制数据
cpp fast access to binary data on disk
目前,我的程序在内存中有很多会话。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路线走的时候。
- 如何从dicom文件中读取二进制数据
- 如何在Qt中从数据库中检索二进制数据?
- readsome() 适合在 Windows 上读取二进制数据吗?
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 将包含二进制数据的 QByteArray 传递到按值运行
- 如何在 c++ 中生成十六进制二进制数据的 sha256 哈希?
- 在处理网络、二进制数据和序列化时应使用流或容器
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- 使用二进制数据更新 PostgreSQL 表
- 使用二进制数据和无符号字符
- sd_journal_send发送二进制数据.如何使用日志检索数据?
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 将文本和二进制数据连接到一个文件中
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 将整数的二进制数据转换为浮点数
- 使用 CMake 在可执行文件中嵌入二进制数据
- 二进制数据作为命令行参数
- 如何访问文件的二进制数据?
- 返回二进制数据的通用方式,而无需原始指针