2017-04-17 31 views
0

我正在做一個網站,這個網站有一個100MB的sqlite文件,這個文件不會被更新。如果sqlite文件內容存儲在共享內存中,如何使用php來訪問sqlite?

該DB文件只有一個表,這意味着每個請求將100MB的數據搜索,所以我擔心性能時,許多人認爲的網站

我打算使用內存來加快網站,但我沒有服務器的管理權限(包括mysql),所以我不能安裝像memcached redis這樣的軟件。我需要一個本機/默認解決方案。

所以我選擇共享內存,我寫這個程序來緩存整個sqlite文件在內存中。

但我不知道如何訪問該文件在內存中,因爲PDO只接受字符串DSN

我怎樣才能在內存中訪問數據庫?

$size=filesize ("mydb.sqlite"); 
$data=file_get_contents("mydb.sqlite"); 
$systemid = 12; // System ID for the shared memory segment 
$mode = "c"; // Access mode 
$permissions = 0755; // Permissions for the shared memory segment 
$shmid = shmop_open($systemid, $mode, $permissions, $size); 
shmop_write($shmid, $data, 0); 


// used in other process 
$size = shmop_size($shmid); 
$sqlite_file_data=shmop_read($shmid, 0, $size); 

如果它是不可能的,我會改寫這個程序使用stdClass的存儲整個數據庫, 存儲PHP對象共享內存,我需要將其轉換爲JSON字符串,反序列化在每一個100MB的JSON請求可能會花費很多CPU和時間。 我可以直接將原始對象存儲到內存嗎?

回答

0

由於瑣碎的文件緩存,你的文件已經被緩存在內存中,所以不用擔心。

它總是讓我想知道,爲什麼人們期望「許多人查看網站」給定說,即使沒有數據庫訪問,該網站託管在共享主機上。