Citus 11 官方手冊腦圖 - PostgreSQL 超大規模分散式資料庫解決方案上手指南
腦圖大綱
- 入門
- 什麼是Citus?
- Citus 可以擴充套件多遠?
- 何時使用 Citus
- 多租戶資料庫
- 實時分析
- 使用注意事項
- 何時 Citus 不合適
- 快速教程
- 多租戶應用程式
- 資料模型和示例資料
- 建立表
- 分發表和載入資料
- 執行查詢
- 實時分析
- 資料模型和樣本資料
- 建立表
- 分發表和載入資料
- 執行查詢
- 多租戶應用程式
- 什麼是Citus?
- 安裝
- 單節點 Citus
- Docker (Mac 或 Linux)
- Ubuntu 或 Debian
- Fedora, CentOS, 或 Red Hat
- 多節點 Citus
- Ubuntu 或 Debian
- 在所有節點上執行的步驟
- 在協調器節點上執行的步驟
- Fedora, CentOS, 或 Red Hat
- 在所有節點上執行的步驟
- 在協調器節點上執行的步驟
- Ubuntu 或 Debian
- 託管部署
- 單節點 Citus
- 用例指南
- 多租戶應用程式
- 讓我們做一個 App - 廣告分析
- 擴充套件關係資料模型
- 準備表和攝取資料
- 自己試試
- 整合應用程式
- 在租戶之間共享資料
- 線上更改 Schema
- 當租戶的資料不同時
- 擴充套件硬體資源
- 與大租戶打交道
- 從這往哪兒走
- 實時面板
- 資料模型
- 彙總
- 過期的舊資料
- 近似相異計數
- 使用 JSONB 的非結構化資料
- 時間序列資料
- 擴充套件 Citus 上的時間序列資料
- 自動建立分割槽
- 使用列式儲存歸檔
- 將行分割槽歸檔到列式儲存
- 多租戶應用程式
- 架構
- 概念
- 節點
- 協調器與工作器
- 分散式資料
- 表型別
- 型別 1:分散式表
- 型別 2:引用表
- 型別 3:本地表
- 分片
- 分片放置
- 共置
- 並行性
- 表型別
- 查詢執行
- 節點
- 概念
- 開發
- 確定應用程式型別
- 概覽
- 示例和特徵
- 選擇分佈列
- 多租戶應用
- 最佳實踐
- 實時應用
- 最佳實踐
- 時間序列資料
- 最佳實踐
- 表共置
- Citus 中用於 hash-distributed 表的資料共置
- 共置的實際示例
- 使用常規 PostgreSQL 表
- 按 ID 分佈表
- 按租戶分佈表
- 共置意味著更好的功能支援
- 查詢效能
- 多租戶應用
- 遷移現有應用程式
- 確定分佈策略
- 選擇分佈鍵
- 確定表的型別
- 為遷移準備源表
- 新增分佈鍵
- 回填新建立的列
- 準備申請 Citus
- 設定 Development Citus 叢集
- 在鍵中包含分佈列
- 向查詢新增分佈鍵
- Ruby on Rails
- Django
- ASP.NET
- Java Hibernate
- 其他(SQL原則)
- 啟用安全連線
- 檢查跨節點流量
- 設定 Development Citus 叢集
- 遷移生產資料
- 小型資料庫遷移
- 大資料庫遷移
- 複製 schema
- 啟用邏輯複製
- 開放訪問網路連線
- 開始複製
- 切換到 Citus 並停止與舊資料庫的所有連線
- 確定分佈策略
- SQL 參考
- 建立和修改分散式物件 (DDL)
- 建立和分發表
- 引用表
- 分發協調器資料
- 共置表
- 從 Citus 5.x 升級
- 刪除表
- 修改表
- 新增/修改列
- 新增/刪除約束
- 使用 NOT VALID 約束
- 新增/刪除索引
- 型別和函式
- 手動修改
- 建立和分發表
- 攝取、修改資料 (DML)
- 插入資料
- “From Select” 子句(分散式彙總)
- COPY 命令(批量載入)
- 插入資料
- 使用匯總快取聚合
- 更新和刪除
- 最大化寫入效能
- 查詢分散式表 (SQL)
- 聚合函式
- Count (Distinct) 聚合
- 估計 Top N 項
- 百分位數計算
- 限制下推
- 分散式表的檢視
- 連線
- 共置連線
- 引用表連線
- 重新分割槽連線
- 聚合函式
- 查詢處理
- 分散式查詢規劃器
- 分散式查詢執行器
- 子查詢/CTE Push-Pull 執行
- PostgreSQL 規劃器和執行器
- 手動查詢傳播
- 在所有 Worker 上執行
- 在所有分片上執行
- 限制
- SQL 支援和解決方法
- 解決方法
- 使用 CTE 解決限制
- 臨時表:不得已的解決方法
- 解決方法
- 建立和修改分散式物件 (DDL)
- Citus API
- Citus 效用函式
- 表和分片 DDL
- create_distributed_table
- truncate_local_data_after_distributing_table
- undistribute_table
- alter_distributed_table
- alter_table_set_access_method
- remove_local_tables_from_metadata
- create_reference_table
- citus_add_local_table_to_metadata
- mark_tables_colocated
- update_distributed_table_colocation
- create_distributed_function
- alter_columnar_table_set
- create_time_partitions
- drop_old_time_partitions
- alter_old_partitions_set_access_method
- 元資料/配置資訊
- citus_add_node
- citus_update_node
- citus_set_node_property
- citus_add_inactive_node
- citus_activate_node
- citus_disable_node
- citus_add_secondary_node
- citus_remove_node
- citus_get_active_worker_nodes
- citus_backend_gpid
- citus_check_cluster_node_health
- citus_set_coordinator_host
- master_get_table_metadata
- get_shard_id_for_distribution_column
- column_to_column_name
- citus_relation_size
- citus_table_size
- citus_total_relation_size
- citus_stat_statements_reset
- 叢集管理與修復函式
- citus_move_shard_placement
- rebalance_table_shards
- get_rebalance_table_shards_plan
- get_rebalance_progress
- citus_add_rebalance_strategy
- citus_set_default_rebalance_strategy
- citus_remote_connection_stats
- citus_drain_node
- isolate_tenant_to_new_shard
- citus_create_restore_point
- 表和分片 DDL
- Citus 表和檢視
- 協調器元資料
- 分割槽表
- 分片表
- 分片資訊檢視
- 分片放置表
- 工作器節點表
- 分散式物件表
- Citus 表檢視
- 時間分割槽檢視
- 歸置組表
- 再平衡器策略表
- 查詢統計資訊表
- 分散式查詢活動
- 所有節點上的表
- 連線憑證表
- 連線池憑證
- 協調器元資料
- 配置參考
- 通用配置
- citus.max_worker_nodes_tracked (integer)
- citus.use_secondary_nodes (enum)
- citus.cluster_name (text)
- citus.enable_version_checks (boolean)
- citus.log_distributed_deadlock_detection (boolean)
- citus.distributed_deadlock_detection_factor (floating point)
- citus.node_connection_timeout (integer)
- citus.node_conninfo (text)
- citus.local_hostname (text)
- citus.show_shards_for_app_name_prefixes (text)
- 查詢統計
- citus.stat_statements_purge_interval (integer)
- citus.stat_statements_max (integer)
- citus.stat_statements_track (enum)
- 資料載入
- citus.multi_shard_commit_protocol (enum)
- citus.shard_count (integer)
- citus.shard_max_size (integer)
- citus.replicate_reference_tables_on_activate (boolean)
- 規劃器配置
- citus.local_table_join_policy (enum)
- citus.limit_clause_row_fetch_count (integer)
- citus.count_distinct_error_rate (floating point)
- citus.task_assignment_policy (enum)
- 中間資料傳輸
- citus.binary_worker_copy_format (boolean)
- citus.max_intermediate_result_size (integer)
- DDL
- citus.enable_ddl_propagation (boolean)
- citus.enable_local_reference_table_foreign_keys (boolean)
- 執行器配置
- 通用
- Explain 輸出
- 通用配置
- Citus 效用函式
- 外部整合
- 從 Kafka 提取資料
- 注意事項
- 從 Spark 攝取資料
- Tableau 的商業智慧
- 從 Kafka 提取資料
- 確定應用程式型別
- 管理
- 叢集管理
- 選擇叢集大小
- 分片數
- 多租戶 SaaS 用例
- 實時分析用例
- 分片數
- 初始硬體大小
- 多租戶 SaaS 用例
- 實時分析用例
- 擴充套件叢集
- 新增 worker
- 無需停機即可重新平衡分片
- 工作原理
- 新增協調器
- 處理節點故障
- 工作節點故障
- 協調節點故障
- 租戶隔離
- 檢視查詢統計資訊
- 統計過期
- 資源保護
- 限制長時間執行的查詢
- 安全
- 連線管理
- 設定證書頒發機構簽署的證書
- 提高 Worker 安全
- 行級安全
- PostgreSQL 擴充套件
- 建立新資料庫
- 選擇叢集大小
- 表管理
- 確定表和關係大小
- 清理分散式表
- 分析分散式表
- 列式儲存
- 用法
- 測量壓縮
- 例子
- 陷阱
- 限制
- 升級 Citus
- 升級 Citus 版本
- 補丁版本升級
- 主要和次要版本升級
- 步驟 1. 更新 Citus 包
- 步驟 2. 在資料庫中應用更新
- 將 PostgreSQL 版本從 13 升級到 14
- 對於每個節點
- 升級 Citus 版本
- 叢集管理
- 故障排除
- 查詢效能調優
- 表分佈和分片
- PostgreSQL 調優
- 橫向擴充套件效能
- 分散式查詢效能調優
- 通用
- 子查詢/CTE 網路開銷
- 高階
- 連線管理
- 任務分配策略
- 中間資料傳輸格式
- 二進位制協議
- 通用
- 橫向擴充套件資料攝取
- 實時插入和更新
- 插入吞吐量
- 更新吞吐量
- 插入和更新:吞吐量清單
- 插入和更新:延遲
- 臨時暫存資料
- 批量複製 (250K - 2M/s)
- 實時插入和更新
- 有用的診斷查詢
- 查詢哪個分片包含特定租戶的資料
- 查詢表的分佈列
- 檢測鎖
- 查詢分片的大小
- 查詢所有分散式表的大小
- 識別未使用的索引
- 監控客戶端連線數
- 檢視系統查詢
- 活動查詢
- 為什麼查詢等待
- 索引命中率
- 快取命中率
- 常見錯誤資訊
- 無法接收查詢結果
- 解決方法
- 取消事務,因為它涉及分散式死鎖
- 解決方法
- 無法連線到伺服器:無法分配請求的地址
- 解決方法
- SSL 錯誤:證書驗證失敗
- 解決方法
- 無法連線到任何活動的放置
- 解決方法
- 剩餘的連線槽保留給非複製超級使用者連線
- 解決方法
- PgBouncer 無法連線到伺服器
- 解決方法
- 關係 foo 沒有被分發
- 解決方法
- 不支援的子句型別
- 解決方法
- 在事務中執行第一個修改命令後,無法開啟新連線
- 解決方法
- 無法建立唯一性約束
- 解決方法
- 函式 create_distributed_table 不存在
- 解決方法
- 不能使用列引用呼叫 UPDATE 查詢中使用的 STABLE 函式
- 解決方法
- 無法接收查詢結果
- 查詢效能調優
- FAQ
- 常見問題
- 我可以在分散式表上建立主鍵嗎?
- 如何將節點新增到現有 Citus 叢集?
- Citus 如何處理工作節點的故障?
- Citus 如何處理協調節點的故障轉移?
- Citus 是否不支援任何 PostgreSQL 功能?
- 對資料進行雜湊分割槽時如何選擇分片數?
- 如何更改雜湊分割槽表的分片數?
- citus 如何支援 count(distinct) 查詢?
- 分散式表在哪些情況下支援唯一性約束?
- 如何在 Citus 叢集中建立資料庫角色、功能、擴充套件等?
- 如果工作節點的地址發生變化怎麼辦?
- 哪個分片包含特定租戶的資料?
- 我忘記了表的分佈列,如何找到?
- 我可以通過多個鍵分發表嗎?
- 為什麼 pg_relation_size 報告分散式表的零位元組?
- 為什麼我看到有關 max_intermediate_result_size 的錯誤?
- 我可以在 Microsoft Azure 上執行 Citus 嗎?
- 對於多租戶應用程式,我可以在 Citus 上按 schema 分片嗎?
- cstore_fdw 如何與 Citus 一起工作?
- pg_shard 發生了什麼?
- 常見問題
- 博文
- Postgres 中使用 HyperLogLog 的高效彙總表
- 沒有 HLL 的彙總表 — 以 GitHub 事件資料為例
- 沒有 HLL,彙總表有一些限制
- HLL 來拯救
- HLL 和彙總表一起使用
- HLL 可以回答哪些型別的查詢?
- 一個帶有 HLL 的彙總表勝過一千個沒有 HLL 的彙總表
- 想了解更多關於 Postgres 中的 HLL 的資訊嗎?
- Postgres 上使用 HyperLogLog 的分散式不同計數
- HLL 在幕後做什麼?
- 雜湊所有的元素
- 觀察資料中的罕見模式
- 隨機平均
- 更多?
- 分散式系統中的HLL
- 親身體驗 HLL
- 設定
- 例子
- 結論
- HLL 在幕後做什麼?
- Citus 中的 Postgres 並行索引
- 使用 Postgres 和 Citus 進行大規模實時事件聚合
- PostgreSQL 和 Citus 上的分散式外連線如何工作
- Citus 的分散式外連線
- 使用 Postgres 設計 SaaS 資料庫以實現擴充套件
- 使用 Citus 擴充套件構建可擴充套件的 Postgres 指標後端
- 時間序列指標
- 事件
- 使用 Postgres 對多租戶應用進行分片
- 租約
- 多租戶和託管,完美的一對
- 綜上所述
- 使用半結構化資料對 Postgres 進行分片及其對效能的影響
- 一張大表,沒有連線
- 進入 Citus
- 查詢工作負載
- Every distribution has its thorns
- 使用 PostgreSQL 和 Citus 進行可擴充套件的實時產品搜尋
- Postgres 中使用 HyperLogLog 的高效彙總表
官方最新手冊
http://docs.citusdata.com
「其他文章」
- Citus 11 官方手冊腦圖 - PostgreSQL 超大規模分散式資料庫解決方案上手指南
- emlab,一款分析 JavaScript 堆並查詢瀏覽器和 Node.js 中記憶體洩漏的開源框架 原創 為少 黑客下午茶
- 在 Traefik Proxy 2.5 中使用/開發私有外掛(Traefik 官方部落格)
- 從 Notion 分片 Postgres 中吸取的教訓(Notion 工程團隊)
- Citus 11(分散式 PostgreSQL) 文件貢獻與本地執行
- 分散式 PostgreSQL - Citus 架構及概念
- Sentry 監控 - Snuba 資料中臺架構(SnQL 查詢語言簡介)
- Sentry 監控 - Snuba 資料中臺架構(編寫和測試 Snuba 查詢)
- Sentry 官方 JavaScript SDK 簡介與除錯指南
- Sentry 監控 - Snuba 資料中臺架構(Data Model 簡介)
- Sentry 監控 - 全棧開發人員的分散式跟蹤 101 系列教程(第一部分)
- Sentry 監控 - Distributed Tracing 分散式跟蹤
- Sentry 監控 - Environments 區分不同部署環境的事件資料
- Sentry 後端監控 - 最佳實踐(官方教程)
- Longhorn 雲原生分散式塊儲存解決方案設計架構和概念
- 試玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神經進化)與 Golang 多人線上遊戲開發
- Sentry(v20.12.1) K8S 雲原生架構探索,JavaScript Enriching Events(豐富事件資訊)
- Sentry(v20.12.1) K8S 雲原生架構探索,JavaScript 效能監控之取樣 Transactions
- Sentry(v20.12.1) K8S 雲原生架構探索,JavaScript 效能監控之管理 Transactions
- 如何構建一個多人(.io) Web 遊戲,第 2 部分