gpt4 book ai didi

azure - 如何使用二级索引在 Azure 中存储和读取数百万条记录

转载 作者:行者123 更新时间:2023-12-02 07:22:45 25 4
gpt4 key购买 nike

我需要在 Azure 中存储数千万条记录。我需要能够按插入日期按降序对它们进行排序。最后,我需要在 3 个字段上发出 where 子句。

public class Record
{
public DateTime CreatedOn {get; set;}
public string Filter1 {get; set;}
public string Filter2 {get; set;}
public bool Filter3 {get; set;}
}

我认为 Azure 表存储不支持二级索引,因此我正在考虑 CosmosDB。问题是 CosmosDB 上的每个逻辑分区限制为 20 GB。我无法将所有内容转储到一个分区中。我正在考虑根据 CreatedOn 字段水平切片数据(dd/mm/yyyy 没有时间组件)。这有助于我分发数据,但我坚持使用查询部分来读回数据。

数据是用户生成的;因此,我不知道 CreatedOn 将被分配什么值。如果我在 CreatedOn 上分区,如何使查询变得智能,以便在到达上一个分区末尾时知道下一个分区键是什么?

示例:

记录1创建于=> 2020年5月28日

记录2创建于=> 2020年5月28日

记录3创建于=> 2020年5月22日

记录4创建于=> 2020年5月10日

日期之间可能存在很大差距,因此我不想通过每天扫描范围来强制执行下一个分区。

关于查询:

Filter1Filter2 分别可以有 5 个和 12 个不同的值。 Filter3 只是一个 bool 值。

示例查询如下所示:

select top 20 from record 
where Filter1 = 'Value1' and Filter2 = 'Value2' and Filter3 = false
order by CreatedOn desc

另一个示例查询与上面相同,但没有 Filter2

select top 20 from record 
where Filter1 = 'Value1' and Filter3 = false
order by CreatedOn desc

最佳答案

使用 Cosmos SQL API。您可以使用 Order by 对查询进行排序。默认情况下,所有字段都会建立索引。您可以自定义索引策略以包含复合索引以使查询更加高效。

选择一个具有广泛可能值的 PK,以将请求单位 (RU) 消耗和数据存储均匀地分布在所有逻辑分区上。另外,您应该知道大多数查询的 PK 值。您将在 where 子句中使用它,以便查询引擎仅查询感兴趣的数据所在的特定分区。

在你的情况下,PK 属性应该是什么?

public class Record
{
public DateTime CreatedOn {get; set;}
public string Filter1 {get; set;}
public string Filter2 {get; set;}
public bool Filter3 {get; set;}
}

“CreatedOn”不是一个好的选择。首先,就像您提到的那样,您在查询期间不会知道它的值,因此您必须始终进行跨分区查询。其次,给定日期的所有写入都将进入同一分区,从而导致热分区,这将导致速率限制、预置吞吐量的低效使用以及更高的成本。

其他属性是否有助于解决这个问题?也许您必须创建另一个属性。也许 UserID ,我只是编造一个,因为我不知道上下文。

public class Record
{
public DateTime CreatedOn {get; set;}
public string Filter1 {get; set;}
public string Filter2 {get; set;}
public bool Filter3 {get; set;}
public string UserID {get; set;}
}

现在可以查询了

select top 20 from record 
where Filter1 = 'Value1' and Filter2 = 'Value2' and Filter3 = false and UserID = 'somevalue' order by CreatedOn desc

关于azure - 如何使用二级索引在 Azure 中存储和读取数百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077803/

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