- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
标题本来可以写得更好,但无论如何。我想知道是否有任何写入文件的函数,就像数据库的 ACID 属性一样。原因是,我想确保我正在执行的文件写入不会在断电时弄乱和损坏文件。
最佳答案
根据您对文件的具体处理方式和平台,有几种选择:
如果您重复将 blob 从内存序列化到磁盘以保持状态(例如:dhcp 租用文件),如果您使用的是 Posix 系统,则可以将数据写入临时文件并将临时文件“重命名”为您的目标。在 Posix 兼容的系统上,这保证是一个原子操作,甚至文件系统是否被记录都无关紧要。如果您使用的是 Windows 系统,则有一个名为 MoveFileTransacted 的 native 函数您可以通过绑定(bind)使用。但这里的关键概念是,临时文件保护你的数据,如果系统重新启动,最坏的情况是你的文件包含最后一次良好刷新的数据。此选项要求您每次要记录更改时都写出整个文件。对于 dhcp.leases 文件,这对性能影响不大,更大的文件可能会更麻烦。
如果您不断地读写数据位,sqlite3 是您的不二之选——它支持查询组的原子提交,并拥有自己的内部日志。这里需要注意的一件事是,由于锁定数据库、等待数据刷新等的开销,原子提交会变慢。
还有一些其他的事情要考虑——如果你的文件系统是异步挂载的,写操作看起来已经完成,因为 write() 返回了,但它可能还没有被刷新到磁盘。在这种情况下,重命名可以保护您,sqlite3 也可以。
如果您的文件系统是异步挂载的,则可以写入数据并在写入数据之前移动它。所以如果你在 unix 系统上,挂载同步可能是最安全的。不过,这已经达到了“如果失败,人们可能会死”的偏执狂水平。但是,如果它是一个嵌入式系统并且它死了,“如果失败我可能会丢掉工作”也是额外保护的一个很好的合理化。
关于python - Python 中任何与 ACID 在数据库中具有相同安全性的写入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352106/
假设我使用的是标准 SQL 引擎(例如 Postgres、MySQL...)。 如果我没有明确说“开始交易”和“结束交易”进行查询时 (如“插入学生......”), 会“安全”吗? 我会失去 RDB
我正在开始一个项目的研究,该项目需要在其数据库上提供ACID语义。 由于数据的性质,它不适合存储在常见的现成系统(关系或键值)中。 关于如何实现必须提供ACID语义的系统,有哪些好的资源? 我典型的G
DBMS 的原子性和隔离性之间的区别有些模糊,所以我想知道两者之间的明显区别? 原子性和隔离性在经典数据库事务中通过使用提交协议(protocol)得到保证。该协议(protocol)用于将临时存储变
抱歉这个无知的问题,但是什么样的应用程序不需要符合 ACID 的数据库服务器?我有 SQL Server 背景,其中 ACID 一直“存在”,现在研究其他 DBMS 让我思考。我能想到的大多数应用程序
ACID和数据库事务有什么关系? ACID 是给数据库事务还是一回事? 谁能启发这个话题。 最佳答案 ACID是您希望在修改数据库时应用的一组属性。 原子性 一致性 隔离 耐用性 事务是一组相关的更改
过去几个月我一直在研究微服务架构应用程序,我仍在努力适应分布式特性。我多次注意到一种模式,但我不确定处理它的首选方式是什么。 假设我们有服务 A、服务 B 和服务 C。服务 A 公开了一个 API,其
我经常读到,CQRS 的一大优势是在读取端拥有非规范化数据。例如。可以存储冗余的数据字段和子对象以避免连接。但这也意味着单个事件可能会导致读取端发生多个更新操作,因为实体的状态更改必须反射(refle
我经常读到,CQRS 的一大优势是在读取端拥有非规范化数据。例如。可以存储冗余的数据字段和子对象以避免连接。但这也意味着单个事件可能会导致读取端发生多个更新操作,因为实体的状态更改必须反射(refle
任何人都知道提供对一致性保证的精细控制的消息总线实现? Full ACID 太慢,没有 ACID 太错误。 我们目前正在使用 Rhino ESB 包装 MSMQ 进行消息传递。在分布式事务中使用持久的
我有一个多线程 java 应用程序,它在 MySQL 数据库上执行大量并行 CRUD 操作。正如MySQL手册中所读到的,InnoDB表结构应该确保事务按照ACID原则执行。但我仍然遇到问题,因为有时
我的交易应用程序是这样工作的: try { $db->begin(); increaseNumber(); $db->commit(); } catch(Exceptio
http://imgur.com/IZgvl 大家好,我一直在从 Wiley 的 MySQL Administrator's Bible 学习 MySQL(完全没有使用 PHP 的经验)。如果我提出的
背景: 我通过串行连接从 arduino 获取温度 float 。我需要能够每 30 秒缓存一次此温度数据,以便其他应用程序(例如网络、恒温器 Controller )访问并且不会使串行连接过载。 目
我正在查看有关事务的 ACID 属性,并在不同站点上遇到了以下声明ACID 是事务保证的四个属性的首字母缩写:原子性、一致性、隔离性和持久性。 **我的问题专门针对这个短语。 guaranteed b
我在 hadoop 集群上工作,hortonworks 2.4 发行版。我想对 Hive 表进行 ACID 操作。这是我的声明: CREATE TABLE myAcidTable (..) CLUST
我试图了解 ACID 事务,但我对持久性一无所知。 据我所知,持久性可确保保存所有已完成的交易,即使发生某种技术故障。即使发生某种技术故障也能获救意味着什么。例如,如果我的服务器在事务期间崩溃,在将数
我如何为我的数据库实现 ACID 属性 -A-原子性,C-一致性,I-隔离性,D-持久性。正在使用的数据库系统 - MySql。 最佳答案 ACID 不是您可以实现的模型,而是数据库服务器必须遵守的一
我是 Aerospike 的新手。 我想知道在所有可能的超时情况下,如该链接所述: https://discuss.aerospike.com/t/understanding-timeout-and-
具体来说,是否存在数据丢失的风险?我正在考虑运行一个密集的事务处理系统,在这个系统中,不丢失任何东西是至关重要的。是否有 NoSQL 用于银行交易处理等任务关键型应用程序的示例? 最佳答案 坦率地说,
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!