各位大大好
想請教一個DB問題
目前小弟遇到的狀況是,我有一堆爬蟲在爬資料,他們分別會將爬到的資料寫入不同的 table 中,但是因為網站端基於希望 query 方便的理由,想讓所有 table 都變成一張總表,這樣他們只要針對單一 table 的 ID 去做 filter 就好。
因此我想問的是,有沒有辦法可以自動產生一張總表,當我的爬蟲各自寫入各自的 table 時,讓 MySQL 內部自動去對總表做刪減,就是說,這張總表會永遠顯示所有 table 的集合?
可以建立view並使用 uion
假如確定資料不會重複使用 union all
,如下
--建立view
select * from table1
union all
select * from table2
union all
select * from table3
- 爬蟲的資料欄位 未來可能有變動可能,因此分開 table 存取,對於管理以及擴充彈性我覺得比較大
回答 : 個人在沒有千萬筆資料情況,不會做分表動作,因為管理複雜度會增加
CP不高,僅提供參考
- 如果所有資料一開始就存進同一個table,我很擔心會不會塞車導致存入速度過慢的可能這是我的猜測,不知道實際會不會這樣發生,希望有大大了解的可以協助解答。
回答 : 影響很小,在沒有大數據情況,我不會擔心
- 爬蟲的資料欄位 未來可能有變動可能,因此分開 table 存取,對於管理以及擴充彈性我覺得比較大
基本這樣的方式,我會區分主表+對應表。當然,主表主要是為了統一化的數值。
但如果統一化的數值根本就沒有的情況下。就不建議這樣子做
這時候 暐翰 的做法,反而比較好。
先各別去處理各別的資料,再用view來統整資料。
- 如果所有資料一開始就存進同一個table,我很擔心會不會塞車導致存入速度過慢的可能這是我的猜測,不知道實際會不會這樣發生,希望有大大了解的可以協助解答。
這其實就是我上面說的,如果你能用一個主表來建立所有爬蟲的共用值。再生成對應表來各別建立。
這樣也是一種方式。只是這樣關聯跟sql的語法要設定好就是了。比較偏向專庫管理的知識。
且在考量上也需要決定是否有其必要性。
因為這樣的規劃很麻煩。要考量一下必要性。
有些架構師就是教你一個案子/項目建一個(堆)分表TABLE(S)
比如現在有3個專案,分別是A2020005 A2020006 A2020007
那資料庫裡弄出了
MAIN_A2020005 DETAIL_A2020005 JOB_A2020005
MAIN_A2020006 DETAIL_A2020006 JOB_A2020006
..........
過了幾年後出現了成千上萬的表TABLES.........我保証你以後會整理到瘋掉!如果是在WINDOWS裡有個資料夾弄出了成千上萬個檔案,這個資料夾還會非常容易損壞
我還是喜歡資料庫建立時有20個表,經過十年還是20個表,表裡用專案編號做PK即可
沒事真的別分表,沒有比較好!
但如果樓主執意要用分表的方式,那請再多用一個表來儲存分表關鍵名,再做VIEW拉總表,VIEW裡就先抓分表名的TABLE抓所有附加的TABLE,再去JOIN出總表來
寫入時根據filter另外寫進供查詢的表
或是每天排程根據query需求進行表的彙整資料
寫進另外一個database