【问题标题】:What is more expensive for template reading: Database query or File reading?模板读取哪个更贵:数据库查询还是文件读取?
【发布时间】:2010-12-05 08:41:10
【问题描述】:

我的问题很简单;我需要读出一些模板(在 PHP 中)并将它们发送给客户端。

对于这类数据,具体来说就是text/html和text/javascript;从 MySQL 数据库中读取它们还是从文件中读取它们更昂贵?

亲切的问候
汤姆

inb4 安全性;我知道。

PS:我阅读了有关类似问题的其他主题,但它们要么与其他类型的数据有关,要么没有得到回答。

【问题讨论】:

    标签: php mysql templates file


    【解决方案1】:

    毫无疑问,从数据库读取更昂贵。

    平面文件存放在哪里?在文件系统上。在最好的情况下,它们最近被访问过,因此操作系统已将文件缓存在内存中,而这只是将它们读取到您的 PHP 程序中以发送到客户端的内存读取。在最坏的情况下,操作系统必须先将文件从磁盘复制到内存,然后您的程序才能使用它。

    数据库中的数据在哪里?在文件系统上。在最好的情况下,它们最近被访问过,因此 MySQL 在内存中拥有该表。但是,你的程序不能直接获取到那个内存,它需要先和服务器建立连接,来回发送认证数据,发送查询,MySQL 必须解析并执行查询,然后从内存中抓取行并将其发送到您的程序。在最坏的情况下,操作系统必须先从磁盘上的数据库表文件复制到内存,然后 MySQL 才能获取要发送的行。

    如您所见,这些场景几乎完全相同,只是在将数据从内存或磁盘中取出之前,使用数据库会产生额外的连接和查询开销。

    【讨论】:

      【解决方案2】:

      有很多因素会影响两者的价格。

      • 我假设由于它们是模板,它们可能不会经常更改。如果是这样,平面文件可能是更好的选择。任何需要大量写入的事情都应该在数据库中完成。

      • 读取平面文件应该比从数据库中读取数据要快。

      • 将它们放在数据库中通常会使多人编辑更容易。

      您可能会考虑在读取模板后使用 memcache 来存储模板,因为从内存中读取总是比从 db 或平面文件中读取更快。

      【讨论】:

        【解决方案3】:

        这真的不足以让你担心。您正在使用哪种音量?您每天的页面浏览量会超过一百万吗?如果不是,我会说选择最容易编码和维护的那个,不要担心替代方案的费用,直到它成为问题。

        具体来说,如果您的模板当前是文件形式,我会将它们留在那里,如果它们当前是数据库形式,我会将它们留在那里。

        【讨论】:

        • 托比,我认为从数据库到文件或其他方式并不是什么大问题,因为你只做了一次,同意你知道的那个!
        猜你喜欢
        • 2023-03-17
        • 2020-09-28
        • 2019-09-18
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多