gpt4 book ai didi

azure-cosmosdb - Cosmos db 用户 ID/电子邮件作为分区键

转载 作者:行者123 更新时间:2023-12-05 05:10:16 25 4
gpt4 key购买 nike

我在为存储用户数据的分区键选择最佳(合成)值时进退两难。

用户文档有:- ID(引导)- 电子邮件(用于登录,例如)- 配置文件数据

有两种主要类型的查询:

  1. 通过 id 查找用户(大多数查询)
  2. 通过 email 寻找用户(登录和一些管理员查询)

我想避免跨分区查询。

如果我为 partitionKey(合成字段)选择 id,那么登录查询将是跨分区的。另一方面,如果我选择 email 那么如果用户更改电子邮件 - 这是一个问题。

我在想的是在集合中引入新类型。像这样的东西:

userId: guid,
userEmail: “email1”,
partitonKey: “users-mappings”

然后我可以将 User 文档本身作为:

id: someguid,
type: “user”,
partitionKey: “user_someguid”,
profileData: {}

那样当用户登录时,我首先通过email 检查映射类型/分区,获取guid 然后通过检查实际的User 文档guid.

另外,这样可以在不影响分区的情况下更改电子邮件。

这是一种有效的方法吗?有什么问题吗?我错过了什么吗?

最佳答案

您的问题没有标准答案。在我看来,名为 mapping type 的解决方案会导致两个查询,这也是低效的。选择分区键总是一个权衡利弊的过程,请看guidance来自官方文档。

根据您的描述:

1.Looking for user by id (most queries)

2.Looking for user by email (login and some admin queries)

我建议您优先考虑最频繁的查询,即id

我的理由:

1.id不会轻易改变,比较稳定。

2.session或cookie登录后可以保存,所以和id一样登录的访问不多。

3.id是你最频繁的查询条件,不可能每次都跨所有分区。

4.如果您确实关心登录性能,请不要忘记添加 indexing policy对于 email 列。它还可以提高性能。

关于azure-cosmosdb - Cosmos db 用户 ID/电子邮件作为分区键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com