java – 如何排序水平分区数据

前端之家收集整理的这篇文章主要介绍了java – 如何排序水平分区数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个telco计费软件系统.其中有日常的用户电话记录.日志按日期(月)水平划分.每个分区存储在单独的数据库中,并且可以分散在多个实例上.

在UI中,用户将指定日期范围.返回的数据可以在任何字段上排序.日期范围可以跨越多个分区.应用程序必须支持通过日期范围的数据进行分页.

我无法将太多记录加载到内存中进行排序.在查询中放置排序只能在一个结果集中提供排序数据.

所以我需要对来自多个分区进行排序的数据进行排序.如何从多个排序的结果集返回排序记录到UI?

编辑:经过对这个问题的更多分析,我们有更多的投入.还有分页的要求.因此,我们需要找到一种方法来对多个结果集进行实时排序.

解决方法

通过依赖ResultSet加载内存中有限数据的能力,我们可以使用Dynamic Comparator提供 Java中的解决方案.解决方案是从每个resultSet中获取第一条记录,并在java中排序,并从排序数据中返回第一个元素.

详细解决方案:

首先,我们构建了一个程序,可以根据屏幕上选择的标准给我们一个二维比较器.

第二,我们在DAO上编写了一个AggregateResultSet包装器,该包在不同分区的ResultSet中包装.注意:这些单独的ResultSet已经按照相同的标准排序.然后,AggregateResultSet将被赋予动态比较器.

此AggregateResultSet将具有一个数据结构,以便初始化每个结果集的第一个元素.它将返回next()的调用下一个元素.该元素将是根据dynamicComparator首先创建的元素.在next()调用期间,我们从临时数据结构中删除该元素,并从临时数据结构中的相同结果集中插入下一个元素.这样,AggregateResultSet将以预期顺序返回数据,通过在Java中合并/存储/排序非常有限的数据.

我们希望不会收到比较问题,因为我们在排序中大部分是数字/字符串数据.

猜你在找的Java相关文章