Jas*_*ong 6 performance azure azure-table-storage
我是Azure的新手!目的是根据存储在RowKey中的时间戳返回行.由于每个查询都有交易成本,我希望在保持性能的同时最小化事务/查询的数量
这些是建议的分区和行键:
传奇:
我想从单个查询返回行和任何>或<DateOfMessage_MessageId的子项
这可以通过我提出的PartitionKeys和RowKeys来完成吗?
ie ..(在伪代码中)
var results = ctx.PartitionKey.StartsWith(TextCache_AccountId)
&& ctx.RowKey > (TimeStamp)_MessageId
Run Code Online (Sandbox Code Playgroud)
其次,如果我有多个帐户,并且只想返回前10个帐户,可以通过单个查询完成
ie ..(在伪代码中)
var results = (
(
ctx.PartitionKey.StartsWith(TextCache_(AccountId1)) &&
&& ctx.RowKey > (TimeStamp1)_MessageId1 )
)
||
(
ctx.PartitionKey.StartsWith(TextCache_(AccountId2)) &&
&& ctx.RowKey > (TimeStamp2)_MessageId2 )
) ...
)
.Take(10)
Run Code Online (Sandbox Code Playgroud)
对你的问题的简短回答是肯定的,但有些事情你需要注意.
Azure表存储没有直接等效的.StartsWith()
.如果您将存储库与LINQ结合使用,则可以使用.CompareTo()
(>和<不正确翻译),这意味着如果您运行搜索帐户1并且您要求查询返回1000个结果,但是帐户1只有600个结果,最后400个结果将是帐户10(词汇下一个帐号).因此,您需要对如何处理结果有所了解.
如果你用前导0填充帐户ID,你可以做这样的事情(这里也是伪代码)
ctx.PartionKey > "TextCache_0000000001"
&& ctx.PartitionKey < "TextCache_0000000002"
&& ctx.RowKey > "123465798"
Run Code Online (Sandbox Code Playgroud)
别的东西要牢记的是,查询到Azure的表返回他们的结果PartitionKey
,然后RowKey
顺序.所以在你的情况下,没有a的消息ParentMessageId
将在消息之前返回ParentMessageId
.如果您永远不会查询此表,ParentMessageId
我会将其移至属性.
如果TextCache_
只是一个字符串常量,它不会通过包含在其中添加任何内容,PartitionKey
除非这实际上意味着返回时代码.
虽然您将进行第二次查询,但我认为它不会产生您所追求的内容.如果你想按DateOfMessage
顺序排列前十行,那么它将不起作用(参见我上面关于排序顺序的观点).如果您按原样运行此查询并且帐户1有11条消息,则它将仅返回与帐户1相关的前10条消息,无论帐户2是否具有较早的消息.
虽然尝试最小化您使用的交易数量是一种良好的做法,但不要太在意它.运行工作人员/ Web角色的成本将使您的交易成本相形见绌.1,000,000笔交易将花费您1美元,这比9小时运行一个小实例的成本要低.
归档时间: |
|
查看次数: |
3728 次 |
最近记录: |