成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Citus 分布式 PostgreSQL 集群 - SQL Reference(手動查詢傳播)

數(shù)據(jù)庫 PostgreSQL
最精細(xì)的執(zhí)行級別是在所有分片及其副本(也稱為放置)上運行命令。它對于運行數(shù)據(jù)修改命令很有用,這些命令必須應(yīng)用于每個副本以確保一致性。

手動查詢傳播

當(dāng)用戶發(fā)出查詢時,Citus coordinator 將其劃分為更小的查詢片段,其中每個查詢片段可以在工作分片上獨立運行。這允許 Citus 將每個查詢分布在集群中。

但是,將查詢劃分為片段的方式(以及傳播哪些查詢)因查詢類型而異。 在某些高級情況下,手動控制此行為很有用。 Citus 提供實用函數(shù)來將 SQL 傳播到 workers、shards 或 placements。

手動查詢傳播繞過 coordinator 邏輯、鎖定和任何其他一致性檢查。 這些函數(shù)可作為最后的手段,以允許 Citus 否則不會在本機運行的語句。小心使用它們以避免數(shù)據(jù)不一致和死鎖。

在所有 Worker 上運行

最小的執(zhí)行級別是廣播一條語句以在所有 worker 上執(zhí)行。這對于查看整個工作數(shù)據(jù)庫的屬性很有用。

-- List the work_mem setting of each worker database
SELECT run_command_on_workers($cmd$ SHOW work_mem; $cmd$);

注意: 不應(yīng)使用此命令在 worker 上創(chuàng)建數(shù)據(jù)庫對象,因為這樣做會使以自動方式添加 worker 節(jié)點變得更加困難。

注意: 本節(jié)中的 run_command_on_workers 函數(shù)和其他手動傳播命令只能運行返回單列單行的查詢。

在所有分片上運行

下一個粒度級別是在特定分布式表的所有分片上運行命令。例如,在直接在 worker 上讀取表的屬性時,它可能很有用。 在 worker 節(jié)點上本地運行的查詢可以完全訪問元數(shù)據(jù),例如表統(tǒng)計信息。

run_command_on_shards 函數(shù)將 SQL 命令應(yīng)用于每個分片,其中提供分片名稱以在命令中進行插值。 這是一個估計分布式表行數(shù)的示例,通過使用每個 worker 上的 pg_class 表來估計每個分片的行數(shù)。 請注意將替換為每個分片名稱的 %s。

-- Get the estimated row count for a distributed table by summing the
-- estimated counts of rows for each shard.
SELECT sum(result::bigint) AS estimated_count
FROM run_command_on_shards(
'my_distributed_table',
$cmd$
SELECT reltuples
FROM pg_class c
JOIN pg_catalog.pg_namespace n on n.oid=c.relnamespace
WHERE (n.nspname || '.' || relname)::regclass = '%s'::regclass
AND n.nspname NOT IN ('citus', 'pg_toast', 'pg_catalog')
$cmd$
);

在所有放置上運行

最精細(xì)的執(zhí)行級別是在所有分片及其副本(也稱為放置)上運行命令。它對于運行數(shù)據(jù)修改命令很有用,這些命令必須應(yīng)用于每個副本以確保一致性。

例如,假設(shè)一個分布式表有一個 updated_at 字段,我們想要“觸摸”所有行,以便在某個時間將它們標(biāo)記為已更新。coordinator 上的普通 UPDATE 語句需要按分布列進行過濾,但我們可以手動將更新傳播到所有分片和副本:

-- note we're using a hard-coded date rather than
-- a function such as "now()" because the query will
-- run at slightly different times on each replica

SELECT run_command_on_placements(
'my_distributed_table',
$cmd$
UPDATE %s SET updated_at = '2017-01-01';
$cmd$
);

run_command_on_placements 的一個有用伴侶是 run_command_on_colocated_placements。 它將位于共置的分布式表的兩個位置的名稱插入到查詢中。放置對總是被選擇為本地的同一個 worker,其中完整的 SQL 覆蓋是可用的。因此,我們可以使用觸發(fā)器等高級 SQL 功能來關(guān)聯(lián)表:

-- Suppose we have two distributed tables
CREATE TABLE little_vals (key int, val int);
CREATE TABLE big_vals (key int, val int);
SELECT create_distributed_table('little_vals', 'key');
SELECT create_distributed_table('big_vals', 'key');

-- We want to synchronize them so that every time little_vals
-- are created, big_vals appear with double the value
--
-- First we make a trigger function, which will
-- take the destination table placement as an argument
CREATE OR REPLACE FUNCTION embiggen() RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'INSERT') THEN
EXECUTE format(
'INSERT INTO %s (key, val) SELECT ($1).key, ($1).val*2;',
TG_ARGV[0]
) USING NEW;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Next we relate the co-located tables by the trigger function
-- on each co-located placement
SELECT run_command_on_colocated_placements(
'little_vals',
'big_vals',
$cmd$
CREATE TRIGGER after_insert AFTER INSERT ON %s
FOR EACH ROW EXECUTE PROCEDURE embiggen(%L)
$cmd$
);

限制

多語句事務(wù)沒有防止死鎖的安全措施。

沒有針對中間查詢失敗和由此產(chǎn)生的不一致的安全措施。

查詢結(jié)果緩存在內(nèi)存中; 這些函數(shù)無法處理非常大的結(jié)果集。

如果無法連接到節(jié)點,這些函數(shù)會提前出錯。

你可以做很壞的事情!

責(zé)任編輯:武曉燕 來源: 黑客下午茶
相關(guān)推薦

2022-03-30 19:18:31

PostgreSQL分布式I/O

2022-03-29 23:17:52

PostgreSQL集群Citus

2022-04-01 19:26:15

PostgreSQLCitus分布式

2022-03-27 06:37:37

SQLPostgreSQL集群

2022-03-28 13:13:58

分布列CitusPostgreSQ

2022-03-21 06:45:22

PostgreSQL數(shù)據(jù)庫Citus

2022-03-06 21:43:05

Citus架構(gòu)PostgreSQL

2022-03-17 18:52:41

PostgreSQ序列數(shù)據(jù)集群

2022-03-24 14:11:25

KubernetesCitusPostgreSQL

2022-03-22 11:35:10

數(shù)據(jù)建模PostgreSQLCitus

2022-03-21 19:44:30

CitusPostgreSQ執(zhí)行器

2022-03-16 19:15:32

PostgreSQL日志Kafka

2022-03-15 19:19:04

分布式PostgreSQL集群

2022-03-14 19:40:40

PostgreSQL多租戶應(yīng)用程序Citus

2022-10-21 16:16:42

分布式系統(tǒng)優(yōu)化

2010-09-10 08:54:02

2010-07-06 09:39:20

SQL Server分

2025-03-27 11:03:18

2020-06-02 14:45:48

PostgreSQL架構(gòu)分布式

2017-09-11 15:17:01

分布式集群負(fù)載均衡
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜欧美一区二区三区在线播放 | 懂色中文一区二区在线播放 | 亚洲国产高清在线观看 | 91不卡在线 | 久久99精品久久久水蜜桃 | av一区二区三区 | 日韩欧美一区二区三区免费观看 | www.色午夜.com | 九色网址| 亚洲h色 | 日韩精品在线看 | 青青草在线视频免费观看 | 成人三级视频 | 国产一区二区在线观看视频 | 久久影音先锋 | 国产高清在线 | 亚洲综合伊人 | 最新国产精品精品视频 | 亚洲人精品午夜 | 国产精品国产三级国产aⅴ中文 | 亚洲网在线 | 亚洲一区自拍 | www.天天操.com| 超碰在线播 | 狠狠操天天操 | 亚洲 欧美 日韩在线 | 天天干天天爽 | 精品欧美一区二区三区精品久久 | 欧美男人天堂 | 国产乱一区二区三区视频 | 亚洲视频一区二区三区 | 亚洲在线免费观看 | 欧美一级片在线看 | 国产精品久久久久无码av | 日韩精品三区 | 一级片视频免费观看 | 成人在线小视频 | 久草中文在线 | 亚洲人在线 | 在线免费观看一区二区 | 91大神新作在线观看 |