2010-12-23 60 views
0

我有一個包含10,000多個不同文件的數據庫,我需要每5秒從數據庫中隨機選取4個。10,000多個不同的文件,我需要每5秒抓住4個文件?

我想知道你對建築師有什麼建議。我正在考慮使用平面文件或可能是一個SQLite?這樣做通過MySQL會非常慢?

+3

爲什麼你認爲MySQL會很慢? 10K記錄表在MySQL中被認爲是「小」 – 2010-12-23 16:24:37

+0

你是否想要改變你說你已擁有的數據庫? – 2010-12-23 16:25:35

+0

在MySql上每5秒抓取4個隨機表並不完全是我想在我的相當便宜的mysql服務器上執行的操作。所以我正在尋找替代品。 – Steven 2010-12-23 16:26:22

回答

2

只是一個廣義方法 運行的selectRandom()過程的每5秒將是太亂了。而是每120秒運行一次selectRandomGroups()

selectRandomGroups()在每次執行中執行selectRandom() 120/5次。並將結果組存儲在某個存儲(緩存)中。

下一次使用grabRandomGroup()每5秒鐘從緩存中檢索最後一組並將其刪除。

2

只需將文件放入具有確定性名稱(0.dat,1.dat等)的目錄中並直接讀取它們即可。

文件系統中的B樹和緩存將負責其餘部分。這完全是它設計的目的。

0

來自非常沉重的關係數據庫背景,我的第一反應是不推薦數據庫系統的「NoSQL」文檔類型。但在這種情況下,聽起來基本上你會需要一個大的散列表。我會看看像MongoDB或CouchDB。你可以在這裏看到差異(http://www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid)。

您可能會看到的另一件事是使用Amazon S3或類似的東西將此信息存儲在「雲」中,如果您認爲需要儘快擴展並且沒有內部容量。

否則,文件系統的想法如上所述也將工作

0

爲什麼不直接存儲指向圖像的鏈接而不是整個圖像文件?每5秒返回4個文件名的查詢不應該在mysql服務器上放置太多的負載。當然比安裝和運行另一個DBMS大概在同一臺服務器上要少。

假設這是某種類型的網站,您可以通過使用JavaScript生成隨機文件名然後根據需要對圖像執行任何操作,將其卸載到用戶機器上。

0

我想你的意見是你的文件存儲在同一張表中。爲什麼這樣的事情太慢?

SELECT * FROM files WHERE approved = 1 AND type = image ORDER BY RAND() LIMIT 4 

它爲什麼會更快運行一個腳本,每24小時即取69120頁的文件,並將其寫入到一個目錄或什麼?但是,當然,你可以這樣做。只需更改上述查詢中的限制即可。

相關問題