![]() |
1
2
我同意你不需要一个完整的数据库,因为 似乎你只需要写原子文件 . 您需要从两个部分解决这个问题:序列化/反序列化和原子写入。
对于第一部分,
一旦你将对象序列化为字符串, 使用以下过程以原子方式将文件写入磁盘,假设只有一个并发写入程序 (至少在POSIX上,见下文):
当
如果存在多个并发写入程序的可能性,则必须考虑同步构造。 |
![]() |
2
4
好吧,既然你知道我们基本上是在讨论一个数据库,尽管它是一个非常简单的数据库,你可能不会感到惊讶,我建议你看看 sqlite3 模块。 |
![]() |
3
2
人类可读性要求的原因是什么? 我建议在sqlite中寻找简单的数据库解决方案,或者在pickle中寻找序列化对象并将其写入磁盘的简单方法。不过,这两种语言都不是特别适合人类阅读的。 其他选项是JSON或XML,正如您所暗示的那样-使用内置的JSON模块序列化对象,然后将其写入磁盘。启动时,请检查该文件是否存在,并在需要时加载数据。 从 docs :
|
![]() |
4
1
既然你提到你的数据很小,我就用一个简单的解决方案 pickle 模块,用于将python对象转储到行中 very easily . 然后你就建立了一个 Thread 以定义的时间间隔将对象保存到文件中。 不是一个“图书馆”的解决方案,但-如果我理解你的要求-简单到你不需要一个。 编辑:您提到您希望覆盖在编写过程中出现问题的情况,从而有效地使它成为一个原子事务。在这种情况下,传统的方法是使用“基于日志的恢复”。它实质上是将一条记录写到一个日志文件中,上面写着“write transaction started”,然后在完成后写下“write transaction comitted”。如果“started”没有对应的“commit”,则回滚。 在这种情况下,我同意使用SQLite这样的简单数据库可能会更好。这可能有点过火,但另一方面,实现原子性本身可能会重新发明轮子一点(我没有发现任何明显的库可以为您做到这一点)。 如果你真的决定采用这种狡猾的方式,这个主题将在Silberschatz的操作系统手册的进程同步一章的“原子事务”一节中介绍。 一个非常简单的(虽然可能不是“事务上完美的”)替代方法就是每次都记录到一个新文件中,这样如果一个文件损坏了你就有一个历史记录。您甚至可以为每个文件添加一个校验和,以自动确定它是否已损坏。 |
![]() |
5
0
|
![]() |
Vasu Mistry · 如何用字符串值解析yaml文件 2 年前 |
![]() |
kopew · 索引器:列表索引超出api的范围 2 年前 |
![]() |
Atefeh Hedayati · 如何使用矩阵乘法简化循环? 2 年前 |
![]() |
wayoh22 · 检查部分值和返回全部值的列表 2 年前 |
![]() |
arwind mohan kmm · Python中的图像拆分器 2 年前 |
![]() |
Cranjis · 网址。解析Python2。7相当于 6 年前 |