[問題] 用資料庫比對或是AP比對
請問各位大德
假設有兩百個檔案(或更多)
每個檔案筆數是40000(四萬)筆
資料庫資料大約是幾千萬筆
目標是要將每個檔案去碰資料庫內存有的資料,然後做比對
環境只能用 UNIX的/bin/sh 和資料庫
那該怎麼做會比較佳呢?
檔案內容比如說:
number|starttime|endtime|sum
1111|04/01/2015|04/30/2015|10
1111|04/01/2015|04/30/2015|30
2222|04/01/2015|04/30/2015|20
2222|04/01/2015|04/30/2015|40
5555|04/01/2015|04/30/2015|10
9999|04/01/2015|04/30/2015|7
要將檔案的number去和資料庫內的某個table碰number後,得到number2(primary key)
再去其他table用number2做搜尋且加總用量(sum),然後比對!
目前的做法:
寫迴圈一個一個檔案load進資料庫temp table內
用sql去執行比對再unload下來,但是效能不佳(每個檔案都要跑大概15~20分鐘)
temp table加上index似乎也不會變快
改良的想法:
目前我想到的改良作法是一次將資料庫所需資料unload下來
再用程式(可能開五支或更多背景程式)去執行grep之類的
這樣也不會耗太多DB資源
這樣會不會有點多餘或是這是糟糕的想法呢?
是否請大德們可以給點建議或是提示呢?
謝謝 ^^
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.235.82.125
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1433067117.A.448.html
→
05/31 18:13, , 1F
05/31 18:13, 1F
→
05/31 18:15, , 2F
05/31 18:15, 2F
→
05/31 18:49, , 3F
05/31 18:49, 3F
大大您好
我sql比對寫法是包在shell內,內容大意如下:
for迴圈
do
db語法 << EOF
create temp table aa(...省略 ) with no log;
load from 檔案 insert into aa;
unload to mydata.txt
select 所需欄位 from aa a, XXXtable b, outer XXXtable c
where b.id=a.id
and b.id=c.id
and (...這裡下的一堆條件都是按照資料庫現有index順序下的)
group by 欄位
EOF
done
其實就是這樣而已,並沒有甚麼特別之處
但是就是很慢
不管是條件順序或是temp table的index我都調過或加過
DB不只我程式會執行 還有其他人程式也會去做其他作業
不曉得大大覺得哪邊可以調整呢? :D
※ 編輯: smallyou1988 (182.235.82.125), 05/31/2015 22:25:19
※ 編輯: smallyou1988 (182.235.82.125), 05/31/2015 22:27:01
→
05/31 22:52, , 4F
05/31 22:52, 4F
→
05/31 22:53, , 5F
05/31 22:53, 5F
→
06/02 20:29, , 6F
06/02 20:29, 6F
→
06/02 20:29, , 7F
06/02 20:29, 7F
→
06/03 07:15, , 8F
06/03 07:15, 8F
→
06/03 07:16, , 9F
06/03 07:16, 9F
→
06/03 07:18, , 10F
06/03 07:18, 10F
→
06/03 07:47, , 11F
06/03 07:47, 11F
→
06/03 07:48, , 12F
06/03 07:48, 12F
→
06/03 07:49, , 13F
06/03 07:49, 13F
→
06/05 17:25, , 14F
06/05 17:25, 14F
→
06/05 17:25, , 15F
06/05 17:25, 15F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章