[英]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.