[英]Best way to store unchanging data
當我處理我的游戲時,我一直在使用MySQL數據庫。
但是最近我在Memcache中放了很多SELECT
結果,因為它們不太可能改變。
這讓我想知道,僅僅擁有一個定義數據數組的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"
)
);
陣列test.php的
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
include( "array-inc.php" );
$retrieve = $data[2];
}
$finish = microtime( TRUE );
print $finish - $start;
CSV測試
以下是CSV測試的腳本:
values.csv:
key,value
something,something else
something,something else
something,something else
something,something else
something,something else
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;
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;
這些中的每一個都設置為從存儲的數據訪問一個元素,並循環過程10,000次,以便可以更准確地測量時間。 結果如下:
我運行了三次這些測試,並收到以下值:
似乎CSV是明顯的輸家,但Array和MySQL非常接近於Array可能在性能方面略微領先。 您可以隨意調整上面的代碼,以提供更符合您環境的結果。
您的問題的答案是特定問題。 這是性能,內存和可維護性之間的權衡。 即使您想為候選解決方案命名缺點和專業人員,您也需要假設一些參數。 以下是影響您將做出的決定的參數:
數據大小:您擁有的數據總大小是多少。 即您的數據庫文件大小。
請求加載數據所需的平均內存大小:考慮上面提到的參數和平均並發請求數,需要多少內存。
每個請求所需的總數據的平均比率:每次加載數據時,您將使用多少數據以及選擇這部分數據的容易程度。
從總集中提取數據的目標部分需要多少(CPU)時間:從簡單的PHP數組到MySQL SELECT
查詢,它可以有很大的不同。
了解這些參數后,您可以詢問一個解決方案是更好還是另一個解決方案。 無論如何,您的解決方案將是以下之一:
XML
, INI
, CSV
, JSON
等)。 MySQL
)。 SQLite
)。 memcached
,或者PHP
的共享內存 )。 我知道我沒有回答你的問題,但那是因為除非你指定上述參數,否則不可能回答它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.