gpt4 book ai didi

mongodb - 无法在 mongodb 上对集合进行分片

转载 作者:IT老高 更新时间:2023-10-28 13:21:21 25 4
gpt4 key购买 nike


我在 mongo 上有一个包含 2 个集合(c1 和 c2)的数据库(“mydb”)。 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."

原来如此

db.c2.ensureIndex({LOG_DATE: 1})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})

同样的错误,但它显示了新的索引。

"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."

为了确定,我跑了:

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" }

我在管理员上再次尝试相同的命令,但失败并出现相同的错误。

然后我在没有“哈希”的情况下尝试了 admin 并且它起作用了。

db.runCommand({shardCollection: "mydb.c2", key: {"LOG_DATE": 1}})

问题:现在我的集合被分片在未散列的东西上,我无法更改它(错误:“已经分片”)

  1. 我做错了什么?
  2. 我该如何解决这个问题?

提前致谢

托马斯

最佳答案

最初的问题是您没有建议用于分片的散列索引,这是错误消息的内容。在第一条错误消息之后,当您创建一个索引时

{
"v" : 1,
"key" : {
"LOG_DATE" : 1
},
"ns" : "mydb.c2",
"name" : "LOG_DATE_1"
}

您仍然只有一个普通索引,而不是散列索引。如果你愿意这样做:

db.c2.ensureIndex({LOG_DATE: "hashed"})

而不是这个:

db.c2.ensureIndex({LOG_DATE: 1})

这将是一个散列索引。正如您在另一个集合上的 db.system.indexes.find() 的输出中看到的那样,您有一个时间戳的哈希索引,我假设这是该集合的分片键。

所以如果你在 c2 集合中没有数据:

db.c2.drop()
db.createCollection('c2')
db.c2.ensureIndex({LOG_DATE: "hashed"})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})

这将正常工作。

关于mongodb - 无法在 mongodb 上对集合进行分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com