C# Azure表存储-用于有序数据的行键设计
我将大量GPS数据存储在存储表中。每个分区最多可以访问100万个实体。插入到表中的每个GPS实体实际上与先前插入的数据是顺序的,因此顺序很重要 有时我需要执行以下查询:C# Azure表存储-用于有序数据的行键设计,c#,azure,azure-storage,azure-table-storage,C#,Azure,Azure Storage,Azure Table Storage,我将大量GPS数据存储在存储表中。每个分区最多可以访问100万个实体。插入到表中的每个GPS实体实际上与先前插入的数据是顺序的,因此顺序很重要 有时我需要执行以下查询: 从当前实体(在同一分区内)获取上一个/下一个3个GPS实体。 行键设计选项: 创建递增整数。但是如何跟踪表的当前大小?无法获取表行计数,也无法获取最后插入的行 使用日期时间标记。但是如何使用标记获取上一个/下一个实体 我在C#中使用SDK 2.0版。这是一个非常酷的问题 如果您的任务是只查找在给定项之后或之前的项,那么这将很简单
从当前实体(在同一分区内)获取上一个/下一个3个GPS实体。 行键设计选项:
我在C#中使用SDK 2.0版。这是一个非常酷的问题 如果您的任务是只查找在给定项之后或之前的项,那么这将很简单,因为您可以将DateTime.Now.Ticks或(DateTime.Max.Ticks-DateTime.Now.Ticks)作为行键,并在查询中使用“take”命令查找最近的X记录 但是,由于您需要找到位于给定位置ID之后或之前的最近位置,因此我认为有一种设计模式可能适用于您的行键:
- 您需要为每个GPS位置保存两个实体。实体的数据应该相同,只是行键不同
- 一个实体的行键为:DateTime.UtcNow.Ticks,前缀为“a”(升序)
- 另一个实体的行键为:DateTime.MaxValue.Ticks-DateTime.UtcNow.Ticks,并具有 前缀字符,如:“D”(降序)
- A---01,位置1
- A---50,位置2
- A----55,位置3
- A---66,位置4
- A----67,位置5
- A---90,位置6
- A---99,位置7
- D----01,位置7
- D----10,位置6
- D----33,位置5
- D----34,位置4
- D---45,位置3
- D---50,位置2
- D----99,位置1
希望这会有所帮助,并且不会太混乱“从当前实体获取上一个/下一个3个GPS实体”-这是否在同一分区键内?是。谢谢-我现在就编辑帖子。谢谢你的回答。由于以下原因,我已经不得不“复制”数据。这意味着相同数据的4个版本。从关系的角度来看,这将是可怕的。我仍在努力为NoSQL设计数据。Azure的数据存储基本上非常便宜,所以我想我会同意你的建议。另一个选择是让冗余分区只存储一个名为RowKeyReference的列,该列将在“主”分区中包含实体的RowKey。这将节省数据成本。。。但它确实有一个关系元素。意见?这取决于你一次需要挑选多少相对实体。您将对这些问题进行单独查询。(尽管查询速度很快)。如果您需要“很多”附近的实体,我会使用单一查询方法。。。否则,只存储引用然后在第二次调用中获取真实实体可能不是一个坏主意。您可以在rowkey中使用“(DateTime.MaxValue.Ticks-DateTime.UtcNow.Ticks).ToString(“d19”)”格式,因为它被排序为字符串而不是整数