gpt4 book ai didi

java - 使用Java从Map中的MySQL表中检索百万条记录

转载 作者:行者123 更新时间:2023-11-29 21:30:04 25 4
gpt4 key购买 nike

我有以下问题:我有一个存储一些文件的应用程序,并且为每个文件在 MySQL 表中创建 2 个条目:文件的路径和一个值 X(可以在文件中找到的唯一标识符)。

相同的唯一标识符值也存储在文件本身中。

现在我编写了一个小程序,因为我们遇到了一些不一致,因为某些文件与数据库表中的路径相同,但文件本身的值 X 不同(文件中的值是正确的)。

我编写了一个 Java 应用程序:首先读取所有文件(使用 DCM4CHEE 库),将文件路径和值 X 存储在映射对象中(使用路径作为键)。然后使用查询读取 MySQL 表,将检索到的值(路径 + 值 X)存储在另一个映射中,最后比较 2 个映射并将不一致的记录写入文件。

不幸的是,在某些情况下,我们需要读取超过 2-3 百万个文件(以及 MySQL 表中的记录),这使得检索速度非常慢。这些文件需要单独读取(因为它们是使用特殊文件格式(DICOM)编写的医疗记录,我需要一个特殊的库来访问内容。

我的问题是:1 - 在 Java 中使用 Maps 存储超过 300 万条记录是否合适,还是我应该使用不同的对象?有没有更高效的方法?

2 - 为了从 MySQL 检索记录,我启动了一系列限制记录数量的查询(从记录 1 到 x,详细说明结果,然后再次从 x 到 y,详细说明,依此类推(y 到 z ...) 直到所有记录都被读取。我这样做是因为检索所有记录的单个查询需要非常长的时间。我正在做的事情正确吗?在 Java 中是否有更好的方法来做到这一点?

谢谢大家的帮助。

最佳答案

1 - is using Maps to store over 3 millions records appropriate in Java or shall I use a different Object? Is there something more efficient?

只要进程空间中有足够的可用内存来保存数据,映射就应该没问题。如果每个条目平均为 100 字节(听起来对于路径加 key 来说合适?),则最多需要 300MB。如果每个条目有 500 字节,那么您将看到 1.5GB。

2 - to retrieve the records from MySQL I launch a series of query limited on the number of records (from record 1 to x, elaborate the results, then again from x to y, elaborate, and so on (y to z...) until all records have been read. I do this as a single query to retrieve all records is taking extremely long.

在单个查询中读取所有记录通常不会有问题(尽管如果您使用 ORDER BY,在某些情况下可能会变得相对昂贵)。对于具有适当硬件和适当配置的 MySQL 系统来说,2-300 万条记录根本不算什么。

一些需要检查的事情:

  • 您的 MySQL 服务器配置正确吗?默认配置文件不是一个好的起点。
  • 您是否在属于 WHERE 或 ORDER BY 子句的任何字段上建立了索引?

关于java - 使用Java从Map中的MySQL表中检索百万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com