2012-03-04 142 views
0

首先,我打算做的是使用內存來存儲最新的「用戶更新」記錄每個用戶的環形緩衝區的想法。
我是MySQL新手。我如何在內存中創建表格?
在官方網站,據說我們可以在創建表格時設置ENGINE = MEMORY。但文件聲稱,內存中的這些表總是用於讀取,而不是用於寫入。
實施使用MySQL

我根本不知道該怎麼做。

我到這個問題了幾天。我不能在服務器上安裝memcache和任何PHP擴展,因爲我不使用虛擬專用服務器,我可以做的只是在httpdocs文件夾中傳輸腳本和文件...我也嘗試使用平面文件來存儲數據作爲緩衝區/緩存,但是我發現由於拒絕權限,我無法在服務器的文件目錄中寫入/創建文件,並且我不允許更改此權限。
使用MySQL進行緩衝可能是我唯一的選擇。希望有人能給我一些提示。

謝謝。

p.s.我使用運行PHP的Linux Apache服務器,以MySQL作爲數據庫。

+0

你能更好地描述你正在嘗試做什麼嗎? – Brad 2012-03-04 03:14:36

+0

實際上,我正在爲我的iPhone應用程序編寫服務器端腳本,此應用程序定期向Web服務器發送數據。這些數據將存儲在MySQL數據庫中,但我也希望最新的數據,比方說每個用戶的30個數據保存在內存中,以便瀏覽器端以更高的速度訪問最近的用戶數據。 – dannail 2012-03-04 03:19:05

+0

如果你有足夠的用戶需要這個,你將沒有足夠的內存來按照你提出的方式來擴展它。做一個適當的索引,並在普通桌面上執行此操作。 – Brad 2012-03-04 03:40:21

回答

0

ENGINE = MEMORY表可用於讀取或寫入。

要小心的唯一的事情是,在內存表中的所有數據消失在服務器崩潰時,關閉,重啓等。(正如你所期望的在內存中的表。)

+0

您的意思是重新啓動服務器/服務器崩潰將清空內存表,但不刪除它們? – dannail 2012-03-04 03:22:08

+0

@ user988988表架構不會與表本身一起存儲 - 因此表定義將被保留(因爲它不僅存儲在內存中)。 – Amber 2012-03-04 03:23:14

0

你真的應該仔細閱讀關於MySQL的MEMORY引擎。數據存儲在RAM中,因此當服務器斷電或重新啓動時,RAM將被清除,數據將被清除。 MEMORY表應該是MySQL中最快速訪問的表類型,但只能存儲臨時數據,不能保證。

如果我理解正確,你正在試圖從PHP生成的某種數據的靜態緩存,是不是?最簡單的方法是將它們作爲固定文件緩存寫入您的www目錄,無論是HTML還是JS。如果你不能chmod你的目錄是可寫的,那麼將它們存儲在MySQL中應該也可以,但只有在實際上有幫助。

緩存數據的思想是:減少SQL查詢,減少磁盤I/O,減少代碼生成。但是使用MEMORY表會花費太多的內存使用。將它們存儲在一個普通的MyISAM表中應該也可以,並且可以安全地處理大量的後臺工作。

但是,應該考慮兩件事情:1,訪問時緩存是否存在; 2,如果緩存是最新的。

給你的結果某種關鍵應該是一個好主意,所以PHP首先檢查緩存日期,如果不存在,生成緩存,然後顯示或以其他方式直接顯示緩存。