目录
- 什么是 Citus?
- 何时使用 Citus
- 多租户数据库
- 实时分析
- 使用注意事项
- 当 Citus 不合适时
什么是 Citus?
Citus
是 Postgres
的开源扩展,它在集群中的多个节点上分布数据和查询。因为 Citus
是 Postgres
的扩展(不是 fork
),所以当您使用 Citus
时,您也在使用 Postgres
。您可以利用最新的 Postgres
功能、工具和生态系统。
Citus
将 Postgres
转换为具有分片、分布式 SQL
引擎、引用表和分布式表等功能的分布式数据库。 Citus
将并行性、在内存中保留更多数据和更高的 I/O
带宽相结合,可以显着提高多租户 SaaS
应用程序、面向客户的实时分析仪表板和时间序列工作负载的性能。
获得 Citus 的三种方法:
- 开源:您可以下载
Citus
开源代码,或访问GitHub
上的 Citus 存储库。- https://www.citusdata.com/download
- https://github.com/citusdata/citus
- 企业软件:
Citus Enterprise
可作为软件订阅以及24x7
支持,供那些想要手动管理Citus
的人使用。 - 托管数据库服务:
Citus
在Azure
上以 Hyperscale (Citus) 的形式提供,这是Azure Database for PostgreSQL
托管服务中的内置部署选项。- https://docs.microsoft.com/azure/postgresql/hyperscale
Citus
可以扩展多远?
Citus
通过添加工作节点进行水平扩展,并通过升级 workers/coordinator
进行垂直扩展。在实践中,我们的客户已经达到了以下规模,还有更大的增长空间:
- Algolia
- 每天摄取
5-10B
行
- 每天摄取
- Heap
700
亿次事件70
节点Citus
数据库集群上的1.4PB
数据
- Chartbeat
- 每月添加
>2.6B
行数据
- 每月添加
- Pex
- 每天更新
80B
行 20
节点Citus
数据库集群是Google Cloud
2.4TB
内存、1280
核、80TB
数据- …计划增长到 45 个节点
- 每天更新
- Mixrank
- 1.6PB 的时间序列数据
何时使用 Citus
多租户数据库
大多数 B2B
应用程序已经在其数据模型中内置了租户、客户或帐户的概念。在此模型中,数据库为许多租户提供服务,每个租户的数据都与其他租户分开。
Citus
为该工作负载提供了完整的 SQL
覆盖,并支持将您的关系数据库扩展到 100K
租户。 Citus
还为多租户添加了新功能。例如,Citus
支持租户隔离,为大租户提供性能保证,并具有引用表的概念,以减少跨租户的数据重复。
这些功能允许您在多台机器上扩展租户数据,并轻松添加更多 CPU、内存和磁盘资源。此外,在多个租户之间共享相同的数据库模式可以有效地利用硬件资源并简化数据库管理。
Citus 对于多租户应用程序的一些优势:
- 快速查询所有租户
- 数据库中的分片逻辑,而不是应用程序
- 在单节点
PostgreSQL
中保存的数据比可能的多 - 保持高并发下的性能
- 跨客户群的快速指标分析
- 轻松扩展以处理新客户注册
- 隔离大小客户的资源使用情况
实时分析
Citus
支持对大型数据集的实时查询。通常,这些查询发生在快速增长的事件系统或具有时间序列数据的系统中。示例用例包括:
- 具有亚秒级响应时间的分析仪表板
- 关于正在展开的事件的探索性查询
- 大型数据集归档和报告
- 使用漏斗、细分和同类群组查询分析会话
Citus
的优势在于它能够并行化查询执行并随集群中工作数据库的数量线性扩展。 Citus
在实时应用方面的一些优势:
- 随着数据集的增长保持亚秒级响应
- 实时分析发生的新事件和新数据
- 并行化 SQL 查询
- 横向扩展而不放弃 SQL
- 保持高并发下的性能
- 快速响应仪表板查询
- 使用一个数据库,而不是拼凑
- 丰富的 PostgreSQL 数据类型和扩展
使用注意事项
Citus
扩展了 PostgreSQL
的分布式功能,但它不是扩展所有工作负载的直接替代品。高性能 Citus
集群需要考虑数据模型、工具和所使用的 SQL
功能的选择。
以下是考虑工具和 SQL 功能的一个好方法:如果您的工作负载与此处描述的用例一致,并且您碰巧遇到了不受支持的工具或查询,那么通常有一个很好的解决方法。
当 Citus 不合适时
一些工作负载不需要强大的分布式数据库,而另一些工作负载则需要工作节点之间的大量信息流。在第一种情况下,Citus
是不必要的,而在第二种情况下,通常性能不佳。这里有些例子:
- 当单节点
Postgres
可以支持您的应用程序并且您不希望增长时 - 离线分析,无需实时摄取或实时查询
- 不需要支持大量并发用户的分析应用程序
- 返回大量数据的
ETL
结果而不是摘要的查询