C/C++:如何将数据存储在B树中的文件中

2024-04-19

在我看来,将数据作为文件存储在 B 树中的一种方法可以使用 C 语言使用具有结构序列(数组)的二进制文件来有效完成,每个结构代表一个节点。因此,我们可以使用类似于使用数组创建链表的方法来连接各个节点。但随之而来的问题是删除节点,因为在一个大文件中只删除中间的几个字节是不可能的。

删除的一种方法可能是跟踪“空”节点,直到达到阈值截止,然后创建另一个文件来丢弃空节点。但这很乏味。

从简单/效率的角度来看,是否有更好的方法来删除,甚至在文件中表示 B 树?

TIA, -斯维亚


要在文件中实现 B 树,可以使用文件偏移量而不是指针。此外,您还可以实现“文件内存管理器”,以便您可以重新使用文件中已删除的项目。

为了完全恢复 B-Tree 文件中已删除的块,您必须在新文件中重新创建 B-Tree。另请记住,大多数操作系统没有截断文件的方法。截断文件的一种可移植方法是写入一个新文件并销毁旧文件。

另一个建议是将文件分区为B-Tree分区和数据(项)分区。 B 树分区将包含页面。叶页将包含数据项的偏移量。数据分区将是文件中包含数据项的部分。您最终可能会为每个分区创建多个分区,并且这些分区可能会交错。

我花了很多时间研究基于文件的 B 树,直到我放弃并决定让数据库程序(或服务器)为我处理数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++:如何将数据存储在B树中的文件中 的相关文章

随机推荐

  • wcf 错误:传入消息使用的令牌进行签名,该令牌与用于加密正文的令牌不同。这是没有预料到的

    我正在尝试使用 verisign 测试 x 509 证书调用第三方服务 当我收到响应消息时 它会生成以下错误 传入消息使用令牌进行签名 该令牌与用于加密正文的令牌不同 这是没有预料到的 我没有预料到会出现此错误 因为我只向服务提供了一个 x
  • 我们需要为每个子例程创建一个错误处理程序吗?

    我从SO中复制了一段代码作为示例 该子例程包含一个错误处理程序 是否应该为所有 Sub 制定一个错误处理程序 Public Sub SubA On Error Goto ProcError Connection Open Open File
  • 更新两个表的 SQL 触发器

    我是 SQL 新手 有人可以帮我修复下面的触发器吗 我有这 2 个表 评论和报价 我想更新评论表插入 更新和删除 从报价表中获取数据 如果更新成功 我想使用 ReviewId 和 ReviewDate 更新报价表 我使用的是Azure提供的
  • JQuery Ajax 火狐错误

    下面的代码在 Chrome 和 IE 中都可以正常工作 get ajax BTBookAppointment aspx dsl telNumberBox value date requiredDate value timeslot ddTi
  • 从连接到计算机并在成像设备中列出的相机捕获图像

    我有一台佳能 EOS 1000D 当我将其连接到计算机时 它列在 控制面板 gt 成像设备 下 我想以编程方式拍照 我猜想成像设备中列出的所有设备都具有相同的接口 可能是 TWAIN 并且具有向它们发送命令的标准方法 TWAIN可以做到吗
  • Rails 6 中是否必须手动将 ApplicationHelper 包含在 ApplicationController 中?

    控制器 class FooController lt ApplicationController def index bar method 应用程序助手 module ApplicationHelper def bar method 查看索
  • 如何禁止在Python中创建新的类属性?

    这可能看起来是一个非常基本的问题 但我在 SO 或其他地方找不到任何有用的东西 如果您参加内置课程 例如int or list 没有办法为它们创建额外的类属性 这显然是一个理想的行为 gt gt gt int x 0 Traceback m
  • 在 Django REST 框架中序列化内部方法字段

    例如 我有两个模型 Model1 and Model2 它们在模型级别上不通过任何关键字段直接相互关联 对于这两种模型 我都有序列化器 我正在寻找拥有的方式Model2查询集在Model1序列化器 例如 GET api model1 01
  • 无法在运行 apache 服务器上访问 http://localhost:80

    在 ubuntu 14 04 中运行 apache 服务器时我得到 This webpage is not available 在浏览器中或 curl 7 Failed to connect to localhost port 80 Con
  • 视图的高效“屏幕截图”?

    TL DR 自从getDrawingCache 似乎触发了一个完整的重绘View当启用硬件加速时 是否有其他方法获得Bitmap 或类似的东西 可以避免这种情况 也许是通过读取填充到 硬件 软件 层的数据View最后被抽到了 一些背景 自
  • 第一个 cURL 请求验证 GCM api 密钥

    目前正在尝试使用 GCM API 密钥构建我的第一个 Android 应用程序 一款营销软件将使用该密钥来发送推送通知 想要获得一些帮助 通过curl请求验证我的谷歌云消息 GCM API密钥 我尝试使用在线卷曲生成器 但结果与我期望的成功
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • 为 WebRTC 应用程序实现我们自己的 STUN/TURN 服务器 [重复]

    这个问题在这里已经有答案了 我正在开发一个 webrtc 应用程序 并且必须实现以下 TURN 服务器 https code google com p rfc5766 turn server https code google com p
  • R 中的旋转轴标签

    如何使 条形 图的 y 轴标签平行于 X 轴而不是平行于 Y 轴 不确定这是否是您的意思 但尝试设置las 1 这是一个例子 require grDevices tN lt table Ni lt stats rpois 100 lambd
  • php中比较字符串的方法

    我想比较两个字符串并返回比较级别 字符串 1 是输入 可以采用来自客户端的多种格式 例如 string 1 GCSE English Lang Year 10 or string 1 Year 10 Eng Lang GCSE etc 字符
  • 如何在 VB.NET 中调用异步 Web 请求?

    我目前正在使用以下代码来创建网络请求 Dim myRequest As WebRequest WebRequest Create http foo com bar Dim myResponse As WebResponse myReques
  • 在 iOS 中加载/保存设置

    我在 AppDelegate 中定义了以下两个过程 保存设置和加载设置 单击保存按钮后 我将在 AppDidFinishLaunching 方法中调用 loadSettings 过程 并在设置视图中调用 saveSettings 过程 这两
  • 从外部源填充运行时天蓝色管道参数

    我们希望创建一个管道来更新我们的多租户 Azure 环境 我们需要在每个租户的更新过程中执行一些操作 为了实现这一目标 我们希望为每个租户创建一个作业 以便我们可以并行处理租户 为了实现此目的 我想使用运行时参数来传递租户以更新到我的管道
  • OSX 中的 python 地穴

    我有一个 Django 应用程序 它可以重置 Ubuntu 机器上运行的 unix 用户密码 但我的开发环境是 OS X 我遇到了这种恼人的情况 OS X gt gt gt import crypt gt gt gt crypt crypt
  • C/C++:如何将数据存储在B树中的文件中

    在我看来 将数据作为文件存储在 B 树中的一种方法可以使用 C 语言使用具有结构序列 数组 的二进制文件来有效完成 每个结构代表一个节点 因此 我们可以使用类似于使用数组创建链表的方法来连接各个节点 但随之而来的问题是删除节点 因为在一个大