2010-05-19 35 views
3

假設您有一臺遊戲服務器創建遊戲者操作的文本日誌文件,並且您不時需要在這些日誌文件中查找某些內容(如調查騙局或丟失項目)。例如,您有100個文件,每個文件的大小在20MB到50MB之間 - 您如何快速搜索它們?在大文本日誌文件中搜索

我已經嘗試做的是創建多個線程,每個線程將自己的文件映射到內存(如果它不超過500MB的內存不應該是內存問題)在這裏執行搜索,結果是東西每堆1秒:

文件:a26.log - 閱讀:0.891,行:625282,火柴:78848

有沒有更好的辦法那怎麼辦? - 因爲在我看來有點慢。 謝謝。

(Java是用於這種情況下)

+0

快速搜索通常使用數據庫來實現 – 2010-05-19 11:35:28

+0

這聽起來不太慢,如果你只是偶爾做。將日誌文件放置在多個磁盤或機器中可能會有所幫助,因爲I/O似乎是此處的瓶頸。 – 2010-05-19 12:51:46

回答

0

當然有更好的辦法:搜索之前,你的索引內容。您索引的方式取決於您想要如何搜索日誌,但通常情況下,使用Lucene(或Solr,如果日誌條目可以輕鬆地重構爲xml文檔)可能會很好。

上面提到的性能和資源使用優化量可以爲您提供比臨時解決方案更好的性能。

這是假設你多次搜索每個文件。如果情況並非如此,那麼您不妨將這些文件完成。

+0

(對不起......我不小心編輯了錯誤的答案,還原了。) – 2010-05-19 12:48:01

0

對於臨時搜索大型文本文件,我會使用UNIX grepfgrepegrep實用程序。他們已經有很長一段時間了,並且有很多人爲了讓他們快速工作而受益。另一方面,搜索文本文件(以前沒有編入索引)的最終瓶頸將是應用程序和操作系統將數據從光盤文件移動到內存中的速度。你似乎在管理每秒20MB或更多,這似乎相當快...我也是。

1

您可以使用Unix命令組合與找到grep

0

我應該提到,在第一篇文章中,遊戲服務器是爲Win64x編寫的 - 我想知道它是否在像grep for Windows和unix一樣的性能級別上?