1

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

4

6 回答 6

3

问问自己:什么数据库?它是一个以某种方式在某处存储数据并让您再次检索数据的程序。数据库以某种方式将这些数据存储在文件中以及在幕后某处。MySQL 通常作为守护进程运行。你联系那个守护进程并要求它提供数据。数据的来源完全取决于 MySQL。很多时候,它会从 RAM 中检索这些数据,这比打开文件并从那里读取要便宜得多如果数据没有碰巧已经在 RAM 中,那么它将从文件中检索它。

所以,你的问题被误导了。MySQL确实在某些时候从文件中获取数据。不过,这不一定“便宜得多”。从将数据保存在 RAM 中的数据库中获取它可能会或可能不会更便宜。

于 2012-09-18T14:19:48.750 回答
1

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

于 2012-09-18T14:19:21.490 回答
1

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

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

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

于 2012-09-18T14:19:53.067 回答
0

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

于 2012-09-18T14:18:29.870 回答
0

如果您使用 MySql 作为文档存储,而不是作为关系数据库,那么如果写为 'file_get_contents("123.data")' ,那么“从 id=123 的事物中选择 *”可能会更快

如果您使用 MySql 作为数据库,那么 'select * from thing where name like "%doe%"' 将变成 '打开每个文件,检查名称字段,如果匹配将其添加到结果,下一个文件',除非你有少量数据会慢得多。此外,当您在 php 中编写关系数据库时,任何类型的类似联接的操作都会变得令人头疼。

于 2012-09-18T14:22:57.747 回答
0

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

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

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

于 2012-09-18T17:05:20.427 回答