java - 在 Java 中过滤/排序大量数据

标签 java sorting filtering in-memory-database

<分区>

让我先简单介绍一下场景。数据库是Sybase。有一些 2-3 k 存储过程。存储过程可能会返回大量数据(大约百万条记录)。将有一个服务(servlet/spring Controller )将调用所需的过程并将数据以 xml 格式刷新回客户端。

我需要应用过滤(在多列和多条件下)/排序(基于一些动态标准),我已经完成了。

问题是,由于数据量很大,在内存中进行所有过滤/排序并不好。我想到了以下选项。

选项 1: 一旦我得到 ResultSet 对象,阅读一些 X 号。记录,过滤它,将它存储在某个文件中,重复这个过程直到读取所有数据。然后只需读取文件并将数据刷新到客户端。

我需要弄清楚如何对文件中的数据进行排序以及如何将对象存储在文件中以便快速过滤/排序。

选项 2: 寻找一些 Java API,它获取数据、过滤数据并根据给定的标准对其进行排序,然后将其作为流返回

选项 3: 使用内存数据库,如 hsqldb、h2database,但我认为这会产生开销而不是帮助。我将需要先插入数据,然后再查询数据,这也会依次使用文件系统。

请注意,我不想修改存储过程,因此在数据库中进行过滤/排序的选项不是一个选项,或者如果没有其他方法可能是最后一个选项。

此外,如果有帮助,我将从 ResultSet 读取的每条记录都存储在一个 Map 中,键是列名,这个 Map 存储在一个列表中,我在该列表上应用过滤和排序。

您认为哪个选项有利于内存占用、可扩展性、性能方面或任何其他适合此场景的选项?

谢谢

最佳答案

我会推荐您的选项 3,但它不需要是内存数据库;您可以改用适当的数据库。任何其他选项都只是对排序大量数据的一般问题的更具体的解决方案。毕竟,这正是数据库的用途,而且它做得很好。

如果您真的认为您的选项 3 不是好的解决方案,那么您可以实现排序/合并 解决方案。像您已经做的那样收集您的 Map,但是当您达到记录的限制(比如 10,000 条)时,对它们进行排序,将它们写入磁盘并从内存中清除它们。

数据完成后,您现在可以打开您编写的所有文件并对它们执行合并。

关于java - 在 Java 中过滤/排序大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13971408/

相关文章:

java - 从工作区的文件夹中检索文件

java - JFreeChart 沿 x 轴的多个工具提示

java - 如何按升序对 IntStream 进行排序?

node.js - 多个字段上的 Mongoose 过滤(搜索)

java - 如何使命令按钮在 JSF 2.0 的窗体外工作

objective-c - 使用自定义类根据其他数组对 NSArray 进行排序

swift - 按 Swift 3 部分的字母顺序对 tableView 中的 Realm 数据进行排序

reactjs - 为什么在其( react 表)数据更改时会重置 react 表分页和过滤器?

javascript - 对于具有多个数组的对象,根据检查同一数组内的两个值返回数组

java - 双向 onetomany 不更新外键