【发布时间】:2017-06-22 14:50:33
【问题描述】:
我有一个关于 DocumentDB 分区键选择的问题。
我有 UserId、DeviceId 和 WhatId 的数据。 UserId 参数将始终在查询中,因此我选择了 UserId 作为分区键。但是我有一个用户(数百万个实体)的大量数据,当我使用指定的分区键创建像 "SELECT * FROM c WHERE c.DeviceId = @DeviceId" 这样的 quety 时,它需要很长时间(大约 220 000 个返回的实体大约需要 6 分钟)。
也许选择例如 DeviceId 作为分区键并同时对几个分区进行查询会更有效
(指定 EnableCrossPartitionQuery = true 和 MaxDegreeOfParallelism = 分区计数)?
或者,为每个用户使用单独的集合是个好主意?
【问题讨论】:
-
并不是说这回答了您的问题,但是...我认为,每当您尝试检索 25 万个实体时,您可能需要重新考虑您的数据访问模式。此外,“
SELECT *”是另一种代码气味。如果您尝试将这么多数据移动到应用层,我看不出您选择的分区键会有什么不同。 -
谢谢。
SELECT *只是一个简单的例子,对不起。我将使用SELECT c.Value。这个问题只是关于选择分区键,因为 azure 文档站点上的信息对我来说有点抽象。所有这些测量只是为了根据查询进行性能比较。