读取文件系统或 运行 数据库查询
Reading a file system or run a database's query
我搜索了这个主题(哪个更快的文件系统或数据库),但我总是得到相同的答案:使用文件系统作为数据存储。
但是,我要问的是,当您单击指向 PHP 文件的 link 包含 Include(file.html) 或包含 mySQL query (Select content From table Where..).
PS:来自“file.html”和查询
的内容
谢谢
”是一样的。
数据库也从他存储数据的文件系统中读取数据。
所以会比直接读的慢。
当许多人尝试访问数据并写入数据时,数据库会更快。
读取静态文件几乎总是比 运行 查询 returns 相同信息的 SQL 快。
开发人员使用数据库的原因是为了支持非静态数据。也就是说,数据以复杂的方式变化。有时只是个别记录发生变化。
在许多网站中,如果您每次尝试替换整个静态 html 文件中的某项内容发生更改,您会发现您无法以足够快的速度跟上速度的变化。
但给定的网页视图可能不需要 所有 该静态文件中的数据。它只需要一小部分,与正在查看网页的当前用户相关。或者与最近的变化有关。使用 SQL 读取有限的数据子集比读取巨大的静态文件快得多。
例如:假设您的网站是关于音乐会门票的。它记录了每一场音乐会、每一位参加者和每一笔门票销售。是否应该将其放入一个巨大的静态文件中以包含在每个 PHP 请求中?如果用户只想查看一场即将举行的音乐会的购票信息怎么办?阅读包含即将举行的音乐会以及过去数百场音乐会和数百万张门票销售记录的整个文件将是一种浪费。
我不同意。有时候。
性能差异不足以担心。但这里有一些讨论...
真正的指标是你触摸磁盘的次数。
这是“数据库”获胜的比较:
要获取整个文件,可以将其视为 2 个步骤:一个是触摸磁盘以在目录中查找文件并“打开”它,然后另一个是从文件中获取数据。
要从已打开的数据库中获取一些数据块,不需要第一步。第二步可能仍然存在——从数据库结构中的某处获取数据。
这是“文件”获胜的情况:
数据被分成多行和可能的多个表。取货需要收集东西并将它们放在一起。可能需要多次磁盘命中,甚至数百万次磁盘命中。因此,数据库速度较慢。
我会争辩说,一个常见的案例有不同的决定理由:您想在网页上显示 <img ...>
。
至少有 3 种方法可以将图像存储在数据库中;您需要选择一种方式,然后为其编写代码。这是程序员的开销。
让 Web 服务器通过 <img src=foo/bar/xyz.jpg>
简单地传送图像需要几乎为零的程序员工作。而且它 可能 实际上涉及更少的磁盘命中。这是因为 大 BLOB 在数据库结构中往往有些分散。是的,文件系统也可能散布 jpg。
哦,还有一点。如果您在谈论 web 东西,那么 Web 服务器的“无状态”意味着(通常)数据库 未打开 。这会增加一小部分延迟。如果您将数据库用于其他用途,那么这可能无关紧要。
我搜索了这个主题(哪个更快的文件系统或数据库),但我总是得到相同的答案:使用文件系统作为数据存储。
但是,我要问的是,当您单击指向 PHP 文件的 link 包含 Include(file.html) 或包含 mySQL query (Select content From table Where..).
PS:来自“file.html”和查询
的内容谢谢
”是一样的。
数据库也从他存储数据的文件系统中读取数据。
所以会比直接读的慢。
当许多人尝试访问数据并写入数据时,数据库会更快。
读取静态文件几乎总是比 运行 查询 returns 相同信息的 SQL 快。
开发人员使用数据库的原因是为了支持非静态数据。也就是说,数据以复杂的方式变化。有时只是个别记录发生变化。
在许多网站中,如果您每次尝试替换整个静态 html 文件中的某项内容发生更改,您会发现您无法以足够快的速度跟上速度的变化。
但给定的网页视图可能不需要 所有 该静态文件中的数据。它只需要一小部分,与正在查看网页的当前用户相关。或者与最近的变化有关。使用 SQL 读取有限的数据子集比读取巨大的静态文件快得多。
例如:假设您的网站是关于音乐会门票的。它记录了每一场音乐会、每一位参加者和每一笔门票销售。是否应该将其放入一个巨大的静态文件中以包含在每个 PHP 请求中?如果用户只想查看一场即将举行的音乐会的购票信息怎么办?阅读包含即将举行的音乐会以及过去数百场音乐会和数百万张门票销售记录的整个文件将是一种浪费。
我不同意。有时候。
性能差异不足以担心。但这里有一些讨论...
真正的指标是你触摸磁盘的次数。
这是“数据库”获胜的比较:
要获取整个文件,可以将其视为 2 个步骤:一个是触摸磁盘以在目录中查找文件并“打开”它,然后另一个是从文件中获取数据。
要从已打开的数据库中获取一些数据块,不需要第一步。第二步可能仍然存在——从数据库结构中的某处获取数据。
这是“文件”获胜的情况:
数据被分成多行和可能的多个表。取货需要收集东西并将它们放在一起。可能需要多次磁盘命中,甚至数百万次磁盘命中。因此,数据库速度较慢。
我会争辩说,一个常见的案例有不同的决定理由:您想在网页上显示 <img ...>
。
至少有 3 种方法可以将图像存储在数据库中;您需要选择一种方式,然后为其编写代码。这是程序员的开销。
让 Web 服务器通过 <img src=foo/bar/xyz.jpg>
简单地传送图像需要几乎为零的程序员工作。而且它 可能 实际上涉及更少的磁盘命中。这是因为 大 BLOB 在数据库结构中往往有些分散。是的,文件系统也可能散布 jpg。
哦,还有一点。如果您在谈论 web 东西,那么 Web 服务器的“无状态”意味着(通常)数据库 未打开 。这会增加一小部分延迟。如果您将数据库用于其他用途,那么这可能无关紧要。