2016-12-13 44 views
0

我目前正在研究使用sha1哈希,它將以二進制形式存儲在MS Sql Server中(20)。查看Solr 4.x中當前可用的數據類型,似乎足夠大的唯一一個是二進制。但是,我不確定是否使用二進制作爲唯一鍵是一個好主意。此外,在不久的將來,我們將從Solr 4.x獨立遷移到Solr 6.x雲。Solr 4.x:我應該使用二進制作爲唯一鍵嗎?

回答

1

根據最佳實踐,唯一鍵應該是一個簡短的唯一字符串(例如,請參閱Java UUID)。 使用二進制作爲唯一鍵不是一個好主意,也不建議。 一個可行的解決問題的方法,雖然可以this page從Solr的文檔中找到:

加密哈希

的加密哈希算法可以被認爲是從輸入數據創建N個很 隨機比特。 MD5算法創建128位。 這意味着2個輸入數據集有機會在創建相同MD5的 的2^128中有1個。這有一個標準表達式,即32個十進制字符。 RFC-1321。幾種不同語言的MD5摘要算法 不遵循此標準。標準UUID始終包含創建UUID的時間,其中 排除了上述某些使用情況。您可以作弊並忽略時鐘要求。最好使用UUID文本格式: 550e8400-e29b-41d4-a716-446655440000而不是 550e8400e29b41d4a716446655440000。 (您將閱讀許多這些密鑰。) 使用加密生成的唯一密鑰的一個優點是,您可以通過通配符 選擇一個隨機的文檔子集。如果UUID數據爲 作爲字符串保存爲32位字符的RFC格式 'd3adbe3fdeadb3e4deadbee4deadb3ef',則查詢「id:a *」將選擇整個文檔集合的隨機1/16的 。 「id:aa *」會非常隨機地選擇 文檔集的1/256。統計分析和數據提取項目可以用這個來選擇小的子集而不是 遍歷整個索引。

對於任何版本的Solr,相同的方法都可以很好地工作。

+0

我們正在使用MS SQL Server和Solr 4.x(目前是獨立的,但移動到SolrCloud)。我使用sha1哈希算法來避免重複(所以使用solr或sql來生成uuid ...雖然我不知道我可以刪除Java中的時鐘組件,它可能產生相同的哈希給定相同的輸入字符串(?)我需要的是: 1. Java比較solr字段和MS sql列 2. Solr比較solr字段和數據導入上的MS sql列 不幸的是MS SQL hashbytes()返回varbinary() 20) – BillS

+0

我最終做的是使用apache-codec DigestUtils.shaHex(「some string」)來創建一個唯一的十六進制字符串鍵,它是sql中的主鍵和solr中的唯一鍵,我對它的想法越多,我覺得用二進制作爲solr的一個關鍵是不舒服的,謝謝你的幫助 – BillS

相關問題