Web / db服务器之间的数据传输

时间:2014-05-23 07:35:06

标签: php mysql database data-transfer

我在位于webserver 1的{​​{1}}上有一个 PHP 脚本。我的country A位于DB server

php脚本从数据库服务器查询大型表,对结果进行分组,然后将它们插回到数据库服务器(到另一个表)。这是通过单个查询(INSERT INTO SELECT ...)

完成的

我的问题是,数据是否实际传输在Web / db服务器之间?例如。这是在两台服务器上使用GB的带宽吗?

1 个答案:

答案 0 :(得分:0)

如果您从未处理过来自DB server的任何检索到的数据,则该查询不会将任何数据发送到web server 1。基本上,如果你只运行查询,唯一发送的数据是查询的文本(例如INSERT INTO SELECT...),这可能只是几个字节,然后是响应,这只是一个成功/失败的价值。那就是它。

换句话说,来自SELECT查询的INSERT INTO SELECT部分的数据全部由DB server处理,它从未发送到{{1} }}

即使您在远程数据库上运行webserver 1查询,也无法获得所有结果。你实际上得到了一个资源。此资源是对仍在远程数据库上的一组数据的引用。当您在该资源上执行SELECT之类的操作时,它会获取下一行。此时,数据将被传输。

您可以通过使用fetch_row监视PHP脚本在其执行的各个点上的内存使用情况来测试这一点。尝试:

memory_get_usage

你应该在echo "Memory before query: " . memory_get_usage() . "\n"; $result = $mysqli->query("your select query"); echo "Memory after query: " . memory_get_usage() . "\n"; $data = array(); $i=1; while ($row = $result->fetch_row()) { $data[] = $row; echo "Memory after reading row " . $i++ . ": " . memory_get_usage() . "\n"; } 之后看到使用内存的增长非常小,然后在结果迭代时稳定增加。