Mongodb可伸缩集合

Mongodb可伸缩集合,mongodb,collections,scalability,Mongodb,Collections,Scalability,创建可扩展且具有最佳读取性能的MongDB集合的最佳方法是什么?以下是假设 一个用户每天有100个条目。条目对用户是私有的 我们可能有20万用户。因此,每天几乎有200*200000=2000万条条目 用户喜欢在插入条目后立即查看条目 用户喜欢搜索自己的条目,即使数据已经有3个月了。3个月内,2000万*90 =1.8亿个条目 没有更新。仅插入和删除 我们心中的选择 基于用户名的分片。A.在一个碎片中的D等,但仍然很难扩展 为每个用户创建一个集合。我们知道这是一种激进的做法,但为什么不呢。

创建可扩展且具有最佳读取性能的MongDB集合的最佳方法是什么?以下是假设

  • 一个用户每天有100个条目。条目对用户是私有的
  • 我们可能有20万用户。因此,每天几乎有200*200000=2000万条条目
  • 用户喜欢在插入条目后立即查看条目
  • 用户喜欢搜索自己的条目,即使数据已经有3个月了。3个月内,2000万*90 =1.8亿个条目
  • 没有更新。仅插入和删除
我们心中的选择

  • 基于用户名的分片。A.在一个碎片中的D等,但仍然很难扩展
  • 为每个用户创建一个集合。我们知道这是一种激进的做法,但为什么不呢。我们没有跨用户数据进行聚合。MongoDB中收集数量的任何限制
如有任何建议,将不胜感激。
谢谢。

不幸的是,由于您可以拥有的名称空间数量(24000个)太多,每个用户一个集合将不起作用

我认为有几个好的方向可以走。您肯定会希望使用一个均匀分布的分片密钥——用户名就好了。您对其可扩展性有何顾虑


您可能希望签出(生存时间)集合,并让您的应用程序从辅助库读取。这可以通过分配工作负载来加快查询时间。

不幸的是,由于您可以拥有的名称空间数量(24000)太多,每个用户一个集合将无法工作

我认为有几个好的方向可以走。您肯定会希望使用一个均匀分布的分片密钥——用户名就好了。您对其可扩展性有何顾虑


您可能希望签出(生存时间)集合,并让您的应用程序从辅助库读取。这可以通过分配工作负载来加快查询时间。

在MongoDB世界中,没有最好的模式设计。在MongoDB中,模式设计取决于应用程序如何访问数据

以下是为MongoDB设计良好模式所需回答的关键问题:

  • 你有多少数据
  • 您最常见的操作是什么?您主要是插入新数据、更新现有数据还是执行查询
  • 您最常见的问题是什么
  • 你最常见的更新是什么
  • 您希望每秒执行多少I/O操作
在MongoDB中,您有很多选择:可以嵌入数据,可以创建链接关系,可以复制和反规范化数据,也可以使用混合方法

@谢尔曼已经提到了“阅读偏好”,这是一个值得研究的问题,从利用二级考试的角度来说

切分在扩展方面似乎适合您。on-sharding非常广泛,涵盖了体系结构、基础知识、部署、管理和内部(如果您特别感兴趣的话)。我强烈推荐你读它。然而,正如@Shelman所说,您需要明智地选择您的碎片密钥。本主题在StackOverflow和上有广泛介绍

避免使用顺序分片键的原因之一是,它会在插入时创建热点:在任何给定时间,单个分片将承担所有插入负载。您可能需要选择一个复合碎片键。谷歌集团在这方面进行了一些很好的讨论:

如果您选择类似{username:1,timestamp:1}的内容,那么如果需要,用户的数据将被分成许多块,并分布在服务器上

这是文档选择切分键的关键

=============================

下面是一些关于MongoDB模式设计的很好的通用参考资料

MongoDB演示:

以下是一本关于MongoDB模式设计的书,我认为您会发现这本书很有用:

  • (MongoDB正在运行)
以下是一些模式设计示例:

=============================

以下是在MongoDB模式设计中使用“带扣”方法的一些示例:

  • (视频3)
=============================

最后,Mongonic最近的一些分片演示:


在MongoDB世界中,没有最好的模式设计。在MongoDB中,模式设计取决于应用程序如何访问数据

以下是为MongoDB设计良好模式所需回答的关键问题:

  • 你有多少数据
  • 您最常见的操作是什么?您主要是插入新数据、更新现有数据还是执行查询
  • 您最常见的问题是什么
  • 你最常见的更新是什么
  • 您希望每秒执行多少I/O操作
在MongoDB中,您有很多选择:可以嵌入数据,可以创建链接关系,可以复制和反规范化数据,也可以使用混合方法

@谢尔曼已经提到了“阅读偏好”,这是一个值得研究的问题,从利用二级考试的角度来说

切分在扩展方面似乎适合您。on-sharding非常广泛,涵盖了体系结构、基础知识、部署、管理和内部(如果您特别感兴趣的话)。我强烈推荐你读它。然而,正如@Shelman所说,您需要明智地选择您的碎片密钥。本主题在StackOverflow和上有广泛介绍

避免使用顺序分片键的原因之一是,它会在插入时创建热点:在任何给定时间,单个分片将承担所有插入负载。你可以