数据分片排序oracle,oracle – 如何对从水平分区表中提取的数据进行排序

听起来你的架构已经过了分区并且是分片的.如果您有系统软件或应用程序框架,可以处理应该实现此要求的分片.

为了获得正确的排序顺序,您必须同时在同一位置获得所有相关分片的结果.无法从一个分片获得一些结果,然后从另一个分片获得更多结果,并且能够保证用户可以选择的任何排序顺序.

一种方式(如BriteSponge建议的那样)将定义一个跨越所有分片的视图.让DBMS处理编组各种分片结果集的复杂性.如果可以管理,这将是我的首选解决方案.它将应用程序与数据库实现细节分开.

如果你必须自己写这个,你有一些希望,你有分页.这将限制您将在UI中显示的最大数量或行,因此,必须从每个分片返回的最大行数.从日期范围开始,您可以确定需要哪些分片.对每个分片,您提交表单的查询

select

from

where date between and

order by

fetch first rows only

< number>将是您要在UI中的单个页面中显示的最大行数.虽然它们不太可能全部来自一个碎片,但它是可能的,这是限制必须的.

如果您的Oracle版本不支持最终限制条款,则以下内容仍然有效,但效率会低得多.

在结果集上执行多向合并.当您达到UI中一个页面的限制时停止.丢弃结果集的其余部分.

当用户向前翻页时,使用标准分页技术重新提交SELECT.

当用户选择不同的排序顺序时,修改SQL以匹配并重新提交到每个分片.

我的偏好是在存储过程中实现此服务器端.这将使应用程序和存储尽可能分开.此外,不是多路合并,各种结果集都可以进入单个工作表,然后对其进行排序,并将正确的行数返回给应用程序.

如果您确实在客户端实现它,而不是丢弃结果集的未使用部分,则可以缓存它们.这可能以额外的复杂性为代价减少后续页面的负载.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值