使用springboot从Mysql获取数百万数据

我处于从Mysql向Springboot应用程序获取大量数据的情况。

那么有没有更好的方法来实现这种情况?

gouihk7 回答:使用springboot从Mysql获取数百万数据

最大的问题是:您要如何处理这1000万条记录? JPA主要适用于加载有限的对象图,然后您可以对其进行操作并将其刷新回数据库。 这仅适用于相当有限的数据量。 拥有大量数据时,开销变得令人望而却步,而收益往往消失了。

在没有任何进一步知识的情况下,我建议您退出JPA,并考虑使用更多底层方法来访问数据。 特别是Springs JdbcTemplate通常派上用场。 如果适用的话,这里还有使用RowCallbackHandler的方法,因为它不假定您将ResultSet转换为其他任何东西,而只是处理它,例如以便将数据写到一些文本文件中。

要处理的另一件事是Spring Batch

,
    用户一次无法在UI中显示
  1. 1000万条记录。我建议您通过UI导航保留每个页面上所需记录数的数量。
  2. 如果1000万条记录要在UI中再次进行交易,建议您在保存时将交易数据保留在这些行中,这样就不必再次进行迭代。
  3. 您可以标识唯一列并配置复合主键。这样会减少查询时间。
  4. 最小化联接。如果要联接太多表,请减少联接数。不要过度规范化数据库。
  5. 如果要以某种格式将图像保存在数据库中,请将其移动到文件系统,然后在数据库中保存文件系统路径和图像名称。
  6. 减少列数。例如:在100列中,您可能随时只需要5或10列即可在UI中显示,将它们保存在一个表中,而将95-90保留在另一表中。观察查询的长度。
  7. 使用连接池机制。
,

如果加载一百万行需要2-3秒,但是加载一千万行需要24分钟,那么我认为这是一个内存问题。 JPA维护了有关持久对象的许多其他信息,因此,只要对象位于事务内部,内存需求可能会比存储数据本身的实际需求高得多。

因此,将数据放在交易外部中,以较小的块(例如1百万)加载,然后手动将其组装为一个集合。 如果您需要这些记录来进行某种计算,那就足够了。 如果还需要进行更改,则需要处理这些更改并手动保存。

尽管我仍然相信,如果您与我们分享原始问题,我们可以找到更好的解决方案...

本文链接:https://www.f2er.com/3154530.html

大家都在问