簡體   English   中英

在8秒內檢測16 GB筆式驅動器上的內容更改

[英]Detecting content change on a 16 GB pen drive within 8 sec

我必須檢測可播放的媒體(音頻,視頻和圖像)是否已在具有30,000個文件的16GB筆式驅動器上更改,在后續插入的8秒內。 不考慮其他文件,如pdf或純文本; 這是一個媒體播放器軟件。

我試過ls -lmd5但它需要10-11秒。 有沒有人曾經解決過這個問題或者你可以建議的任何策略?

內容可以更改的方案是用戶可以彈出筆式驅動器,向其添加更多歌曲,然后重新插入相同的筆式驅動器。 如果沒有內容更改,那么我可以使用舊數據庫,從而節省播放時間。

我不能依賴時間戳,因為在Windows系統上重命名文件不會改變修改時間。

只需檢查文件大小而不是md5總和。 這應該更快,資源更少。

我假設您在這里散列ls的輸出,以便在重命名,添加,大小更改或時間戳(對於確實很好的系統)上觸發哈希更改,因為我猜測散列16GB分割超過30,000個文件需要超過11秒(雖然大多數建議應該以任何方式工作)

您可能最終必須使用較低級別的API編寫自己的代碼來訪問文件列表。 ls被設計成人類可讀的而不是速度。 您不需要查詢人類可讀的權限,用戶名,組等,並且您將通過將其傳輸到md5來生成內存副本。

您可以嘗試使用find命令,它看起來更快,並且只能指定文件。 如果沒有管道,它仍然不如真正的程序有效。 這個是非遞歸的(但是ls -l也是如此),如果你想要的不僅僅是名字,你還可以指定自定義格式輸出:

find . -maxdepth 1 -type f | md5sum

您也可以嘗試使用MD5的替代哈希。 MD5是一種加密哈希,它的設計是為了抵御故意的惡意沖突,但結果卻比較慢。

MurmurHash3是最快或更新的xxhash之一 但它將取決於數據的硬件和大小(一些散列針對小鍵(例如散列映射)進行了優化)。

你也可以試一試它。 讓一個線程連續讀取驅動器中的文件列表,另一個線程盡可能快地讀取它們。

如果您希望使用標准shell來執行此操作,但無需編寫自己的代碼,那將會非常痛苦。

說了這么多,你的主要瓶頸可能就是閃存的速度。 如果您的CPU缺乏等待I / O,那么世界上所有的技巧都無濟於事。 我不確定這是一個很好的“挑戰”,因為它將取決於驅動器制造商和USB版本(除非已經指定)。 但也許可以做一切可能會刮掉幾秒鍾並帶你進入你的目標。 或者只是獲得更快的USB記憶棒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM