当我处理我的游戏时,我一直在使用MySQL数据库.
但是最近我SELECT在Memcache中投入了很多结果,因为它们不太可能改变.
这让我想知道,仅仅拥有一个定义数据数组的PHP文件会不会更好?当然,这意味着我必须加载整个数组只是为了访问一行,但我相信与无需等待MySQL的时间相比,这是微不足道的.
我是否正确思考这条道路?我应该将我不变的游戏数据(例如角色基础统计数据,兼容性图表,项目数据等)移动到PHP文件中吗?或者我应该继续使用MySQL + Memcache?
哪个更好?为什么?
似乎有些基准是有序的.
我整理了一些脚本来测试将数据存储为PHP数组,CSV文件以及通过PDO访问的MySQL数据库.
阵列测试
以下是阵列测试的脚本:
阵列inc.php:
$data = array(
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
)
);
Run Code Online (Sandbox Code Playgroud)
阵列test.php的
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
include( "array-inc.php" );
$retrieve = $data[2];
}
$finish = microtime( TRUE );
print $finish - $start;
Run Code Online (Sandbox Code Playgroud)
CSV测试
以下是CSV测试的脚本:
values.csv:
key,value
something,something else
something,something else
something,something else
something,something else
something,something else
Run Code Online (Sandbox Code Playgroud)
csv.php:
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
$fp = fopen( "values.csv", "r" );
$data = array();
while(( $line = fgetcsv( $fp )) !== FALSE ) {
$data[] = $line;
}
$retrieve = $data[2];
}
$finish = microtime( TRUE );
print $finish - $start;
Run Code Online (Sandbox Code Playgroud)
MySQL测试
这里是MySQL测试的脚本(该表有一个id,key和value列,其中包含与上述两行相同的五行和值):
mysql.php:
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
$query = "SELECT * FROM `values` WHERE id = :id";
$result = $pdo->prepare( $query );
$result->execute( array( ":id" => 2 ));
$retrieve = $result->fetch( PDO::FETCH_ASSOC );
}
$finish = microtime( TRUE );
print $finish - $start;
Run Code Online (Sandbox Code Playgroud)
这些中的每一个都设置为从存储的数据访问一个元素,并循环过程10,000次,以便可以更准确地测量时间.结果如下:
我运行了三次这些测试,并收到以下值:
似乎CSV是明显的输家,但Array和MySQL非常接近于Array可能在性能方面略微领先.您可以随意调整上面的代码,以提供更符合您环境的结果.