创建和分布表 要创建分布式表,您需要首先定义表 schema. 为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样. CREATE TABLE http://www.postgresql.org/docs/current/static/sql-createtable.html CREATE TABLE github_events ( event_id bigint, event_type text, event_public boolean,…
插入数据 要将数据插入分布式表,您可以使用标准 PostgreSQL INSERT 命令.例如,我们从 Github 存档数据集中随机选择两行. INSERT http://www.postgresql.org/docs/current/static/sql-insert.html /* CREATE TABLE github_events ( event_id bigint, event_type text, event_public boolean, repo_id bigint, payl…
如前几节所述,Citus 是一个扩展,它扩展了最新的 PostgreSQL 以进行分布式执行.这意味着您可以在 Citus 协调器上使用标准 PostgreSQL SELECT 查询进行查询. Citus 将并行化涉及复杂选择.分组和排序以及 JOIN 的 SELECT 查询,以加快查询性能.在高层次上,Citus 将 SELECT 查询划分为更小的查询片段,将这些查询片段分配给 worker,监督他们的执行,合并他们的结果(如果需要,对它们进行排序),并将最终结果返回给用户. SELECT h…
一个 Citus 集群由一个 coordinator 实例和多个 worker 实例组成. 数据在 worker 上进行分片和复制,而 coordinator 存储有关这些分片的元数据.向集群发出的所有查询都通过 coordinator 执行. coordinator 将查询划分为更小的查询片段,其中每个查询片段可以在分片上独立运行.然后协调器将查询片段分配给 worker,监督他们的执行,合并他们的结果,并将最终结果返回给用户. 查询处理架构可以通过下图进行简要描述. Citus 的查询处理管…
手动查询传播 当用户发出查询时,Citus coordinator 将其划分为更小的查询片段,其中每个查询片段可以在工作分片上独立运行.这允许 Citus 将每个查询分布在集群中. 但是,将查询划分为片段的方式(以及传播哪些查询)因查询类型而异. 在某些高级情况下,手动控制此行为很有用. Citus 提供实用函数来将 SQL 传播到 workers.shards 或 placements. 手动查询传播绕过 coordinator 逻辑.锁定和任何其他一致性检查. 这些函数可作为最后的手段,以允…
由于 Citus 通过扩展 PostgreSQL 提供分布式功能,因此它与 PostgreSQL 结构兼容.这意味着用户可以使用丰富且可扩展的 PostgreSQL 生态系统附带的工具和功能来处理使用 Citus 创建的分布式表. Citus 对它能够在单个工作节点上执行的任何查询具有 100% 的 SQL 覆盖率. 在访问有关单个租户的信息时,此类查询在多租户应用程序中很常见. 甚至跨节点查询(用于并行计算)也支持大多数 SQL 功能. 但是,组合来自多个节点的信息的查询不支持某些 SQL 功…
将现有应用程序迁移到 Citus 有时需要调整 schema 和查询以获得最佳性能. Citus 扩展了 PostgreSQL 的分布式功能,但它不是扩展所有工作负载的直接替代品.高性能 Citus 集群需要考虑数据模型.工具和所使用的 SQL 功能的选择. 第一步是优化现有的数据库模式,以便它可以在多台计算机上高效工作. 确定分布策略 选择分布键(distribution key) 识别表的类型 为迁移准备源表 添加分布键 回填新创建的列 接下来,更新应用程序代码和查询以处理 schema 更…
确定应用程序类型 在 Citus 集群上运行高效查询要求数据在机器之间正确分布.这因应用程序类型及其查询模式而异. 大致上有两种应用程序在 Citus 上运行良好.数据建模的第一步是确定哪些应用程序类型更接近您的应用程序. 概览 多租户应用 实时应用 有时 schema 中有几十个或数百个表 表数量少 一次与一个租户(公司/商店)相关的查询 具有聚合的相对简单的分析查询 用于服务 Web 客户端的 OLTP 工作负载 摄取大量几乎不可变的数据 为每个租户分析查询提供服务的 OLAP 工作负载 通…
多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用单节点 Citus 中的选项之一在本地设置 Citus. https://docs.citusdata.com/en/v10.2/installation/single_node.html#development 数据模型和示例数据 我们将演示为广告分析应用程序构建数据库,公司可以使用该应用程序来查…
准备工作 这里假设,你已经在 k8s 上部署好了基于 Citus 扩展的分布式 PostgreSQL 集群. 查看 Citus 集群(kubectl get po -n citus),1 个 Coordinator(协调器) 节点 + 3 个 Worker(工作器) 节点. NAME READY STATUS RESTARTS AGE citus-coordinator-0 2/2 Running 0 3h55m citus-worker-0 2/2 Running 0 22m citus-wo…