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

时间:2018-01-12 23:04:04

标签: java mysql shell

我需要每天运行1000个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中有更好的方法吗?谷歌说它为每个查询(线程)打开mysql连接的昂贵,而java程序运行mysql命令shell脚本是不能按预期工作的。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

通常,最好在结果集中编写更少的返回更多行信息的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脚本运行数千个查询的想法将起作用。但它本质上很慢。并且,很难并行化。运行一个查询要好得多,特别是如果可以将数千个查询减少到一个查询。