如果您正在构建软件即服务 (SaaS) 应用程序,您可能已经在数据模型中内置了租赁的概念. 通常,大多数信息与租户/客户/帐户相关,并且数据库表捕获这种自然关系. 对于 SaaS 应用程序,每个租户的数据可以一起存储在单个数据库实例中,并与其他租户保持隔离和不可见.这在三个方面是有效的. 首先,应用程序改进适用于所有客户端. 其次,租户之间共享数据库可以有效地使用硬件. 最后,为所有租户管理单个数据库比为每个租户管理不同的数据库服务器要简单得多. 但是,传统上,单个关系数据库实例难以扩展到大型多…
Citus 提供对大型数据集的实时查询.我们在 Citus 常见的一项工作负载涉及为事件数据的实时仪表板提供支持. 例如,您可以是帮助其他企业监控其 HTTP 流量的云服务提供商.每次您的一个客户端收到 HTTP 请求时,您的服务都会收到一条日志记录.您想要摄取所有这些记录并创建一个 HTTP 分析仪表板,为您的客户提供洞察力,例如他们的网站服务的 HTTP 错误数量. 重要的是,这些数据以尽可能少的延迟显示出来,这样您的客户就可以解决他们网站的问题. 仪表板显示历史趋势图也很重要. 或者,也许…
在时间序列工作负载中,应用程序(例如一些实时应用程序查询最近的信息,同时归档旧信息. https://docs.citusdata.com/en/v10.2/sharding/data_modeling.html#distributing-by-entity-id 为了处理这种工作负载,单节点 PostgreSQL 数据库通常会使用表分区将一个按时间排序的大数据表分解为多个继承表,每个表包含不同的时间范围. https://www.postgresql.org/docs/current/stat…
将现有应用程序迁移到 Citus 有时需要调整 schema 和查询以获得最佳性能. Citus 扩展了 PostgreSQL 的分布式功能,但它不是扩展所有工作负载的直接替代品.高性能 Citus 集群需要考虑数据模型.工具和所使用的 SQL 功能的选择. 第一步是优化现有的数据库模式,以便它可以在多台计算机上高效工作. 确定分布策略 选择分布键(distribution key) 识别表的类型 为迁移准备源表 添加分布键 回填新创建的列 接下来,更新应用程序代码和查询以处理 schema 更…
单节点 Citus Docker (Mac 与 Linux) Docker 镜像仅用于开发/测试目的, 并且尚未准备好用于生产用途. 您可以使用一个命令在 Docker 中启动 Citus: # start the image docker run -d --name citus -p 5432:5432 -e POSTGRES_PASSWORD=mypass \ citusdata/citus:10.2 # verify it's running, and that Citus is inst…
多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用单节点 Citus 中的选项之一在本地设置 Citus. https://docs.citusdata.com/en/v10.2/installation/single_node.html#development 数据模型和示例数据 我们将演示为广告分析应用程序构建数据库,公司可以使用该应用程序来查…
确定应用程序类型 在 Citus 集群上运行高效查询要求数据在机器之间正确分布.这因应用程序类型及其查询模式而异. 大致上有两种应用程序在 Citus 上运行良好.数据建模的第一步是确定哪些应用程序类型更接近您的应用程序. 概览 多租户应用 实时应用 有时 schema 中有几十个或数百个表 表数量少 一次与一个租户(公司/商店)相关的查询 具有聚合的相对简单的分析查询 用于服务 Web 客户端的 OLTP 工作负载 摄取大量几乎不可变的数据 为每个租户分析查询提供服务的 OLAP 工作负载 通…
准备工作 这里假设,你已经在 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…
如前几节所述,Citus 是一个扩展,它扩展了最新的 PostgreSQL 以进行分布式执行.这意味着您可以在 Citus 协调器上使用标准 PostgreSQL SELECT 查询进行查询. Citus 将并行化涉及复杂选择.分组和排序以及 JOIN 的 SELECT 查询,以加快查询性能.在高层次上,Citus 将 SELECT 查询划分为更小的查询片段,将这些查询片段分配给 worker,监督他们的执行,合并他们的结果(如果需要,对它们进行排序),并将最终结果返回给用户. SELECT h…
创建和分布表 要创建分布式表,您需要首先定义表 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,…