0

我正在尝试创建一个 Web 应用程序,主要目标是将请求数据插入数据库。

这是我的问题,一个请求本身包含10,000到1,00,000个数据集的信息(每个数据集需要作为一行单独插入数据库中)

我可能会同时在此应用程序上收到多个请求,因此我有必要快速插入。

我正在使用 MySQL 数据库,哪种方法更适合我,LOAD DATA或者BATCH INSERT有比这两种更好的方法吗?

您的应用程序将如何检索此信息?- 将有另一个基于后台线程的 Java 应用程序,将从该表中选择记录,逐个处理并删除它们。

您可以将您的请求(批次)排队,以便您的系统一次处理一批吗?- 现在我们正在考虑直接将其插入数据库,但是如果这种方法不够可行,我们可能会考虑对数据进行排队。

信息的检索是否需要与新数据的插入同时进行?- 是的,我们保持同步。

以下是您问题的某些答案,奥利·琼斯

谢谢!

4

1 回答 1

1

Ken White 的评论提到了处理批量插入的几个有用的 SO 问题和答案。对于您正在处理的记录量,您将通过使用 MyISAM 表和LOAD DATA INFILE从 MySQL 服务器使用的同一文件系统中的源文件加载数据获得最大的成功。

你在这里做的是一种排队操作。您收到这些批次(您称它们为“请求”)的记录(您称它们为“数据集”。)您将它们放入一个大存储桶(您的 MySQL 表)中。然后您一次将它们从存储桶中取出。

你没有完全描述你的问题,所以我的建议可能是错误的。

每个记录(“数据集”)是否独立于所有其他记录?

处理记录的顺序是否重要?或者,如果您以随机顺序处理它们,您会获得相同的结果吗?换句话说,您是否必须维护各个记录的顺序?

如果您几乎同时收到两百万行批次(“请求”)会怎样?假设您可以每秒加载一万条记录(这很快!)到您的 MySQL 表中,这意味着完全加载两个批次需要 200 秒。您会在开始加载第二批之前尝试完全加载一批吗?

在批次完全加载之前开始处理和删除这些批次中的行是否可以?

记录在处理之前在您的系统中停留 200 秒或更长时间是否可以?一张唱片能放多久?(这称为“延迟”)。

鉴于您在这里提到的数据量,如果您要使用实时数据进行生产,您可能需要考虑使用 ActiveMQ 等排队系统而不是 DBMS。

简单地构建一个多线程 Java 应用程序来加载您的批次记录,将它们存入 RAM 中的 Queue 对象(一个ConcurrentLinkedQueue实例可能是合适的)并逐个处理它们也可能是有意义的。与使用 MySQL 表作为队列相比,这种方法可以让您更好地控制系统性能。

于 2013-01-20T17:33:44.613 回答