我在mongo上有一个db("mydb"),它包含2个集合(c1和c2).c1已经是哈希分片.我想以同样的方式对第二个集合进行分片.我收到以下错误:
use mydb
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
{
"proposedKey" : {
"LOG_DATE" : "hashed"
},
"curIndexes" : [
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.c1",
"name" : "_id_"
}
],
"ok" : 0,
"errmsg" : "please create an index that starts with the shard key before sharding."
Run Code Online (Sandbox Code Playgroud)
所以我做了
db.c2.ensureIndex({LOG_DATE: 1})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
Run Code Online (Sandbox Code Playgroud)
相同的错误,但它显示新的索引.
"proposedKey" : {
"LOG_DATE" : "hashed"
},
"curIndexes" : [
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.c2",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"LOG_DATE" : 1
},
"ns" : "mydb.c2",
"name" : "LOG_DATE_1"
}
],
"ok" : 0,
"errmsg" : "please create an index that starts with the shard key before sharding."
Run Code Online (Sandbox Code Playgroud)
只是为了确定,我跑:
db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "mydb.c1", "name" : "_id_" }
{ "v" : 1, "key" : { "timestamp" : "hashed" }, "ns" : "mydb.c1", "name" : "timestamp_hashed" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns": "mydb.c2", "name" : "_id_" }
{ "v" : 1, "key" : { "LOG_DATE" : 1 }, "ns" : "mydb.c2", "name" : "LOG_DATE_1" }
Run Code Online (Sandbox Code Playgroud)
我在管理员上再次尝试相同的命令,它失败并出现相同的错误.
然后我试着没有"哈希"的管理员,它工作.
db.runCommand({shardCollection: "mydb.c2", key: {"LOG_DATE": 1}})
Run Code Online (Sandbox Code Playgroud)
问题:现在我的集合在没有哈希的东西上被分片,我无法改变它(错误:"已经分片")
提前致谢
托马斯
att*_*ish 10
最初的问题是你没有散列索引,你建议用于分片,这是错误信息.在第一条错误消息之后,当您创建索引时
{
"v" : 1,
"key" : {
"LOG_DATE" : 1
},
"ns" : "mydb.c2",
"name" : "LOG_DATE_1"
}
Run Code Online (Sandbox Code Playgroud)
你仍然只有一个普通的索引,而不是一个哈希的索引.如果你这样做:
db.c2.ensureIndex({LOG_DATE: "hashed"})
Run Code Online (Sandbox Code Playgroud)
而不是这个:
db.c2.ensureIndex({LOG_DATE: 1})
Run Code Online (Sandbox Code Playgroud)
比将是一个哈希指数.正如您在其他集合上的db.system.indexes.find()输出中所看到的,您有一个时间戳的散列索引,我假设这是该集合的分片键.
因此,如果c2集合中没有数据:
db.c2.drop()
db.createCollection('c2')
db.c2.ensureIndex({LOG_DATE: "hashed"})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
Run Code Online (Sandbox Code Playgroud)
这将正常工作.
归档时间: |
|
查看次数: |
8137 次 |
最近记录: |