gpt4 book ai didi

定期分布数据的 Azure 表存储分区

转载 作者:行者123 更新时间:2023-12-02 00:15:44 24 4
gpt4 key购买 nike

我一直在阅读如何对 Azure 表存储进行分区以确保高性能。我想知道我提出的策略是否能够提供高效且可扩展的插入以及对数据存储的简单查询。

我有 1000 个不同的进程,每 30 秒向 AZT 上传一小包数据(约 50 字节)。我的查询实际上总是简单地按流程和时间查询。例如,我想查询给定日期的晚上 7 点到 9 点进程 A 的所有日志。

我建议的策略是为每个进程创建一个表(1000 个表),然后对行进行分区,使每个分区包含 6 小时的数据(每天 4 个新分区,每个分区 720 行)。从 11 月 8 日午夜到凌晨 6 点,分区键“NOV82012-0”将包含 720 行。 “NOV82012-1”将包含 6AM-Noon 等...

这应该确保任何分区中的行数始终少于 1000 行,这样我就不必担心连续标记。我还可以轻松地按进程“过滤”,因为每个进程的数据都有自己的表。

这是本案例的理想策略吗?我错过了什么吗?

最佳答案

实际上,如果您使用 .NET SDK,则无需担心继续 token 。通过调用AsTableServiceQuery()在查询中,您将获得一个自动处理延续标记的对象。

根据您所说的内容,您想要根据一些条件进行过滤:

  • 流程
  • 日期
  • 时间

我确实认为没有必要为每个进程创建 1 个表。您可以使用组合键对其进行分区:进程+日期。一个例子:

  • A_20121108
  • A_20121109
  • B_20121108

通过将进程名称与日期结合起来,您可以坚持使用单个表,只是为了让事情变得更容易。现在关于行,每个分区有超过 1000 个项目是可以的。将给定日期的所有行放在同一分区中的优点是,您可以根据行键轻松选择该分区中的范围(这是半伪代码,没有测试它 - 您可能想要改进行键)。

from item in context.CreateQuery<XXX>("XXX") 
where item.PartitionKey == "A_20121108" && item.RowKey.CompareTo("20121108120000") >= 0 && item.RowKey.CompareTo("20121108193000") <= 0
select item;

关于定期分布数据的 Azure 表存储分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13295382/

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