为什么PHP文件追加只在99.7%的尝试中完全成功?
Why is PHP file append only wholly successful in 99.7% attempts
我有一个Javascript应用程序在各种平台上运行。
(我尽量保持客户端设备列表尽可能大,包括早期的Android手机和早期的iphone,使用caniuse.com)。
每次客户端应用程序的数据发生变化时,新数据都被添加到服务器上的纯文本日志文件中。附加内容是一个长度在20到70个字符之间的字符串。
<标题>每隔一段时间——大约250次中有一次——追加的前6到20个字符擅离职守。
客户端设备上的JavaScript应用程序通过XmlHttpRequest将数据发送到Windows PC上的PHP 5.5.10,然后写入NAS挂载分区上的diskfile(在PC上挂载为Windows驱动器号)。
PHP在Windows 7的Mongoose web服务器上运行,然后数据存储在服务器网络上的国内网络附加存储设备的硬盘驱动器上。(一个Debian Linux NAS设备)NAS有时需要几秒钟来启动硬盘。
只有一个客户端设备正在处理任何给定的纯文本文件,但在任何给定时间,多达10个客户端设备可能正在访问各自的纯文本文件。
<标题>如果我修复服务器+NAS组合上的延迟,它会消失吗?(例如,通过将文件放在本地服务器上)
或者是否有一种方法可以通过使用新的设施来保证写?例如,通过写入SQLite表而不是纯文本文件,或者Couchbase数据库或CouchDB或诸如此类的文件。
只要客户机设备的参与保持为简单的XmlHttpRequest,我就可以保持广泛的客户机设备。
标题> 标题>我认为这里没有足够的信息,太多的系统和太少的信息。唯一的我能想到的是,这是一个并发问题。
如果你正在写一个磁盘上的文件,如果两个请求同时进来会发生什么?如果先读后写,可能会导致第二个请求被第一个请求覆盖。例如:
Process 1 receives data Y.
Process 2 receives data Z.
Process 1 reads data X from the disk.
Process 2 reads data X from the disk.
Process 1 writes to the disk, data is now XY
Process 2 writes to the disk, data is now XZ
本例中Y
丢失。
如果你使用一个数据库(MySQL, Couch等),如果数据在读写之间发生了变化,它应该不那么重要。在很少的情况下,当我必须阅读和编辑某些东西时,我会使用
之类的查询语句。UPDATE table SET data = "XY" WHERE data = "X"
这意味着如果数据在我读取X之后发生了变化,它不会更新字段,这是我可以在代码中观察和处理的东西。
关于fwrite的PHP文档说它是一个原子操作——要么什么都写,要么什么都不写。
这指出这是PHP中的一个错误。
我已经提交了一个bug报告。
关于工作回合有什么想法吗?
(在今天的测试中,没有一个写是部分的。12个丢失了,17个发生了乱序(即在客户发送信息的顺序不同的顺序中,总共42个)。
- 在AJAX成功响应中执行Javascript代码(在单独的文件中)
- Ajax POST返回成功,但没有;t更新JSON文件
- 是否可以在其他文件中获取 AJAX 成功变量的值
- AJAX/JS/PHP:如何替换发送到PHP文件的文件中的文本,并传递成功属性
- 使用dropzone上传文件后显示成功消息
- javascript文件不可用的可能原因是什么;t成功加载
- AngularJS、DropzoneJS、JSON——上传成功后刷新文件列表
- ajax是成功的,但PHP文件可以't运行
- PHP/Javascript-如果PHP文件上传成功,请检查JS
- 如何让用户在 ajax 成功方法中下载文件
- jquery ajax 文件上传,成功不被调用
- 如何在jQuery AJAX成功时强制下载文件
- Corodva 文件读取执行成功和失败回调
- 在 Ajax 成功后触发第二个 Javascript 文件
- $.ajaxFileUpload 已成功将文件上传到文件夹,但无法传递要保存在数据库中的值
- 我只想要在 php 文件中通过 AngularJS 调用 Ajax 后的成功/失败消息.但是我也得到了带有标签的完整HT
- 如何列出已成功上传的文件的名称
- 强制下载 Ajax 成功时的.mp3或.zip文件
- 文件上传成功时如何插入值
- 如何在tinyMCE中成功集成文件管理器