以相对直接的方式在 Azure 存储中实现简单分页:Paging with Windows Azure Table Storage .这可以通过延续 token 功能来实现。
但是。
这只是严肃分页的开始。第一个问题是排序。您不能在 Azure 表中执行 OrderBy。克服这个问题的最佳解决方案是什么?页面必须排序,这是事实。
第二个问题,分页时要知道总页数,仅使用延续标记功能这是不可能的。在每个页面上执行“.Count()”在我看来效率很低(例如,因为分区可能位于多个服务器上)。
第三个问题是,与第二个相关,即使你可以计算你有多少页,如何将计算的页面“连接”到实际的延续标记?这对我来说是最大的谜团。 如何从特定的表格行中获取延续?
如果能提供正确的解决方案,我将非常高兴。我必须承认我也有一个,我会把它写在下面的一个答案中。
最佳答案
我知道这不能按照您要求的方式解决您的问题,但我仍然认为不应按照您建议的方式执行分页。我的意思是,由于 Azure 表存储不支持您需要的功能,因此它可能不太适合。
我会在本地缓存中获取数据,在其中执行排序和分页,然后完成处理。有针对此限制的建议解决方法,即仔细构建 rowkey/partitionkey,但我强烈建议您不要遵循该方法。
Blog blog= new Blog();
// Note the fixed length of 19 being used since the max tick value is 19 digits long.
string rowKeyToUse = string.Format("{0:D19}",
DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
blog.RowKey = rowKeyToUse;
因此,日期为 10/1/2008 10:00:00 AM 的博客 b1 的 RowKey 为 2521794455999999999,而日期为 10/2/2008 10:00:00 AM 的博客 b2 的 RowKey 为 2521793591999999999,因此 b2 将在 b1 之前。
要检索 2008 年 10 月 1 日上午 10:00:00 之后的所有博客,我们将使用以下查询:
string rowKeyToUse = string.Format("{0:D19}",
DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks);
var blogs =
from blog in context.CreateQuery<Blog>("Blogs")
where blog.PartitionKey == "Football"
&& blog.RowKey.CompareTo(rowKeyToUse) > 0
select blog;
(这取自 Microsoft 2008 年 12 月文档 provided 的 Windows Azure 表)
至于计算页数,那很简单,简单的除法运算就可以了;至于延续 token ,一种方法是(根据初始请求)在每个页面上“走动”并获取延续 token ,它基本上只是告诉您接下来是哪个行和分区键。但是拥有所有这些意味着您容易出现一致性错误(例如,如果有人将某些内容发布到同一个表存储中)。
就我个人而言,我会根据行键进行分页,如上所述,或者,如果这是一个要求,则转移到支持它的存储引擎。
进一步详细说明,如果您知道您只有一个“OrderBy”子句,您可以选择所有子句,并通过一些暗示,猜测页面边界是什么。
附带说明一下,我相信提供的分页不是为了允许在前端进行分页,而是为了减轻 1000 个结果的限制。但这只是我的 0.02 美元。
关于c# - Azure 存储表分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328042/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf