安全地写一个文件算法的一部分(原子部分写)

问题描述 投票:0回答:1

假设我想写简单的数据库(在Linux上工作),至极必须满足以下条件:

它只有两个功能:

  1. write_chunk(索引,字节)
  2. read_chunk(指数)

其中索引是整数0至1M,和字节是100个字节块。我想文件指出write_chunk的每次通话后atomicly转移。

所以,我想可以肯定的:

  1. 100个字节块文件的位置指数* 100把
  2. 所有100个字节writen原子(或不写在所有)
  3. 如果突然断电,在写操作发生(之前的有效100个字节恢复)

我imagane这样实现:

写功能实现:

  1. 在我们开始写100个字节,我们从位置指数×100拷贝previos 100个字节到另一个文件回滚(指数也拷入)。我们也签署哈希全部回滚文件数据。不要FSYNC回滚。
  2. 然后,我们开始写在位置指数* 100新100个字节,做FSYNC。
  3. 如果第2步是确定的,我们从回滚文件删除所有数据。
  4. 回到确定函数调用。

阅读功能的实现:

  1. 如果我们开始阅读和回滚文件不是空的,有效的,我们从回滚恢复1​​00个字节,并删除回滚或者散列无效只是删除回滚。
  2. 我们从位置索引读取块* 100和返回数据

我是用安全以下算法?

所以我想将舒尔我对安全像MySQL或PostgreSQL数据库执行INSERT statment后提交的同一水平的。

我可以用它来保证原子和耐用写什么工艺,我的意思可能是我需要使用一些散列块上也以确保其有效,或使用回滚文件的副本两倍。或存储数据回滚文件中一点点时间,以确保磁盘子系统齐平。 (我heared我并不安全,即使我叫FSYNC写后这取决于磁盘subsystemn的那么物理写入数据)。

mysql database postgresql disk acid
1个回答
0
投票

这应该只要你有没有并发工作,也就是说,只有这些功能一个允许在同一时间运行。

你为什么不使用一个简单的嵌入式数据库?

© www.soinside.com 2019 - 2024. All rights reserved.