为什么PHP + MySQL默认不使用文件缓存?

时间:2012-09-18 14:15:46

标签: php mysql caching

如果我理解正确,从文件而不是数据库中检索数据要便宜得多。那么,为什么当我们使用SELECT时,MySQL不会从每次使用UPDATEINSERTDELETE等时创建或更新的文件中检索数据?有原因是安全问题?

6 个答案:

答案 0 :(得分:3)

问问自己:数据库是什么?它是一个以某种方式存储数据的程序,并允许您再次检索它。数据库将这些数据存储在文件中,不知何故,在某处。 MySQL通常作为守护进程运行。您联系该守护程序并询问它是否有数据。数据的来源完全取决于MySQL。很多时候它会从RAM中检索这些数据,这比打开文件并从那里读取文件要便宜得多。如果数据没有发生在RAM中,那么然后它将从文件中检索它。

所以,你的问题是错误的。 MySQL 在某些时候从文件中获取数据。那是必然“便宜得多”。从将数据保存在RAM中的数据库中获取它可能会或者可能不会更便宜。

答案 1 :(得分:1)

也许您有兴趣了解有关MySQL查询缓存的更多信息:http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

答案 2 :(得分:1)

MySQL通常默认使用一些缓存方法进行查询(查询缓存)。当然,缓存存储在内存中;)

除了MySQL基本上是从文件中检索数据(取决于你的表引擎,你的整个数据库可能只是一个文件),所以......

来源:http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html

答案 3 :(得分:0)

当然是。但是你应该使用 Memcache APC ,这样你就可以有过期时间。不仅如此,当您在管理面板中更新某些内容时,您可以删除指定的特定密钥,以便在下次加载时刷新该内容(点击数据库并保存到下次更新或过期)

答案 4 :(得分:0)

如果您使用MySql作为文档存储,而不是作为关系数据库,那么如果将'select * from id = 123'的事物更好,那么如果将其写为'file_get_contents( “123.data”)'

如果您使用MySql作为数据库,那么'select * from thing where where name“%doe%”'将成为'打开每个文件,检查名称字段,如果匹配将其添加到结果,下一个文件'哪个除非你有一些微不足道的数据将会慢得多。此外,当您在php中编写关系数据库时,任何类型的类似连接的操作都会变得很麻烦。

答案 5 :(得分:0)

从文件而不是数据库中检索数据并不便宜。数据库中的数据也以优化的方式存储在文件中,因此检索速度要快得多。这里我认为文件和数据源位于同一台机器上。在这两种情况下,检索都是I / O限制的。

如果要正确缓存,则应使用APC或Memcached或两者。 APC可以用作本地缓存(存储应用程序配置,语言常量等),而您可以将memcached用作单独的缓存(用户信息,会话等)。

你也可以使用MySQL查询缓存,如果你有一个体面的写重应用程序,这不是一个好主意。此外,由于等待查询缓存互斥锁而导致对应用程序的写入过多,查询缓存可能会停止查询。