通過哈希或按位運算符或其他算法避免在僅檢查以前出現的字符串或值時使用數據庫,有沒有辦法? 假設,沒有辦法存儲以前出現的字符串的整個歷史,只能存儲很少的信息。檢查現有值時避免使用數據庫
-2
A
回答
0
您可能感興趣的布盧姆過濾器。他們不會讓你權威地說,「是的,這個價值是在利益集合中」,但他們確實讓你說「是的,這個價值是可能是在集合」vs.「不,這個價值肯定是不是中的集合「。對於很多情況,這足夠有用。
它的工作方式是:
- 創建布爾值的陣列(即比特)。你能夠承受的數量越多,效果越好。
- 您創建了一堆不同的散列函數,每個散列函數獲取一個輸入字符串並將其映射到數組的一個元素。你希望這些哈希函數是獨立的,這樣即使一個哈希函數將兩個字符串映射到同一個元素,一個不同的哈希函數也很可能將它們映射到不同的元素。
- 要記錄一個字符串是否在集合中,您將其中的每個散列函數應用於其中,然後—向您提供數組—中的一組元素,並將所有映射元素設置爲TRUE。
- 要檢查一個字符串是否(可能)在該集合中,除了現在只檢查映射元素以查看它們是否爲TRUE之外,您可以做同樣的事情。如果它們都是TRUE,那麼該字符串可能在集合中;否則,它絕對不是。
如果你有興趣在這種方法中,看到https://en.wikipedia.org/wiki/Bloom_filter進行詳細的分析,可以幫助你調整適當過濾(選擇正確的數組大小和散列函數的數量),以獲得有用的概率。
+0
布盧姆看起來很有前途,謝謝指出! –
+0
@MarkB:不客氣! – ruakh
相關問題
- 1. 檢查數據庫中的用戶名,避免重複
- 2. 如何在使用powershell腳本查詢數據庫時避免int值輸出?
- 3. 使用JPA時避免來自數據庫的陳舊數據?
- 4. 使用rspec時避免從數據庫中刪除數據
- 5. Firebase數據庫 - 檢查現有用戶
- 6. 查詢數據庫時如何避免數據緩存?
- 7. 如何避免從數據庫檢索重複值?
- 8. 避免空檢查
- 9. 如何避免數據庫
- 10. 避免數據庫插入
- 11. 使用ExecuteScalar從數據庫讀取MAX值並避免爲空
- 12. Rails - 如何在執行檢測方法時避免使用數據庫?
- 13. 使用PHP/PDO避免鎖定的SQLite數據庫超時
- 14. 如何避免從Django的數據庫檢索時重複的值
- 15. 更改數據庫方案,以避免有多個數據庫
- 16. 使用外鍵檢查現有數據
- 17. 使用jquery和servlet檢查數據庫中的現有用戶
- 18. 製作庫時應避免使用MACRO
- 19. 避免使用lambdas進行空值檢查
- 20. 如何使用phonegap從現有數據庫中檢索值android
- 21. 檢查數據庫值,當有用戶使用會話
- 22. 避免NullPointerException異常檢查
- 23. 檢查空數據庫值
- 24. 檢查數據庫空值
- 25. 如何檢查數據庫中的現有值並更改它?
- 26. 檢查參數,以避免try..catch塊(?)
- 27. 避免數據值賦值循環
- 28. 避免在數據表中呈現「表中沒有數據」
- 29. 使用Mockito時避免未經檢查的警告
- 30. Java:避免檢查嵌套類中的空值(深空檢查)
你想解決什麼問題? –
您正在查看的字符串的數量是多少? – vinit
您正在查看的字符串的數量是多少? - 一天30-40天不斷增長。它們實際上是使用GUID和時間戳創建的文件名,所以它們相互獨立,但其任務是過濾掉之前已經出現的確切文件名並通過新文件名。 –