我們有一個數據庫,我們希望用Sphinx搜索引擎進行索引。問題是Sphinx需要每個文檔的整數ID,但是我們的數據庫有GUID(實際上是隨機的GUID類型的字符串)作爲主鍵。我可以在飛行中生成合成ID as described in this recipe,但僅適用於完整索引。如果我想要增量索引或運行時索引,該怎麼辦?是否有任何最佳實踐來處理使用Sphinx的GUID,它們可以處理增量索引和運行時索引?有問題的數據庫會很大,所以我不想經常重新索引它們。獅身人面像和GUID
1
A
回答
9
實時索引:您可以將非數字GUID轉換爲一個數值(可以使用CRC32或MD5澆鑄爲數字)這樣的:
mysql> select conv(mid(md5('abc'), 1, 16), 16, 10);
+--------------------------------------+
| conv(mid(md5('abc'), 1, 16), 16, 10) |
+--------------------------------------+
| 10376663631224000432 |
+--------------------------------------+
1 row in set (0.00 sec)
測試或谷歌圖什麼算法會減少碰撞。
一旦你有數字標識,你可以將你的文檔插入到Sphinx RT索引中。
增量索引:您可以使用上述相同的方法將GUID轉換爲數字,但您必須記住索引的主要部分完成構建增量的某處。如果表中有一些「更新」或「插入」字段,可以輕鬆完成。 sql_query_range將會像「select ... where updated>(從sphinx_helper選擇last_updated)」一樣。在這種情況下,你不能基於ID,因爲它們不是順序的。
我測試的MD5算法中的一半上11.8M不同的結構域:
mysql> update domain_tmp set hash = conv(mid(md5(domain), 1, 16), 16, 10);
Query OK, 5901483 rows affected (1 min 59.03 sec)
Rows matched: 11800403 Changed: 5901483 Warnings: 0
mysql> select count(*) from domain_tmp;
+----------+
| count(*) |
+----------+
| 11800403 |
+----------+
1 row in set (16.30 sec)
mysql> select count(distinct hash) from domain_tmp;
+----------------------+
| count(distinct hash) |
+----------------------+
| 11800403 |
+----------------------+
1 row in set (1 min 5.51 sec)
即沒有衝突發生。所以如果你的數據集中沒有更多的文檔,應該可以使用md5的一半。
相關問題
- 1. 思維獅身人面像找不到獅身人面像
- 2. 獅身人面像查詢
- 3. 加速獅身人面像?
- 4. 獅身人面像GROUP BY
- 5. 獅身人面像SPH_SORT_EXTENDED
- 6. 獅身人面像LineUnavailableException
- 7. 獅身人面像查詢
- 8. 獅身人面像SetSortMode EXPR
- 9. MathJax在獅身人面像
- 10. 獅身人面像文檔
- 11. 獅身人面像變量
- 12. 獅身人面像.InternalConfigurationException
- 13. 獅身人面像,打造
- 14. 找獅身人面像
- 15. 與獅身人面像
- 16. 在獅身人面像
- 17. 獅身人面像「字」
- 18. 如何獅身人面像
- 19. 獅身人面像搜索
- 20. 獅身人面像 「sphinxcontrib.httpdomain」 包
- 21. 獅身人面像和大數據
- 22. 獅身人面像和用戶排名
- 23. 獅身人面像和過濾sql_attr_str2ordinal
- 24. 使用Elasticsearch和獅身人面像
- 25. 獅身人面像和字形
- 26. 獅身人面像和朋友搜索
- 27. 軌has_scope和獅身人面像搜索
- 28. 獅身人面像 - 結合automodule和autoclass
- 29. 獅身人面像和主鍵列
- 30. 獅身人面像搜索和Laravel
我無法真正改變所有的表結構(數據庫有50多個表結構由ORM類系統生成)來生成新的ID。我可以使用md5方法......但是我很擔心碰撞。 – StasM 2011-02-10 20:29:22