我有两个关于Azure存储表的简短问题。
是否有类似概述我可用于查询存储表的技术?我找到了一个LINQ的例子,.NET框架中有替代品吗?
“查询处理”在哪里发生?例如。当您使用SQL并向SQL服务器发送复杂查询时,此服务器开始对其进行评估并将结果返回给您的客户端。表存储是一样的,还是客户端加载数据并且必须自己进行处理?
答案 0 :(得分:4)
对于#1,请查看WCF数据服务客户端库(.NET中用于查询表存储的内容)。如果你想手工构建URL,可以避免LINQ,但LINQ是人们从.NET代码查询表存储的主要方式。
对于#2,表存储支持非常少的操作(基本上只是过滤器)。如果您需要进行排序,分组等,则需要首先在本地提取数据,然后从那里进行查询。发生的事情取决于您编写的代码。例如,以下内容将失败:
mytable.Select(e => e.PartitionKey == "foo").OrderBy(e => e.SomeTime).Take(10)
因为查询将被发送到Windows Azure表存储并因为表不支持排序而失败。但是,以下方法可行(但效率很低):
mytable.Select(e => e.PartitionKey == "foo").ToList().OrderBy(e => e.SomeTime).Take(10)
这将导致整个结果集(具有“foo”分区键的所有内容)被本地下拉,因为.ToList导致查询被执行。然后,一旦它全部记在内存中,它将被排序并返回前十个项目。