簡體   English   中英

MongoDB復合索引完全匹配的長文本

[英]MongoDB compound indexing long text on exact match

我有一個看起來像這樣的模型:

{
  _id: '...',
  voice: '<dialect code>', // examples: 'en-US', 'en-GB', 'es', 'de', ...
  text: '<plaintext up to 200 characters>',
  ... // other non-unique values
}

voicetext的組合應該是唯一的值。 我目前正在精確匹配上對這兩個值進行查找,而不是進行文本搜索。 在貓鼬中,示例查詢如下:

SoundRequest.findOne({ voice: 'en-US', text: 'Hello, world' });

此查詢當前需要花費幾秒鍾,而在高負載下且沒有索引,我對提高此處的性能非常感興趣。

如何最好地在此集合上添加索引? 我試圖做一個復合索引,但是卻收到一個錯誤WiredTigerIndex::insert: key too large to index 我認為這是因為某些條目當前最多使用200個字符,並且大於MongoDB的索引鍵長度限制。

對我來說最好的選擇是什么? 我知道以下可能性:

  1. 設置failIndexKeyTooLong: false
  2. 僅對text使用哈希索引
  3. 進行全文索引,盡管只需要查找完全匹配項
  4. 僅在voice上添加索引(這還能提高性能嗎?)
  5. 我自己做哈希嗎? (哎喲)

什么能給我最好的表現? 這些選項中的任何一個都會提高性能嗎?

我目前坐擁150萬條記錄,並且數據庫性能隨着時間的推移而變得越來越差,並且大小可能每月增加約100萬條記錄。

感謝@dnickless,我做了一些自己的調查。

我嘗試的第一件事是在text字段上執行哈希索引。 在我的本地機器上,用1.5M的記錄,平均查找了追加指數前600毫秒,而0毫秒之后。

這對我和我現在已經在生產服務器上實現的一個問題都已經足夠好了。 我還看到了生產中同樣的性能改進。

也許仍然有一個更好的答案,但這已經足夠了。

暫無
暫無

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

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