【问题标题】:Prevent request to get data from json file while JSON file updating防止在更新 JSON 文件时请求从 json 文件中获取数据
【发布时间】:2015-08-05 17:05:31
【问题描述】:

我们已经看到很多使用 JSON 文件的应用程序,但我有一个案例研究,我想获得解决方案。

让我们看看...

  1. 一个应用正在使用 json 文件,该文件从百万用户那里获取请求,并且每秒完成数千个请求。

  2. 管理面板每分钟或每秒或特定时间范围更新 JSON 文件。

  3. 当收到访问 JSON 文件的请求并同时从管理员打开以进行更新时,JSON 文件的行为将是什么(我已阅读它,JSON 文件将以可读模式获取。)

  4. 让 JSON 文件正在使用一些脚本编写,其过程比 50% 文件已更新时的行为要快三分之一秒。

    处理完成或部分更新时,是否会提供新的书面内容?

【问题讨论】:

  • 你应该阅读读、写锁。它们旨在专门解决多个作者之间的信息破坏问题。
  • 不要将文件用作事务存储。
  • 正如@eckes 所说 - 不要使用文件。使用数据库,并将结果编码为 json。

标签: java javascript php c json


【解决方案1】:

不用担心锁定,只需使用rename()

假设您在 rename() 是原子操作的操作系统上运行,请创建一个 new 文件,例如“/data/file/name.json.new”,然后完成,重命名文件。在 C 中看起来像这样:

rename( "/data/file/name.json.new", "/data/file/name.json" );

这样,任何打开“/data/file/name.json”的进程都会看到一致的数据文件。

【讨论】:

  • @MuhammadIrfan - 这取决于您对文件写入过程的控制程度。您最初的问题没有提供该信息。您始终可以编写自己的服务器端代码来执行此操作,但根据您的配置,这可能需要大量工作。
【解决方案2】:

实际上,根据您的描述,您需要一种在文件服务器端应用操作的服务。

您应该避免承担创建、读取、更新和删除 (CRUD) 的责任,因为您将难以维护诸如原子性、一致性、隔离性和持久性 (ACID) 等原则,而有为您执行此操作的系统,即数据库管理系统。 简而言之,像您描述的场景应该是 DBMS 的职责,而不是您的职责。

你可能需要一个 NoSQL DBMS,它负责你的数据库的 CRUD 操作——它可以是基于文件的 JSON 格式和其他形式,总是(或几乎总是,但这可能是你会学到的东西)在搜索它)。 MongoDB 就是这种系统的一个很好的例子。

因为您提到了 JSON,请考虑到传输数据是另一回事,而存储数据又是另一回事。我建议您对请求和响应使用 JSON 格式,但要探索存储中的其他选项。例如,即使是使用 SQL 的关系型 DBMS 也可能对您有好处,它始终取决于您的需求。无论接收或发送到每个客户端,您可能只需要以 JSON 格式形成(编码和解码)数据。

查看here 了解更多信息。

【讨论】:

  • 谢谢。 @Nick 它确实增强了我的编程方法。
猜你喜欢
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多