关于分页只能写 sql 的痛苦

2022-08-06 01:59:20 +08:00
 garyxi24
由于现在公司项目都是在数据库分页,只能写 sql 实现而且只能是一条 sql 。本人是个 sql 菜鸡,简单筛选还好说,复杂逻辑筛选用 sql 写就很痛苦,好不容易怼出来 sql 像💩一样,又臭又长,同样的逻辑如果内存分页比如用 java 去实现就可以很清晰、很舒服。
所以我是想请教一下有什么更好的分页方式,摆脱写 sql 的噩梦,上 es Hadoop spark flink 这些大数据生态组件?
6546 次点击
所在节点    MySQL
61 条回复
aliveyang
2022-08-06 10:11:02 +08:00
最好的分页就是最初的分页,而不是写到内存里再分
iseki
2022-08-06 11:05:08 +08:00
没有特殊原因请不要在内存里分页,常规的 curdSQL 并不难,去把 PostgreSQL 文档前几章完整看一遍,有中文的。
l0ve1o24
2022-08-06 11:07:20 +08:00
是我孤陋寡闻了吗?难道数据库分页是非主流?
jin7
2022-08-06 11:16:17 +08:00
学一下 sql 又不难
brader
2022-08-06 11:25:14 +08:00
不在 sql 分页,难道你把数据全查出来?你是怕玩不死数据库?
iseki
2022-08-06 12:05:43 +08:00
聚合算出每个用户的权限数量,小于权限总数的用户
garyxi24
2022-08-06 12:06:15 +08:00
@LeegoYih 嗯,那我想问一下微服务情况下分页怎么实现好,比如我想以 a 服务的数据为主表分页,但过滤条件在 b 服务数据里
iseki
2022-08-06 12:10:44 +08:00
如果数据逻辑复杂,那 SQL 长是没办法的…适当用 CTE ,视图等等特性降低复杂度吧
garyxi24
2022-08-06 12:14:16 +08:00
@iseki 一针见血,我想到聚合后把 role concat 成集合,和所有 role 集合比较是否相等,还是太单纯了
garyxi24
2022-08-06 12:24:30 +08:00
@chendy “还是说查询条件太多还分散在各个表,拼起来难受?” Bingo !
oneisall8955
2022-08-06 12:58:51 +08:00
已经有 es 组件,那用 es 索引吧,数据聚合在一起,分库分表的数据想分页更蛋疼
liuligames
2022-08-06 13:34:33 +08:00
1 、jpa ,感兴趣可以去看看 jpa dsl 。
2 、不管是 jpa or mybatis 主要还是使用 jdbc 连接数据库执行 sql 语句。
3 、想筛出至少有一种权限不存在的 user 这个问题太模糊了,不过可以先暴力解法。
4 、微服务分页,主要返回数据还是 b 服务,a 服务只是填充部分数据,b 服务分页后再请求 a 服务,a 服务填充 b 服务业务返回实体
liuligames
2022-08-06 13:41:14 +08:00
抱歉,没仔细看微服务架构分页这个问题,需要先请求 b 服务拿到过滤条件,在对 a 服务数据分页
totoro52
2022-08-06 13:55:08 +08:00
我们公司也是微服务框架, 并且前端的筛选超级复杂,需要每一个字段都筛选,包括自定义字段,其中有些模块的数据是几个模块组合出来的数据列表,所以我们检索数据不采用 SQL ,采用了 ES ,同时每一次增删改都会同步 ES 数据,在事务的加持下
vone
2022-08-06 14:17:48 +08:00
有没有可能你不需要写分页?

引申出来的问题是,写分页的根本目的是做什么?
garyxi24
2022-08-06 14:26:29 +08:00
@liuligames 那比如说,从 b 服务拿来的筛选条件会是满足条件的 a 服务数据的 id ,那有可能会有非常多的数据,这样的 rpc 响应也会非常大吧
garyxi24
2022-08-06 14:28:54 +08:00
@vone 分页是肯定要的,你不可能把所有数据展示出来,问题还是在复杂筛选上
weirdo
2022-08-06 14:32:59 +08:00
不管愿意不愿意,SQL 都是基础。。

p.s. 在数据库设计合理的情况下,sql 写出来 也可以很好看,逻辑也可以很清晰
在用上主从多节点 Oracle 的业务系统中,几百行上千行的查询是十分常见的
liuligames
2022-08-06 15:14:48 +08:00
@garyxi24 mongodb 数据平铺实时同步,很舒服。
EminemW
2022-08-06 15:40:05 +08:00
楼主应该是在做报表查询之类的需求吧,每个字段都要筛选

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX