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.至此问题解决.

posted @ 2012-11-26 17:22  布雷泽  阅读(8517)  评论(0编辑  收藏  举报