【问题标题】:What happens when 1000 users open and rewrite 1 file simultaneously?当 1000 个用户同时打开并重写 1 个文件时会发生什么?
【发布时间】:2017-01-17 18:41:02
【问题描述】:

嗯,标题解释了很多。我即将制作 1 个文件对象(我们称为 analytic.json),其中包含如下对象:

{"country":{"indonesia": 
    [{"uniqueID":'00000000000',"dateVisit":"20170129","visitTimes":17}, 
     {"uniqueID":'00000000001',"dateVisit":"20170129","visitTimes":10}]}}

在这种情况下,我想跟踪访问者。每个访问者称为 1 个唯一 ID,每次访问者打开一个新页面时,visitTimes 都会被提升。 我关心的问题是,当超过 1000 名访问者同时打开任何页面时,会发生什么?

每次打开和重写此文件时都使用fopenfwritefclose 完成。有什么方法可以在不使用数据库的情况下做得更好?我是否需要对这些进程进行排队?如何?很多问题,非常感谢。

【问题讨论】:

  • 因为你确实提到了最没用的文件 IO 函数,但省略了关于锁定的注释;不,这不是一个可行的方法。对您已经知道的更好的方法有什么确切的疑虑?
  • 您需要使用文件锁定,但我们只能阻止此类尝试。基于文件的存储只是错误的方法。数据库是要走的路。
  • 在这里添加到狗堆,文件锁定只是一个问题。当您的文件为 4-5GB 时会发生什么?

标签: php analytics fopen


【解决方案1】:

首先,正如 cmets 中已经提到的那样,您绝对应该为此目的使用数据库。这就是构建数据库的目的,如果您将文件用作数据库,则会出现以下问题:

  1. 需要更多时间(打开和关闭)
  2. 需要更多空间
  3. 文件锁定会降低您的服务器速度(这是必需的)
  4. 文件会快速增长,因此访问者越多,服务器的过载就越多 - 一旦访问者数量众多,就没有机会

阅读以下关于 PHP 中同时请求的讨论:Simultaneous Requests to PHP Script

不要使用您的文件解决方案(这是一个坏主意),而是创建一个不错的数据库概念。您可以更新、查询、锁定,还可以创建一个很好的函数来将当前状态作为 JSON 传递。

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2012-07-31
    • 1970-01-01
    • 2022-01-06
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多