Mongodb分片問題之-please create an index that starts with the shard key before sharding


Mongodb版本2.2.1

場景:

mongo數據庫test分片已經啟用,在新增加一個collection之后,並且該表已經有數據寫入,當對該表啟用分片的時候報錯:please create an index that starts with the shard key before sharding

 

 

大概意思是在啟用分片前需要在分片key上建立索引。我並沒有立刻在分片key上建立索引,因為之前在啟用表分片,在分片key上會自動建立索引,為什么要我手動建立呢?所以先google之看有沒有相關資料,沒想到搜索的結果大失所望,總共才5條結果。2條英文結果,3條日文。第一條好像是mongodb源碼,當時沒注意。沒辦法只能看下根據提示關鍵字搜索下mongodb源碼,在src/mongo/s/commands_admin.cpp文件中544行找到這個錯誤信息

雖然C++在大學時只學了皮毛,看看判斷還是可以的....原來判斷分支是查找是否有可用的索引存在,當無可用的索引,並且表不為空時,就會出現這個錯誤信息。

好了找到根源了,現在解決問題:在分片key上個建立索引

use test
db.ttl.ensureIndex({date:1,node_id:1})

然后對表進行分片

sh.shardCollection('test.ttl',{date:1,node_id:1})

結果顯示:

{ "collectionsharded" : "test.ttl", "ok" : 1 }

OK.至此問題解決.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM