Azure cosmosdb 时事通讯活动的分区键设计
在阅读了DocumentDB上的所有文档之后,我仍然在为如何最好地设计分区键而苦苦挣扎。让我们把企业电子邮件发送给员工/部门。假设这是一家大型公司,有100万员工,这是虚构的,我只想假设它每周发送数百万封电子邮件,大多数都被阅读和点击,因此吸收了大量数据 让我将一些实体表示为json。出于所有目的和目的,至少在我的案例中,此数据位于sql server中,但我希望按成员和部门跟踪打开、单击的情况。在大型组织中,这种数据可以快速增长是DocumentDB的使用案例。我不想为此争论DocumentDB的优点,只是想更好地理解分区键设计。把它煮开: 资料Azure cosmosdb 时事通讯活动的分区键设计,azure-cosmosdb,Azure Cosmosdb,在阅读了DocumentDB上的所有文档之后,我仍然在为如何最好地设计分区键而苦苦挣扎。让我们把企业电子邮件发送给员工/部门。假设这是一家大型公司,有100万员工,这是虚构的,我只想假设它每周发送数百万封电子邮件,大多数都被阅读和点击,因此吸收了大量数据 让我将一些实体表示为json。出于所有目的和目的,至少在我的案例中,此数据位于sql server中,但我希望按成员和部门跟踪打开、单击的情况。在大型组织中,这种数据可以快速增长是DocumentDB的使用案例。我不想为此争论DocumentD
- 时事通讯:
{newsletterId:1,name:'something',departments:[1,2,3]}//此时事通讯已发送到3个公司部门
- 员工:
{employeeId:1212,姓名:'John Smith'}
- 通讯员工活动:
和/或{newsletteeid:1,employeeId:1212,link:2,日期:'1-2-2017'}
//其中link是电子邮件上链接的id{newsletteeid:1,employeeId:1212,打开:'1-2-2017'}
- 按部门按时事通讯打开和单击
- 按部门打开并单击
- 打开并单击整个新闻稿
- 按链接按新闻稿单击(假设我们可以将链接id映射到链接)
阅读了有关热分区的内容后,上述方法似乎就属于这一类。对于新闻稿EmployeeActivity,由于您预计新闻稿发布时会出现突发活动,
employeeId
将是有效扩展写流量的一个很好的分区键
由于报告的生成通常会有一点延迟,因此我建议通过在上运行窗口聚合,然后将每小时/分钟的统计数据保存到单独的DocumentDB“stats”集合中,在新闻稿、新闻稿x部门、部门上执行所有聚合
对于存储新闻稿和员工元数据,您可能希望分别使用
newsletteeid
和employeeId
。如果愿意,可以通过创建合成分区键将这些文档存储在同一个集合中,然后根据类型存储适当的值。您是计划让DocumentDB执行聚合,还是计划将聚合或报告以最终形式存储在DocumentDB中?实际上,我猜每个进行聚合的x周期都需要运行一个流程。我想将它们存储在documentdb中作为示例。我想补充一点,如果您想与documentdb工程师更详细地讨论分区键的选择/设计,请发送电子邮件askdocdb@microsoft.com.Thank我会的。