我有一个相当复杂的数据库查询,可为我提供3000万条记录,大约是可放入内存的数据量的15倍。我需要按顺序访问(即已排序)数据库中的所有记录。出于性能原因,不可能使用“ order by”语句,因为有序ResultSet
的准备大约需要40分钟。
我看到两个可能的选项来解决我的问题:
将结果数据转储到无序文件中,并使用某种形式的归并排序与已排序的文件一起到达
拼合数据并将其转储到辅助数据库中,然后使用数据库的排序机制对其进行重新选择。
出于优雅和性能的原因,您希望选择哪一种?
如果您选择的是第二个,是否对使用该数据库有建议?您希望使用SQLite,MySQL还是Apache Derby?
最佳答案
对于排序大量数据,一种解决方案是将它们排序为可以加载的数据块。例如30(15 * 2),然后对这些记录进行排序。这将为您提供30个排序的文件。
取30个排序文件,然后在它们之间进行合并排序。 (这需要在内存中至少包含30条记录),可以在对它们进行排序时对其进行处理。
顺便说一句:购买功能更强大的计算机也是有可能的。您可以以接近$ 1000的价格购买具有16 GB内存和SSD的PC。只需2000美元,您就可以得到一台具有32 GB内存的快速PC。这样可以节省很多时间。 ;)