2012-09-30 56 views
1

我正試圖在數據庫中存儲至少500,000個小「文件」(偶爾會有3 KB的平均大小高達8〜10 MB)。這是爲了從文件系統中刪除它們並加快搜索/用戶操作。在MySQL中存儲和搜索文件

  • 元數據(基本上文件名,日期時間創建的,日期時間改性)
  • 的文件內容

在數據庫(MySQL的)存儲它們甲LONGBLOB一直很好。數據庫存儲這些文件並且搜索元數據(字符串,日期時間,日期時間)也與相關索引一起快速。

不幸的是,任何試圖在LONGBLOBs中搜索的嘗試都很慢。在LONGBLOBs在這裏是數據的外觀:

  • 80%爲 「文本文件」(如XML),並在100 KB
  • 15%爲 「文本文件」,但超過100 KB(最多8個〜10 MB)
  • 5%或更少是二進制文件(可能在「文本」容器中損壞)。

分類會將此數據作爲文本或未知的,然後將其放置在一個單獨的LONGTEXT表做操作,如LIKE「%X%」時,提供性能改進(相對於LONGBLOB)?

是否有任何其他技術可以通過BLOB搜索來提高性能(非常「grep」風格)?搜索通常是BLOB中保存的較短的數據序列,並且很少有搜索會重複(但搜索有點可預測,某些數據比其他數據更有趣)。

回答

1

那麼,你最好做一個全文索引(它的數據量會很大),並做一個MATCH AGAINST查詢以便有效搜索。 LIKE對於大量文本的處理速度非常慢,這是非常瞭解並且應該避免的。

http://dev.mysql.com/doc/refman/5.5/en//fulltext-search.html

你也可以讓他們在FS和建立你自己,你從你的服務器端語言中調用命令行工具,真正做到「GREP式」搜索,返回的那些文件的路徑列表這符合你的「查詢」,但我不確定這是否有效。

相關問題