如何对水平分区数据进行排序
How to sort horizontal partitioned data
我有一个电信计费软件系统。其中有用户通话的每日日志。日志按日期(月)水平分区。每个分区都存储在一个单独的数据库中,并且可能分布在多个实例中。
在 UI 中,用户将指定一个日期范围。数据 returned 可以在任何字段上排序。日期范围可能跨越多个分区。应用程序必须支持通过日期范围的数据进行分页。
我无法将太多记录加载到内存中进行排序。将排序放在查询中只会给我一个结果集中的排序数据。
所以我需要对来自多个分区的数据进行排序,每个分区都是单独排序的。我如何 return 从多个排序的结果集中将记录排序到 UI?
编辑: 经过对这个问题的更多分析,我们有了更多的输入。也有分页的要求。因此,我们需要找到另一种方法来对多个结果集进行实时排序。
依靠 ResultSet 在内存中加载有限数据的能力,我们能够使用动态比较器在 Java 中提出解决方案。解决方案是从每个结果集中获取第一条记录,并将其排序为 java 和 return 来自已排序数据的第一个元素。
详细解法:
首先我们构建了一个程序,它可以根据屏幕上选择的标准为我们提供动态比较器。
其次,我们在 DAO 上编写了一个 AggregateResultSet 包装器,它包装了来自不同分区的结果集。注意:这些单独的结果集已经按照相同的标准进行了排序。然后AggregateResultSet会被赋予一个动态比较器。
这个 AggregateResultSet 将有一个数据结构来存储每个结果集的第一个元素。它将 return 调用 next() 时的下一个元素。根据 dynamicComparator,此元素将是第一个出现的元素。在 next() 调用期间,我们从临时数据结构中删除该元素,并将同一结果集中的下一个元素插入到临时数据结构中。这样 AggregateResultSet 将 return 数据按预期顺序排列,merging/storing/sorting 非常有限的数据在 Java.
我们希望不会收到比较问题,因为我们有大部分 numeric/string 数据正在排序。
我有一个电信计费软件系统。其中有用户通话的每日日志。日志按日期(月)水平分区。每个分区都存储在一个单独的数据库中,并且可能分布在多个实例中。
在 UI 中,用户将指定一个日期范围。数据 returned 可以在任何字段上排序。日期范围可能跨越多个分区。应用程序必须支持通过日期范围的数据进行分页。
我无法将太多记录加载到内存中进行排序。将排序放在查询中只会给我一个结果集中的排序数据。
所以我需要对来自多个分区的数据进行排序,每个分区都是单独排序的。我如何 return 从多个排序的结果集中将记录排序到 UI?
编辑: 经过对这个问题的更多分析,我们有了更多的输入。也有分页的要求。因此,我们需要找到另一种方法来对多个结果集进行实时排序。
依靠 ResultSet 在内存中加载有限数据的能力,我们能够使用动态比较器在 Java 中提出解决方案。解决方案是从每个结果集中获取第一条记录,并将其排序为 java 和 return 来自已排序数据的第一个元素。
详细解法:
首先我们构建了一个程序,它可以根据屏幕上选择的标准为我们提供动态比较器。
其次,我们在 DAO 上编写了一个 AggregateResultSet 包装器,它包装了来自不同分区的结果集。注意:这些单独的结果集已经按照相同的标准进行了排序。然后AggregateResultSet会被赋予一个动态比较器。
这个 AggregateResultSet 将有一个数据结构来存储每个结果集的第一个元素。它将 return 调用 next() 时的下一个元素。根据 dynamicComparator,此元素将是第一个出现的元素。在 next() 调用期间,我们从临时数据结构中删除该元素,并将同一结果集中的下一个元素插入到临时数据结构中。这样 AggregateResultSet 将 return 数据按预期顺序排列,merging/storing/sorting 非常有限的数据在 Java.
我们希望不会收到比较问题,因为我们有大部分 numeric/string 数据正在排序。