2014-02-11 25 views
0

我将把我的500万行数据表从postgresql移动到MongoDB中的分片数据集中。 我正在选择正确的分片键。MongoDB:使用模数来计算分片密钥

表文章(id,users_id,标题,内容)。每篇文章都属于指定用户。用户有100到100万个帖子。

是否有可能将分片密钥设置为来自users_id的模(例如users_id%128)?我通过WHERE users_id查询数据库。

可能吗?这是个好主意吗?我问,因为当我没有发现任何关于在shadring键中使用模块。

+0

根据您的描述,用户可以有100万个帖子。你的意思是可能有100万份文件共享相同的users_id吗?如果是这样,{users_id}上的分片键的基数较低,这意味着可能有很多文档共享相同的分片键值,并且无法分割。您可以考虑在像{users_id,_id}这样的复合索引上分割集合。有关选择分片键的更多详细信息,请参阅http://docs.mongodb.org/manual/tutorial/choose-a-shard-key/。 –

回答

1

你可能希望你的分片密钥是{users_id: 'hashed'},这样MongoDB会照顾你的发行版。在这里阅读更多:http://docs.mongodb.org/manual/tutorial/shard-collection-with-a-hashed-shard-key/

+0

Thx为那advic。我不明白一件事。为什么散列共享密钥{users_id:'hashed'}会比普通共享密钥{users_id:1}更好? –

+1

它确保您获得更均匀(随机)的分布,如果您不需要对'users_id'进行任何范围查询 – leif