Postgresql
如何將並行導入與 COPY 同步?
我有大約 20 個同時建構的表,但
psql
在第一階段使用不同的程序(通過 bash 腳本),例如:create table foo_1 as (select ....); -- via psql process 1 create table foo_2 as (select ....); -- via psql process 2 create table foo_3 as (select ....); -- via psql process 3 ... create table foo_20 as (select ....); -- via psql process 20
一旦他們建成一個新的階段應該開始。有沒有什麼好的策略來協調這個多重建構?我的意思是,通過發現所有表都是從第 1 階段開始建構的,從而同步這兩個階段。
並行數據庫操作
有沒有什麼好的策略來協調這個多重建構?
好吧,執行需要多個數據庫連接的任務的正確方法是使用fork-exec(
spawn
在 Windows 上)。然後你在父母那裡等待孩子們回來。要獲得好評,請查看YouTube 上的此影片。它會在大約 27 分鐘內啟動 fork-exec。如果您是 Unix 新手,那麼整個影片可能正在觀看。儘管您的負載並行速度要快得多,但它不太可能,因為 CPU 不太可能是瓶頸。
從文件載入
如果它確實很重要,並且您是從文件載入而不是查詢簽出
pg_bulkload
而不是自己執行此操作。物化視圖
在您的情況下,您正在批量處理
CREATE TABLE AS SELECT
(CTAS
)。CTAS 對測試數據很有用。如果您正在做的不是測試數據,並且您正在刪除這些表並重新創建它們或類似的東西,那麼我強烈建議您檢查的是MATERIALIZED VIEWS
哪些甚至可以REFRESH MATERIALIZED VIEW CONCURRENTLY
,
REFRESH MATERIALIZED VIEW
完全替換物化視圖的內容。舊內容被丟棄。$$ … $$
CONCURRENTLY
刷新物化視圖而不鎖定物化視圖上的並發選擇。如果沒有此選項,影響大量行的刷新將傾向於使用更少的資源並更快地完成,但可能會阻止嘗試從物化視圖讀取的其他連接。在少量行受到影響的情況下,此選項可能會更快。