繁体   English   中英

如何通过Java同时运行数千个mysql select命令?

[英]How to run thousands mysql select commands through java simultaneously?

我需要每天运行数千次mysql选择查询,并将结果保存在不同的文件中(每个查询1个文件)。 当前,每个mysql select查询都通过shell脚本作为后台命令运行,如下所示

echo "select (CART_ID), '', (USER_ID) from shopping_cart where (
    DATE_MODIFIED >= '2018-01-08 00:00:00' 
    and DATE_MODIFIED < '2018-01-10 00:00:00'
)" | mysql -u <usr_name> -p<password> -h <host> -P 3306 \
    -D <schema< -C -N --default-character-set=utf8 > \ 
      /Users/selumalai/Desktop/520_250_493991738_shopping_cart_\
      2018_01_12_00_00_00.dat &

当前,大约有5个Shell脚本文件; 每个查询包含约250个类似的查询,并写入250个不同的文件。 因此,每天将有大约1000个文件。 要求不要加入查询以产生统一的结果。

用Java有更好的方法吗? Googling表示,为每个查询(线程)打开mysql连接并运行mysql命令shell脚本的Java程序无法正常运行,这很昂贵。

有什么建议吗?

通常,最好编写较少的SQL命令以返回结果集中更多的信息行,然后使用读取该数据的程序。

您可以尝试这种查询:

select DATE(DATE_MODIFIED), CART_ID, USER_ID 
 from shopping_cart
where DATE_MODIFIED >= CURDATE() - INTERVAL 60 DAY
  and DATE_MODIFIED < CURDATE()
  ORDER BY DATE(DATE_MODIFIED)

这将为您提供一个包含60天数据的结果集,第一列提供日期。 然后,您的Java程序可以遍历结果集并提取每天的信息。

如您所知,从shell脚本运行数千个查询的想法将起作用。 但这本质上是缓慢的。 并且,很难并行化。 您最好运行一个查询,尤其是如果可以将数千个查询简化为一个查询时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM