【问题标题】:Speed: MySQL vs File Output速度:MySQL 与文件输出
【发布时间】:2011-02-25 23:45:25
【问题描述】:

我有一个 php 脚本,每次将执行大约 1 小时,在它的运行期间,它需要存储稳定的 cmets 流,以供我稍后查看。基本上,每条评论都包含一个时间戳和一个简短的描述,例如“2/25/2010 6:40:29 PM:更新了商品 255 的价格”。

那么,将其输出到 .txt 文件或将其插入 MySQL 数据库,哪个更快?另外,我应该使用 PHP 的 date() 中的时间戳,还是应该在 MySQL 中创建一个时间对象?

我的问题的第二部分是,由于程序将运行大约一个小时,我应该在每次记录评论时连接到 MySQL、插入数据并关闭与 MySQL 数据库的连接,还是应该只连接一次,为程序运行时插入数据,然后在程序退出时关闭连接,大约在创建初始连接后一个小时?

提前感谢您的所有建议。

【问题讨论】:

    标签: php mysql file-io performance


    【解决方案1】:

    这取决于您在一天结束时对数据的需求。您是否需要能够在滚动文件之外对数据进行审核。如果您不需要浏览数据或永久存储数据,那么如果您只是追加到文件的末尾,那么平面文件将比 MySQL 更快。

    如果您需要数据更有用,您会希望将其存储在 mysql 中。我建议您将表格结构如下:

    id  int
    timestamp datetime default now()
    desc varchar
    

    这样您就不必在 PHP 中实际创建时间戳,只需让 mysql 完成工作,然后您就可以从您的表中执行更复杂的查询。但是,您需要考虑的另一个考虑因素是进入此表的数据量,因为这也会影响您的最终决定。

    【讨论】:

    • 好吧,我大概会每周擦一次日志,但是你觉得MySQL会话的连接怎么样?我应该为每个请求连接/关闭,还是只做一次并在 60 分钟的运行时间中发送查询?
    • 我会设置一批语句,并在您写入 X 条记录后执行它们。您可以将其保留在同一个线程中,或产生第二个线程。连接池或持久连接可能会使您受益,因为打开和关闭连接通常很昂贵(资源方面)。
    【解决方案2】:

    如果您只是记录信息以供以后查看,写入文件会更快。写入数据库仍然需要写入某处,并且会增加数据库引擎的开销。

    【讨论】:

      【解决方案3】:

      根据我的经验,总体而言,编写 .txt 文件比使用 MySQL 编写日志要快得多。看,如果您将 cmets 写入 DB,那么您必须编写更多代码以便稍后将这些 cmets out 从 DB 中获取,而不仅仅是使用 cat 或 more 或 vi或类似的查看 cmets。

      如果您选择 DB 路由:在您的小时内保持连接打开是完全可以的,但您必须能够处理“服务器消失”,以防您有一段时间没有写入 DB。

      --皮特

      【讨论】:

      • 如何检测到“服务器消失”以及如何处理?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多