簡體   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