如果我理解正确,从文件而不是数据库中检索数据要便宜得多。那么,为什么当我们使用SELECT
时,MySQL不会从每次使用UPDATE
,INSERT
,DELETE
等时创建或更新的文件中检索数据?有原因是安全问题?
答案 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查询缓存,如果你有一个体面的写重应用程序,这不是一个好主意。此外,由于等待查询缓存互斥锁而导致对应用程序的写入过多,查询缓存可能会停止查询。