超大数据分页之Twitter的cursor方式进行Web数据分页


上图功能的技术实现方法拿MySQL来举例就是

select * from msgs where thread_id = ? limit page * count, count

不过在看Twitter API的时候,我们却发现不少接口使用cursor的方法,而不用page, count这样直观的形式,如 followers ids 接口

 代码如下 复制代码

URL:

http://twitter.com/followers/ids.format

Returns an array of numeric IDs for every user following the specified user.

Parameters:
* cursor. Required. Breaks the results into pages. Provide a value of -1 to begin paging. Provide values as returned to in the response body’s next_cursor and previous_cursor attributes to page back and forth in the list.
o Example: http://twitter.com/followers/ids/barackobama.xml?cursor=-1
o Example: http://twitter.com/followers/ids/barackobama.xml?cursor=-1300794057949944903

http://twitter.com/followers/ids.format

从上面描述可以看到,http://twitter.com/followers/ids.xml 这个调用需要传cursor参数来进行分页,而不是传统的 url?page=n&count=n的形式。这样做有什么优点呢?是否让每个cursor保持一个当时数据集的镜像?防止由于结果集实时改变而产生查询结果有重复内容?
在Google Groups这篇Cursor Expiration讨论中Twitter的架构师John Kalucki提到

 代码如下 复制代码

A cursor is an opaque deletion-tolerant index into a Btree keyed by source
userid and modification time. It brings you to a point in time in the
reverse chron sorted list. So, since you can’t change the past, other than
erasing it, it’s effectively stable. (Modifications bubble to the top.) But
you have to deal with additions at the list head and also block shrinkage
due to deletions, so your blocks begin to overlap quite a bit as the data
ages. (If you cache cursors and read much later, you’ll see the first few
rows of cursor[n+1]’s block as duplicates of the last rows of cursor[n]’s
block. The intersection cardinality is equal to the number of deletions in
cursor[n]’s block). Still, there may be value in caching these cursors and
then heuristically rebalancing them when the overlap proportion crosses some
threshold.

在另外一篇new cursor-based pagination not multithread-friendly中John又提到

 代码如下 复制代码

The page based approach does not scale with large sets. We can no
longer support this kind of API without throwing a painful number of
503s.

Working with row-counts forces the data store to recount rows in an O
(n^2) manner. Cursors avoid this issue by allowing practically
constant time access to the next block. The cost becomes O(n/
block_size) which, yes, is O(n), but a graceful one given n < 10^7 and
a block_size of 5000. The cursor approach provides a more complete and
consistent result set.

Proportionally, very few users require multiple page fetches with a
page size of 5,000.

Also, scraping the social graph repeatedly at high speed is could
often be considered a low-value, borderline abusive use of the social
graph API.

通过这两段文字我们已经很清楚了,对于大结果集的数据,使用cursor方式的目的主要是为了极大地提高性能。还是拿MySQL为例说明,比如翻页到100,000条时,不用cursor,对应的SQL为

select * from msgs limit 100000, 100

在一个百万记录的表上,第一次执行这条SQL需要5秒以上。
假定我们使用表的主键的值作为cursor_id, 使用cursor分页方式对应的SQL可以优化为

select * from msgs where id > cursor_id limit 100;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 接口
, 代码
, block
twitter
cursor 分页、webmagic分页抓取、javaweb分页、web分页、java web分页完整代码,以便于您获取更多的相关知识。

时间: 2024-09-30 16:38:13

超大数据分页之Twitter的cursor方式进行Web数据分页的相关文章

数据的价值主要体现:图形化方式来呈现数据

文章描述:数据的价值主要体现:图形化方式来呈现数据. 在可用性测试中,数据的价值主要体现在为测试结论提供支持,换句话说,如果我们不能用数据很好的和别人进行交流,我们数据的价值有非常有限. 用表格形式来呈现数据是一种比较简便的方式,但是,为了更好的对数据做出解释,我们需要图形化的方式来呈现数据. 通常情况下,我们用到的数据图的类型有以下几种: l  条形图(柱状图) Column or bar graphs l  折线图 Line graphs l  散点图 Scatter plots l  饼图

如何使用Twitter Storm处理实时的大数据

Hadoop(大数据分析领域无可争辩的王者)专注于批处理.这种模型对许多情形(比如为网页建立索引)已经足够,但 还存在其他一些使用模型,它们需要来自高度动态的来源的实时信息.为了解决这个问题,就得借助 Nathan Marz 推出的 Storm(现在在 Twitter 中称为 BackType).Storm 不处理静态数据,但它处理预计会连续的流数据.考虑到 Twitter 用 户每天生成 1.4 亿条推文 (tweet),那么就很容易看到此技术的巨大用途. 但 Storm 不只是一个传统的大数

值得在Twitter上关注的十位大数据专家

文章讲的是值得在Twitter上关注的十位大数据专家,乍看起来,在Twitter上寻找关于大数据的智慧似乎是种充满讽刺意味的建议.事实上,大多数普通消费者与企业用户都将Twitter作为一套数据生成的平台,由此提供的信息将作为分析的素材而绝非能够指导分析方案的参考. 然而Twitter确实承载着大量极具价值的大数据专业知识--前提是我们知道要在哪里找到它们.与其它社交平台一样,Twitter有时候同样嘈杂而毫无实际价值.如果再加上"大数据"这个时髦词汇,这里的混乱与繁杂又将上升到新的高

分页解决方案 之 QuickPager的使用方法(PostBack分页、自动获取数据)

        适用范围:网站后台管理.OA.CRM.CMS等,从关系型数据库里提取数据,愿意使用Pager_SQL.DataAccessLibrary的情况.       最佳数据库:MS SQL.       优点:只需要设置几个属性即可,不用编写"分页事件"的处理代码.可以很方便的实现查询功能,以及保存查询条件.       Demo下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html       使用方法:

分页解决方案 之 QuickPager的使用方法(PostBack分页、自定义获取数据)

          适用范围:网站后台管理.OA.CRM.CMS等,从关系型数据库里提取数据,或者XML等获取数据,不愿意使用Pager_SQL.DataAccessLibrary的情况.       优点:可以使用自己喜欢的方式获取数据,不仅仅限于关系型数据库,其他的也都可以.       缺点,要写的代码比较多.       Demo下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html       使用方法:   usin

分页解决方案 之 QuickPager的使用方法(URL分页、自动获取数据)

        适用范围:网站前台页面 等,从关系型数据库里提取数据,愿意使用Pager_SQL.DataAccessLibrary的情况.       优点:使用URL的方式,对于SEO比较友好.       缺点:保留查询状态没有太好的办法,GO的功能没有实现,有空看看别人是怎么做的.       Demo下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html       使用方法:     using JYK.Data;u

android post方式提交中文数据到服务器乱码问题

问题描述 android post方式提交中文数据到服务器乱码问题 Android端代码 AsyncHttpClient client = new AsyncHttpClient(); //URLEncoder.encode(categoryutf-8""); RequestParams params = new RequestParams(); if(path1!=null){ file1=new File(path1); } if(path2!=null){ file2=new F

现在hao123网站数据采用异步加载的方式,有没有方法可以比较简单的抓取或解析出来

问题描述 现在hao123网站数据采用异步加载的方式,有没有方法可以比较简单的抓取或解析出来 现在hao123网站数据采用异步加载的方式,用jsoup或httpclient都无法将页面内容取出来,是我没有用来jsoup或httpclient还是解析不了或抓不了,有没有什么方法可以解析.求大神指点.

ASP.NET中用哪种方式表格化数据

asp.net|数据    在开发ASP.NET站点项目中,经常用表格化的方式显示数据.最常用的可能就是DataGrid绑定DataSet数据的方式.在做过的软件项目中,有3种表格化数据的典型处理方式.    1.DataGrid绑定数据源.这种方式大家用的最多,但是DataGrid与ADO.NET完美的绑定方式,还是让人不爽.清一色的DataGrid风格很难适应不同项目的特殊风格,而且在DataGrid上做出的个性化处理也会非常的麻烦.    2.用XML(数据)+XSL(样式单).大家能理解