官方手册:https://docs.citusdata.com
脑图大纲
- 入门
- 什么是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
- 查询工作负载
- 每个发行版都有它的刺
- 使用 PostgreSQL 和 Citus 进行可扩展的实时产品搜索
- Postgres 中使用 HyperLogLog 的高效汇总表
官方手册:https://docs.citusdata.com