构建分页光标

2024-03-16

我的活动存储在图形数据库中。在某些情况下,多项活动会被分组并聚合为一项活动。

处理后的活动源可能如下所示:

Activity 1

Activity 2

Grouped Activity
  Activity 3
  Activity 4

Activity 5
  • 活动具有更新的时间戳和唯一的 ID。

  • 活动按其更新时间排序,如果是分组活动,则使用其子活动中的最新更新时间。

  • 活动可以插入列表中的任何位置(例如,如果我们开始关注某人,他们过去的活动将被插入到列表中)。

  • 可以从列表中的任何位置删除活动。

  • 由于数据量的原因,使用微秒的时间戳仍然会导致冲突(2 个项目可以具有相同的时间戳)。

  • 游标标识符应该是唯一且稳定的。添加和删​​除提要项目不应更改标识符。

我想引入基于光标的分页,以允许客户端通过类似于以下内容的提要进行分页推特的 https://dev.twitter.com/docs/working-with-timelines。似乎没有太多关于它们如何构建的信息,因为我只找到了这个博客文章 http://justcramer.com/2011/03/08/building-cursors-for-the-disqus-api/谈论实施它​​们。但是,如果光标的标识符恰好指向已删除的项目,则似乎存在问题。

有了上面的内容,我怎样才能生成一个可以用作上面的光标的标识符呢?最初,我考虑将时间戳与唯一 id 结合起来:1371813798111111.myuniqueid。但是,如果该项目位于1371813798111111.myuniqueid被删除后,我可以通过以下方式获取项目1371813798111111时间戳,但无法确定我应该从哪个带有该时间戳的项目开始。

我采用的另一种方法是为每个提要结果分配一个递增的数字。由于数字是按顺序递增的,如果数字/id 丢失,我可以选择下一个。然而,这样做的问题是,如果我开始在提要中间删除和添加提要项目,光标 ID 将会发生变化。我解决这个问题的一个解决方案是在每个数字之间留出巨大的间隙,但是很难确定如何以确定的方式将新项目添加到每个数字之间的空间中。此外,随着新项目的添加和空白的填补,我们最终会遇到同样的问题。

简单的说,如果我有一个项目列表,其中可以从列表中的任何位置添加和删除项目,那么为每个列表项目生成 id 的最佳方法是什么,这样如果 id 的项目被删除,我仍然可以确定其位置在列表中?


您需要有额外的(或现有的)列,该列对于目标表中每个新添加的行依次增加。我们称此专栏为seq_id.

当客户端第一次请求游标时:

GET /api/v1/items?sort_by={sortingFieldName}&size={count}

其中 sortingFieldName 是我们应用排序的字段名称

幕后发生了什么:

SELECT * FROM items
WHERE ...            // apply search params
ORDER BY sortingFieldName, seq_id
LIMIT :count

回复:

{
    "data": [...],
    "cursor": {
        "prev_field_name": "{result[0].sortingFieldName}",
        "prev_id": "{result[0].seq_id}",
        "nextFieldName": "{result[count-1].sortingFieldName}",
        "next_id": "{result[count-1].seq_id}",
        "prev_results_link": "/api/v1/items?size={count}&cursor=bw_{prevFieldName}_{prevId}",
        "next_results_link": "/api/v1/items?size={count}&cursor=fw_{nextFieldName}_{nextId}"       
    }
}

如果我们检索的行数少于 count 行,则游标的下一个不会出现在响应中。

如果请求中没有游标或没有要返回的数据,游标的前一部分将不会出现在响应中。

当客户端再次执行请求时 - 他需要使用游标。向前光标:

GET /api/v1/items?size={count}&cursor=fw_{nextFieldName}_{nextId}

幕后发生了什么:

SELECT * FROM items
WHERE ...            // apply search params
AND ((fieldName = :cursor.nextFieldName AND seq_id > :cursor.nextId) OR 
      fieldName > :cursor.nextFieldName)
ORDER BY sortingFieldName, seq_id
LIMIT :count

或向后光标:

GET /api/v1/items?size={count}&cursor=fw_{prevFieldName}_{prevId}

幕后发生了什么:

SELECT * FROM items
WHERE ...            // apply search params
AND ((fieldName = :cursor.prevFieldName AND seq_id < :cursor.prevId) OR 
      fieldName < :cursor.prevFieldName)
ORDER BY sortingFieldName DESC, seq_id DESC
LIMIT :count

响应将与前一个类似

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建分页光标 的相关文章

  • 每页记录数允许用户选择 - codeigniter 分页

    我有有效的分页功能 我已将限制设置为每页 5 条记录 但我希望用户能够根据需要进行更改 问题是我不知道该怎么做 在视图中 我创建了下拉菜单 因此用户可以选择他想要每页查看多少条记录 ul class dropdown menu li a h
  • 在 WordPress 主题中对帖子进行分页

    好吧 我已经盯着这个看了近一个小时了 但无法让它发挥作用 我正在使用 WordPress 系统中有 12 个帖子 在管理中 我将其设置为每页显示 5 个帖子 在我的主题中 我尝试在底部显示分页 上一页 1 2 3 4 下一页 我在 Word
  • laravel 在分页中仅显示下一个和上一个链接

    我正在尝试使用 Laravel 分页 我只想显示上一个和下一个链接 而不显示数字 1 2 3 我怎么能那样做呢 我关注了 Laravel 页面 简单分页 如果您在分页视图中仅显示 下一个 和 上一个 链接 则可以选择使用 simplePag
  • Cakephp 递归条件下的分页

    我对这个问题很生气 请有人帮助我 我有这个模型 订单有很多 gt 订单项有一个 gt 产品 产品有字段vendor id 我想对包含具有特定供应商 ID 的产品的订单进行分页 我怎样才能实现这个目标 我在订单控制器中的代码 if empty
  • 在 asp.net gridview 中应用引导分页样式的简单脚本

    是否有任何简单的 jquery 脚本 插件可以在 asp net gridview 中应用引导分页样式 我发现了一些关于如何执行此操作的好提示 例如以下链接 here http www programming free com 2013 0
  • UITextView分页启用文本截断

    我正在使用 UITextView 并启用分页 在 IB 中并以编程方式打开和关闭它 有很多文本 当启用分页滚动时 有时当前可查看文本的第一行和 或最后一行会在视图中的一半处结束 而在框架的底部或顶部则有一半在视图之外 因此您只能看到顶部或顶
  • Codeigniter 分页不呈现分页链接

    你好我有以下代码 this gt load gt library pagination this gt data products this gt products model gt get products and category th
  • 迭代 Sqlite-query 中的行

    我有一个表布局 我想用数据库查询的结果填充它 我使用全选 查询返回四行数据 我使用此代码来填充表行内的 TextView Cursor c null c dh getAlternative2 startManagingCursor c th
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 如何使用 Retrofit 2 和 RxJava 处理分页

    我知道如何处理 Retrofit 响应 但在使用 rx java 处理来自 REST API 的分页时遇到问题 背景 我使用的其余 api 为我提供了以下响应 并在标题中提供了下一页的链接 HTTP 200 OK Allow GET HEA
  • 如何在 SQL 中选择“上一条”和“下一条”记录?

    I am building a blog post detail page on my site that will display display a previous and next link similar to how a typ
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 使用 CakePHP 为自定义模板链接创建分页

    我遵循分页链接的自定义模板 li class prev a href prev a li li a href class active 1 a li li a href 2 a li li a href 3 a li li a href 4
  • 使用 LIMIT/OFFSET 运行查询并获取总行数

    出于分页目的 我需要使用以下命令运行查询LIMIT and OFFSET条款 但我还需要计算该查询将返回的行数 而不需要LIMIT and OFFSET条款 我想运行 SELECT FROM table WHERE whatever ORD
  • 如何在 Django 中对搜索结果进行分页?

    下面的代码在字典中搜索单词 并将结果呈现在搜索 html 所以我需要对该页面上的结果进行分页 我该怎么做 我在这里读了这篇文章https docs djangoproject com en 1 9 topics pagination htt
  • 有什么方法可以在 Django 中序列化分页对象吗?

    我正在使用 Django 分页和 jQuery 我可以序列化分页对象的对象列表 但我想序列化整个对象以获取更多数据 页码 总页数 如何序列化整个分页对象 Thanks javascript function getRestaurants q
  • GetChildAtPoint 方法返回错误的控件

    我的表单层次结构是这样的 Form gt TableLayoutOne gt TableLayoutTwo gt Panel gt ListBox 在列表框的 MouseMove 事件中 我有这样的代码 Point cursosPositi
  • Laravel 分页链接不包含其他 GET 参数

    我将 Eloquent 与 Laravel 4 的 Pagination 类一起使用 Problem 当URL中有一些GET参数时 例如 http site example users gender female body hot 生成的分
  • 通过 cypress JS 进行分页测试

    I need to test that when I select some model car as a result I have only that model in all pages So basically I do pagin
  • 更改 ag-grid 上的页面和缓存块大小会导致项目无限加载

    我希望使用 ag grid 的 服务器端 模式重新获取每个页面的数据 为了做到这一点 我将 maxBlocksInCache 1 和 cacheBlockSize 设置为等于每页的项目数 到这里为止一切正常 现在 当我更改每页的项目数时 网

随机推荐

  • 加载时时区返回 Uncaught TypeError 的时刻

    我正在努力将 Moment Timezone 实现到 Django 应用程序中 以便纠正从不同时区访问它的用户 并且在通过 Require js 导入文件时遇到错误 moment js moment timezone js 和 moment
  • 如何在 coinbase api 中导入转换?

    目前 Coinbase 支持所谓的 转换 允许从一种货币转换为另一种货币 例如 您可以将部分 BTC 转换为 XRP 在 CSV 中 它们在备注字段中返回买入和卖出金额 笔记 将 0 27235696 BTC 转换为 3 731 32313
  • HTML 名称标签

    是否可以使用标签for元素的属性name代替id 我们的应用程序存在一个错误 两个复选框具有相同的 id 单击一个复选框的标签会检查另一个复选框 由于 HTML 生成逻辑丑陋且复杂 更改 id 会很痛苦 但是 这两个复选框都有唯一的名称属性
  • javascript 中的 Math.random 如何实现随机性?

    javascript 中的 Math random 如何实现随机性 我做了一个可以从大约 50 个不同选项中随机选择的东西 我想知道使用 Math random 来获得随机性应该有多舒服 从规格来看 随机的 返回一个正数数值 符号 大于或等
  • 在容器中心添加面板

    我有一个JPanel这是一个BorderLayout我在顶部和容器中设置了一个新面板 JDesktopPane 位于中心 另一个面板位于底部 现在我想在容器中心动态设置面板 卡片布局 因为我在下面显示层次结构 top gt panel pa
  • jQuery html() 和换行符

    我使用 jQuery 和 Rails 并有以下代码 related html 我在浏览器中遇到问题 只有当部分中没有换行符时 才会替换 lated 元素的内容 这没什么大不了的 我可以将所有内容放在一行上 但这使代码非常难以阅读 有没有办法
  • 使用重命名替换文件名

    我想通过替换从 开始的所有字符后跟八个大写字母来重命名文件名 并仅保留扩展名 4585 10 148 H2A119Ub GTCTGTCA S51 mcdf mdup ngsFlt fm 4585 10 148 H3K27me3 TCTTCA
  • 通过 chrome.runtime.sendMessage 发送带有函数的对象

    我正在开发一个 chrome 扩展 我想用 chrome runtime sendMessage 发送一个对象 带有一些函数 现在做这样的事情 chrome runtime sendMessage something Funny 工作得很好
  • wget 只下载一个 index.html 文件,而不是其他大约 500 个 html 文件

    使用 Wget 我通常只收到一个 index html 文件 我输入以下字符串 wget e robots 关闭 rhttp www korpora org kant aa03 http www korpora org kant aa03
  • 在 maven-plugin-testing-harness 中注入 DefaultRepositorySystem 时出错

    我正在尝试基于现有 2 0 插件创建一个新的 Maven 3 0 3 插件 并促进 aether 获取一些依赖项 我尝试创建一个简单的测试来使用 maven plugin testing harness 版本 2 0 1 加载 mojo 但
  • Chrome 扩展:无法使 chrome.desktopCapture.chooseDesktopMedia 捕获窗口音频

    我正在尝试使用chrome desktopCapture chooseDesktopMediaAPI 用于从扩展窗口捕获音频 我从 popup js 页面发送捕获请求 显现 background scripts background js
  • 哪里与有

    为什么需要放置您自己创建的列 例如select 1 as number after HAVING并不是WHERE在 MySQL 中 不这样做有什么缺点吗WHERE 1 写出整个定义而不是列名 其他关于这个问题的回答都没有说到重点 假设我们有
  • 如何告诉继承类不要调用其基类的无参数构造函数?

    我惊讶地发现我的基类的无参数构造函数在我每次调用时都会被调用any派生类中的构造函数 我以为就是这样 base 是为了 为了明确地如果需要的话 可以调用基本构造函数 当我实例化派生类时 如何防止调用基构造函数 using System na
  • 使用 PHP 在 Mongo DB 文档中添加数据

    我想插入数据Mongo database使用 PHP 脚本 在year明智的文件 使其看起来像这样 所有年份都在一份文件中 cars 2017 car Motorolla color blue 2016 car Toyota color g
  • 自动完成未按预期渲染材质 UI

    我的自动完成组件正在从 API 中提取书籍列表 我将它们呈现为自动完成组件中的选项 并将它们输出为页面底部的列表以进行调试 还从 API 输出 JSON 两个问题似乎是交织在一起的 首先 自动完成选项似乎并不全是渲染 最多有 10 个结果
  • FileNotFoundException(未找到 DLL)

    我在一台客户的机器上遇到了奇怪的错误 它抛出 FileNotFoundException 但该 DLL 肯定就在 Executable 文件夹中 为什么找不到它 请指教 由于您没有包含完整的异常详细信息 心理调试是 32 位与 64 位不匹
  • jQuery 验证文本区域最大长度错误

    我正在使用 jQuery validate v 1 6 0 来验证我的表单 我的数据库字段之一限制为 1000 个字符 我向相应的文本区域添加了验证 如下所示 在我的页面标题中 我添加 form validate validate 在我的页
  • 将 JSON ID 密钥插入 ng-click 指令,然后将其传递到另一个控制器

    应用程序的这一部分显示用户任务的最少信息 当他们单击 查看详细信息 按钮时 他们将进入一个页面 该页面包含有关基于 ID 的特定 CAR 的更多信息 这是一张图片来帮助解释我正在谈论的第一部分 这是我的角度代码 EDIT 添加了 ui ro
  • 如何获取大表的计数?

    样本表 id col1 col2 col3 col4 col5 modifiedTime 1 temp1 temp2 temp3 temp4 temp5 1554459626708 上表有5000万条记录 col1 col2 col3 co
  • 构建分页光标

    我的活动存储在图形数据库中 在某些情况下 多项活动会被分组并聚合为一项活动 处理后的活动源可能如下所示 Activity 1 Activity 2 Grouped Activity Activity 3 Activity 4 Activit