CitusDB调研分享
时间:2022-07-24
本文章向大家介绍CitusDB调研分享,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CitusDB是什么
CitusDB 是基于 PostgreSQL 扩展(类似 PHP 扩展)实现的 PostgreSQL 集群。
CitusDB特点:
- 易维护
- 高可用
-
有限的
纵向扩展 - 并行分布式查询
CitusDB的架构
CitusDB 与 HDFS 的分布式非常相似,在 Master 上存储元数据,Work 节点存储分片,同时 1 个分片至少要存储在 2 个 Work 节点(可配置更多)上保障其可用性。
Master:
- 协调集群(分片、复制)
- 分发查询
- 只存储元数据
Work:
- 存储分片
用户对 Master 发起查询,Master 根据元数据下发查询至 Work 节点,最后查询汇总到 Master 节点,合并结果返回给用户。
CitusDB简单实用
- 编译 citus.so 模块至 PostgreSQL 的 lib 目录
- 在 PostgreSQL 的配置文件中添加 shared_preload_libraries = 'citus'
- 在所有节点上执行 psql -c "CREATE EXTENSION citus;"
- 在 Master 节点执行 psql -c "SELECT * from master_add_node(work-1', 9700);" 添加 Work 节点
至此集群搭建完成, 你可以执行 psql -c "select * from master_get_active_worker_nodes();"
来查看现有的 Work 节点。
CitusDB的高可用
Master: 可通过 PostgreSQL 自身的主从机制实现高可用,元数据并不大,效率上没有太大问题。
Work: 在查询时 Work 节点如有失败, Master 节点会把失败的查询重新下发至其它存在该分片的节点。如 Work 节点永久损坏可以人工均衡,让其保持设置的复制数。
CitusDB的限制
- 虽然官方一直宣称 Master 需要的资源很少,但集群达到一定数量级后 Master 是最终性能瓶颈。
- 有些疑惑官方文档的分布式表,不清楚是不是需要研发特别适配
- 不支持
- Window Functions
- CTEs
- Set operations
- Transactional semantics for queries that span across multiple shards (跨分片事务?)
最后一些参考:
集群部署: https://docs.citusdata.com/en/v6.1/installation/production_rhel.html
集群管理: https://docs.citusdata.com/en/v6.1/admin_guide/cluster_management.html
分布式表: https://docs.citusdata.com/en/v6.1/dist_tables/ddl.html
- ASP.NET 调味品:AJAX
- CTreeCtrl 控件使用总结
- 高盛成立交易部门,涉足比特币和加密货币交易
- WordPress主题开发:添加主题更新提醒功能
- WordPress主题开发:添加主题更新提醒功能
- ASP.NET2.0应用中定制安全凭证之实践篇
- Kaggle大神带你上榜单Top2%:点击预测大赛纪实(下)
- WordPress主题后台选项开发框架 Options Framework 介绍
- vc++ 在程序中运行另一个程序的方法
- 为Options Framework主题后台框架添加后台侧边栏
- ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)
- 弹出式模态窗体选择文本控件
- zookeeper 分布式锁服务
- QT Creator 快速入门教程 读书笔记(三)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FreeRTOS系列第9篇---FreeRTOS任务概述基础篇
- 图书管理系统(四)图书管理系统实战(2)
- 源码分析之 FactoryBean接口不为人知的秘密
- 图书管理系统(三)图书管理系统实战(1)
- 图书管理系统(二)整合 SSM,你学会了么
- CellChat:细胞间相互作用分析利器
- 我对一类常考算法面试题的详细分析
- Python 面向对象编程(上篇)
- 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现
- Centos7搭建SVN+Apache+iF.SVNAdmin实现web管理SVN
- 安卓最后一个大题复习
- 关于 Spring Ioc,看这一篇就够了!
- 第1次Spring源码学习之@Bean、@Configuration、xml、分析
- Spring 中的依赖注入(DI),你都知道多少?
- Docker配置1台Nginx+3台Tomcat做负载均衡