我们需要工具支持键集分页

news2024/11/13 12:57:05

我们需要工具支持键集分页 (use-the-index-luke.com)

您是否知道分页非常麻烦但很容易避免?offset

offset指示数据库跳过查询的前 N 个结果。但是,数据库仍必须从磁盘获取这些行并按顺序排列它们,然后才能发送以下行。

这不是实现问题,而是设计的方式:offset

...行首先根据<顺序依据子句>进行排序,然后通过从一开始就删除<结果偏移子句>中指定的行数来限制......

SQL:2016, 第 2 部分, §4.15.3 派生表

这里的关键点是它只需要一个参数:要删除的行数。没有更多的上下文。数据库对此数字唯一可以做的就是获取和删除这么多行。换句话说,在数据库上投入了大量的工作——无论是SQL还是NoSQ L。offsetoffsets

但问题并不止于此:想想如果在获取两个页面之间插入新行会发生什么?offset

1仅提取前 10 行选定的行第 1 行 第 2 行 第 3 行 第 4 行 第 5 行 第 6 行7 行 8 行 9 行 10 行 11 行 12 行 13行142插入新建行3删除的行选择偏移 10 仅获取接下来的 10 行新建行

使用 ➌ 跳过以前提取的条目❶ 时,如果获取两个页面之间插入了新行,您将获得重复项➋。还有其他可能的异常,这只是最常见的异常。offset

这甚至不是数据库问题,而是框架实现分页的方式:它们只是说要获取哪个页码或要跳过多少行。仅凭这些信息,任何数据库都无法做得更好。

另请注意,偏移问题可能有不同的语法:

  • 偏移关键字

  • 2参数限制[偏移量,]限制(1参数限制很好)

  • 基于行编号的下限过滤(例如row_number()rownum,...)。

所有这些方法的根本问题是,它们只提供了要删除的行数,而不再提供上下文。在本文中,我指的是这些方法中的任何一种。offset

无偏移寿命

现在想象一个没有这些问题的世界。事实证明,没有它的生活非常简单:只需使用仅选择您尚未看到的数据的子句。offsetwhere

为此,我们利用了我们在有序集合上工作的事实——你确实有 anclause,不是吗?一旦有了明确的排序顺序,我们就可以使用一个简单的过滤器来只选择我们最后看到的条目后面的内容:order by

SELECT ...
  FROM ...
 WHERE ...
   AND id < ?last_seen_id
 ORDER BY id DESC
 FETCH FIRST 10 ROWS ONLY

这是基本配方。在多列上排序时会变得更有趣,但想法是相同的。该配方也适用于许多NoSQ L系统。

这种方法(称为查找方法键集分页)解决了如上所述的漂移结果问题,甚至比这种方法更快。如果你想知道使用or键集分页时数据库内部发生了什么,看看这些幻灯片(基准,基准!):offsetoffset

在第43 张幻灯片上,您还可以看到键集分页有一些限制:最明显的是您无法直接导航到任意页面。但是,使用无限滚动时这不是问题。无论如何,显示要单击的页码是一个糟糕的导航界面——恕我直言。

如果您想阅读有关如何在SQL中正确实现键集分页的更多信息,请阅读本文。即使您不参与 SQL,在开始实现任何内容之前也值得阅读该文章。

但是框架...

首选键集分页的主要原因是缺乏工具支持。大多数工具提供基于键集分页的分页,但没有提供任何使用键集分页的便捷方法。offsetoffset

请注意,键集分页会影响整个技术堆栈,直到在浏览器中运行的JavaScript执行AJAX无限滚动:而不是将简单的页码传递给服务器,您必须将完整的键集(通常是多列)向下传递给服务器。

支持键集分页的框架名人堂正在不断增长:

JavaScript

  • 节点.js:书架-光标-分页

  • 海量.js:密钥集文档

  • Django REST 框架:游标分页

  • 姜戈无限滚动分页

  • 姜戈分块器

  • SQL Alchemy sqlakeyset.

Java / JVM

  • jOOQ — Java 面向对象的查询

  • 炽热持久性

  • 斯卡拉部分结果

.PHP

  • 拉拉维尔 8.0+: 光标分页器

。网

  • DRF 类似分页

  • 先生。EntityFrameworkCore.KeysetPagination

红宝石

  • 续集::寻页

  • 下一页

  • order_query

佩尔

  • DBIx::Class::Wrapper

这就是我需要你帮助的地方。如果你正在维护一个以某种方式涉及分页的框架,我请求你,我敦促你,我恳求你,也为键集分页构建本机支持。如果您对细节有任何疑问,我很乐意为您提供帮助(论坛,联系表格,推特)!

即使您只是使用应该支持密钥集分页的软件,例如内容管理系统或网上商店,也要让维护人员知道它。您可以只提交功能请求(链接到此页面),或者,如果可能,提供补丁。同样,我很乐意帮助正确处理细节。

以WordPress为例。

传播信息

键集分页的问题不是技术问题。问题只是它在现场几乎不为人知,也没有工具支持。如果您喜欢少分页的想法,请帮助传播这个词。推特它,分享它,邮寄它,你甚至可以重新写这篇文章(CC-BY-NC-ND)。也欢迎翻译,请事先与我联系 - 我也会在此页面上包含翻译的链接!offset

哦,如果你在写博客,你也可以在你的博客上添加一个横幅,让你的读者知道它。我准备了一个带有一些常见横幅格式的NoOffset 横幅库。只需选择最适合您的。

如果你喜欢我解释事物的方式,你会喜欢我的书。

相关

  • 无偏移横幅图库

  • 文章:获取下一页 — 偏移量与键集分页

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超好用的大数据分析平台分享,SuccBI 一站式大数据分析平台

SuccBI 一站式大数据分析平台融合了数据汇集、加工、智能调度、自助分析可视化、中国式报表等功能为企业提供一站式的大数据分析处理能力。 数据汇集、加工 连接各类分散的数据并进行加工、清洗、调度、元数据管理&#xff0c;帮助企业轻松汇集、管理和共享数据资产。 丰富的数…

SAR信号处理基础2——线性调频信号频谱与驻定相位原理

前面已经给出了线性调频信号的时域表达形式&#xff0c;并介绍了信号的实部、虚部、相位、频率等&#xff0c;本文介绍线性调频信号的频谱&#xff0c;以及推导线性调频信号时常用的驻定相位原理。计算信号的频谱&#xff0c;实际上就是对信号做傅里叶变换。即 驻定相位原理认…

Java高校宿舍管理系统寝室管理(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频&#xff0c;手把手带同学们敲代码从0到1完成项目 该项目采用技术JSP、Servlet、jdbc、前端框架 bootstrap、jQuery&#xff0c;bootstrap-datetimepicker日期插件、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件、软件安装教程…

Linux和WIN的优势

1.性价比方面 Linux服务器与Windows服务器就性价比而言&#xff0c;Linux服务器优势是很明显的。Linux作为资源管理和操作系统来说&#xff0c;是开源、免费的&#xff0c;而正版的Windows的操作系统是收费的&#xff0c;因而就性价比来说Linux服务器优于Windows服务器。 2.性…

python的自定义函数的用法和实例

目录 1.自定义函数的语法和用法 &#xff08;1&#xff09;引入 &#xff08;2&#xff09;语法 &#xff08;3&#xff09;用法&#xff1a;用于自定义目标函数语法。 &#xff08;4&#xff09;调用函数 ①语法 ②解释 2.实例 &#xff08;1&#xff09;简单的用法 …

[附源码]计算机毕业设计小区物业管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Vector - VTESTStudio(软件篇) - CAPL实现MD5算法 - 01

OTA是当前车载行业非常热门的一个话题和研究方向,然而车辆又是跟大家的生命安全息息相关的一个日常工具,因此对于车辆升级的限制条件和安全阈值是我们不可避开的一个话题,今天我们来介绍一下对于文件的校验常用的一个算法MD5。 今天我们先来说下什么是MD5算法,这个…

Java基础:Object类、常用API

第一章 Object类 1.1 概述 java.lang.Object类是Java语言中的根类&#xff0c;即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候&#xff0c;最终找的父类就是Object。 如果一个类没有特别指定父类&#xff0c; 那么默认则继承自Object类。例如&#…

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(一)MOSFET技术

MOSFET技术 1.器件类型 2.MOSFET模型 3.MOSFET关键参数 4.开关应用 5.开通过程 6.关断过程 7.功率损耗 8.寄生器件的影响 双极晶体管和 MOSFET 晶体管的工作原理相同。从根本上说&#xff0c;这两种晶体管都是电荷控制器件&#xff0c;这就意味着它们的输出电流与控制电极在半…

4.1 一个简单的Linux Kernel模块

Linux内核包含非常多个组件,但不同的应用场景下需要打包的组件也不尽相同,更何况我们常常因为一些iot设备本身硬件资源有限,为了物尽其用要对内核组件进行裁剪。例如,对于路由器设备来说,我们再在打包Linux 内核时并不需要打包BT等驱动模块。Linux提供了一种称之为模块-Mo…

《MySQL实战45讲》学习笔记

《MySQL实战45讲》学习笔记 [TOC] 《MySQL实战45讲》学习笔记《MySQL实战45讲》学习笔记01.基础架构&#xff1a;一条SQL查询语句是如何执行的02.日志系统&#xff1a;一条SQL更新语句是如何执行的更新语句的执行流程重要的日志模块&#xff1a;redo log重要的日志模块&#x…

Mali GPU“补丁缺口”让 Android 用户容易受到攻击

©网络研究院 Arm 的 Mali GPU 驱动程序中的一组五个可利用漏洞在芯片制造商修补它们几个月后仍未修复&#xff0c;可能使数百万 Android 设备面临攻击。 来自谷歌、三星、小米、Oppo 以及其他手机制造商的设备目前受到影响&#xff0c;正在等待修复程序到达用户手中。 …

HTML爱心照片墙源码

HTML爱心照片墙源码 css charset "utf-8"; * {padding: 0;margin: 0; } div {font-family: "微软雅黑";font-size: 14px;color: #666;padding: 0;margin: 0;; } body,html{background: black;height: 100%; } /*css3实现照片墙的样式*/ .container {widt…

Java毕业设计 基于SSM的网上图书商城系统

对于传统书店来讲,利用计算机软件技术开发一款图书商城也会让书店员工省事不少,这个图书商城能让书籍信息还有注册用户信息,以及书籍订购等内容通过一个网络平台完全展示出来,让网站用户只要登录进去图书商城就可以查看所有的内容,用户可以查看新闻以及书籍产品及时更新的信息,…

【设计模式】设计模式

书籍推荐 《设计模式-可复⽤⾯向对象软件的基础》《重构与模式》 设计模式 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;⽤于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决⽅案&#xff1b; 内存模型 扩展&#xff1a;c语⾔当中的多态…

年产2万吨山楂酒工厂的设计-装瓶工段及车间的设计(lunwen+任务书+开题+选题表+cad图纸)

目 录 目 录 I 第一章 绪论 1 1.1设计背景及目的 1 1.1.1山楂酒的介绍及功效 1 1.1.2目标人群 1 1.1.3发展前景 2 1.2设计依据 2 1.3设计内容 2 1.4原材料的选择 3 第二章 工艺设计 4 2.1 生产时间安排 4 2.2 工艺流程图 4 2.3 工艺要点 4 2.3.1山楂 5 2.3.3压榨 5 2.3.4分离取…

【pen200-lab】10.11.1.8

pen200-lab 学习笔记 【pen200-lab】10.11.1.5 &#x1f525;系列专栏&#xff1a;pen200-lab &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年12月4日&#x1f334; &#x1f36d;作者…

Java自动装箱与自动拆箱

1、Java基本数据类型及其对应的包装器类类型 Java中共用8种基本数据类型&#xff0c;并为这8种基本数据类型中的每一种都提供了一个包装器类&#xff0c;例如int类型对应的包装器类是Integer。具体类型如下表&#xff1a; 2、自动装箱和自动拆箱 自动装箱&#xff1a;就是指…

【大道模式】状态模式 - State Pattern(审核状态流转)

最近在实现一个简单的审核系统&#xff0c;包含多个审核状态和多个审核动作&#xff0c;将业务逻辑映射到代码中感觉会有很多繁杂的逻辑&#xff0c;因此&#xff0c;会思考用一个比较通用、易扩展、易维护、易测试的模式来应对这种场景&#xff0c;了解了一下&#xff0c;就是…

Java数据结构与Java算法学习Day03---线性表(简略笔记记录)

目录 一、线性表 38 二、顺序表 39 三、链表 45 3.1单向链表 46、47、48 3.2双向链表 49 3.3链表反转 &#xff08;面试中高频题目&#xff09; 56 3.4快慢指针 57 3.4.1中间值问题 57 3.4.2单向链表是否有环问题 58 3.4.3有环链表入口问题 60 3.5循环链表 61 3.6…