我需要每天运行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脚本是不能按预期工作的。
有什么建议吗?
答案 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脚本运行数千个查询的想法将起作用。但它本质上很慢。并且,很难并行化。运行一个查询要好得多,特别是如果可以将数千个查询减少到一个查询。