关于mongodb的片键问题

sc86272816 2013-07-23 03:19:04
我现在已经做了4个shard,现在我有一个需要存储的数据对象,比较复杂,里面有list包含list那种。

我现在如果要设置片键,那么是不是可以直接

1: db.runCommand({enablesharding:'dbname'})

2; db.runCommand({shardcollection:'dbname.avmodel',key:{flightNo:1}})

解释一下:dbname数据库名,avmodel是collection名。而flightNo是我要存的对象里list下面list中的一个字段。。。。

这样虽然都一切正常,但是在插入数据后发现,数据库中没有数据。这事第一个问题。

于是,我删除所有数据库重来,不分配片键。在这种情况下,所有的数据只放在了其中的一个shard上,并且速度很慢。请问,是不是不设置片键,这数据不会主动分片存储在我的4个shard上?
...全文
576 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuiliQin 2013-07-29
  • 打赏
  • 举报
回复
在分片集群里,如果数据库已经用sh.enableSharding("dbname")来启用分片的功能,但collection没有设置片键,那么这个集合所有的数据都只存放到一个叫做主分片(primary shard)的分片里,是不会自动分散到各个分片中的。我们可以用sh.status()来查看这个数据库的主分片。 比如下面的例子里test数据库启用了分片功能,sh.status()结果里的"primary" : "shard0000" 表明这个数据库的主分片是"shard0000"。
mongos> sh.enableSharding("test")
{ "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
	{  "_id" : "shard0000",  "host" : "localhost:40000" }
	{  "_id" : "shard0001",  "host" : "localhost:40001" }
  databases:
	{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
	{  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }

sc86272816 2013-07-29
  • 打赏
  • 举报
回复
引用 2 楼 u011235983 的回复:
在分片集群里,如果数据库已经用sh.enableSharding("dbname")来启用分片的功能,但collection没有设置片键,那么这个集合所有的数据都只存放到一个叫做主分片(primary shard)的分片里,是不会自动分散到各个分片中的。我们可以用sh.status()来查看这个数据库的主分片。 比如下面的例子里test数据库启用了分片功能,sh.status()结果里的"primary" : "shard0000" 表明这个数据库的主分片是"shard0000"。
mongos> sh.enableSharding("test")
{ "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
	{  "_id" : "shard0000",  "host" : "localhost:40000" }
	{  "_id" : "shard0001",  "host" : "localhost:40001" }
  databases:
	{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
	{  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }

虽然之前就想明白了,不过还是谢谢你
sc86272816 2013-07-24
  • 打赏
  • 举报
回复
回去后好好想了想,突然明白了。说一下给后来人听 因为我的结构是里面直接一个list和一个对象,这样做片键因该是不行的,因为list是多个 本身mongodb就是要依据片键分配存储的范围,多个list就导致无法做,所以只有在最外层提供 片键。 至于不分配片键是否不会主动分片存储,我试了100W条数据存储,事实是如此,但是也可能是我的 配置有问题吧。 存储效率,10W条的时候1秒5000条,100W的时候1秒3000条

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧