文章目录

  • Citus 兼容性评估
    • 结论
      • 1. 对于postgis的支持:
      • 2. sql功能支持
      • 集群环境下不支持的sql功能
        • 查询:
        • 更新:
        • DDL:
      • 3. 事务支持
        • 执行步骤:
        • 一致性模型:最终一致性
        • 隔离级别:读已提交
      • 4. citus性能
        • Insert Throughput
        • Update Throughput

Citus 兼容性评估

结论

1. 对于postgis的支持:

结论:

  1. 对于ST_AsGeoBuf)这个可以支持表中任意字段的聚集函数支持不好,存在一些bug,需要在sql中通过limit 0 或者子查询等方式绕过限制,进行一些改造适配。其他的postgis函数都支持
  2. 对于ST_AsGeoBuf(),由于此函数并没有定义combine函数,因此无法被下推到worker执行,这个是函数实现本身的限制,改造可能性较低,因此无法利用到集群优势,同时可能会由于网络传输数据量大时间相比单机更久一点
场景 是否支持 是否需要改造
对于单表使用ST_AsGeoBuf
对于视图使用ST_AsGeoBuf 手动在worker节点创建对应view,或者用子查询limit 0 进行修饰
对于视图仅返回常见数据类型和统计字段
对于视图按照public.ST_Intersects进行过滤
对于实体表按照public.ST_Intersects进行过滤后按照分组进行二进制编码
对于视图按照public.ST_Intersects进行过滤后按照分组进行二进制编码 手动在worker节点创建对应view,或者用子查询limit 0 进行修饰
子查询,不使用聚合函数
子查询,对于返回的数据使用聚合函数ST_AsGeoBuf 采用临时表的方式实现,性能可能较差,或者用limit 0 进行修饰

2. sql功能支持

对于分布式表,INSERT, INSERT … ON CONFLICT, UPDATE, and DELETE都支持

集群环境下不支持的sql功能

查询:

  • SELECT … FOR UPDATE work in single-shard queries only
  • TABLESAMPLE work in single-shard queries only
  • Correlated subqueries are supported only when the correlation is on the Distribution Column.

相关子查询定义参考:https://blog.csdn.net/shiyong1949/article/details/80923083

  • Outer joins between distributed tables are only supported on the Distribution Column(不支持2个非亲和分片表的outer join,仅task-tracker执行器支持2个非亲和分片表的inner join)
  • Outer joins between distributed tables and reference tables or local tables are only supported if the distributed table is on the outer side(对分片表和参考表的outer join,参考表只能出现在left join的右边或right join的左边)
  • Recursive CTEs work in single-shard queries only
  • Grouping sets work in single-shard queries only
  • 子查询不能参与join,不能出现order by,limit和offset
  • 本地表不能和分片表(参考表)混用。

这些限制其实都可以使用某些方法绕过,比如通过pull-push中转解决join问题,或者通过临时表解决其他问题。不过临时表的问题在于会将一个SQL拆成多个SQL。

更新:

在更新上也存在一些限制,它不支持跨分片的更新SQL和事务,‘insert into … select … from …’的支持存在部分限制,插入源表和目的表必须是具有亲和性的分片表,不允许出现Stable and volatile函数,不支持LIMIT,OFFSET,窗口函数,Grouping sets。

当然这些限制也存在对应的回避方法,首先是使用copy代替insert,其次是用SELECT master_modify_multiple_shards(‘…’)实现跨分片更新。

DDL:

上图展示的是对DDL的支持情况,这里面大部分都是支持的,对于不支持的可以通过创建对等的唯一索引代替变更主键,或者使用run_command_on_placements函数,直接在所有分片位置上执行DDL的方式来进行回避。

3. 事务支持

citus支持分布式事务

执行步骤:

如上图所示,由Coordinator节点负责协调分布式事务的执行,各Worker节点作为参与者参与分布式事务的执行:

  • 步骤1和2:Coordinator在本地,以及两个worker节点分别启动一个事务,并把worker节点的事务和Coordiantor上的全局事务进行关联;然后把相关SQL语句推送到对应worker执行;

  • 步骤3和4:客户端发起commit后,由Coordinator发起2PC提交协议:

    • PREPARE TRANSACTION:通知所有参与Worker节点做好事务提交准备,各Worker节点持久化相关数据,反馈可以提交或者需要回滚;
    • COMMIT PREPARED:当Coordinator节点收到所有Worker节点都投票可以提交事务后,发起提交事务命令,Worker节点收到消息后完成本地事务提交;如果前一阶段有一个Worker节点反馈需要归滚事务,则Coordiantor在本阶段会发送ROLLBACK命令;

一致性模型:最终一致性

虽然Citus采用2PC协议,保证了在同一个分布式事务中操作的多条记录的原子性更新。但从客户端读取的视角来看,可能会读到中间态的数据(Base中的软状态),是最终一致性的模型。

原因在于Citus并没有引入集群级的全局授时机制,对于只读事务,无法获取集群级的全局一致性快照,而是由各Worker节点自己进行可见性判断,当一个分布式事务正在提交时,在不同的Worker节点提交存在时间差,在这个时间间隙内发起的查询事务,就会在已经提交的Worker节点看到已提交数据,在尚未完成提交的Worker节点看不到同一个事务写入的数据,等所有Worker节点都完成提交后,再次查询又能看到最新一致的数据,因此严格说Citus提供的是最终一致性模型。

隔离级别:读已提交

4. citus性能

当运行INSERT时,Citus首先根据分发列中的值找到正确的分片位置。然后,Citus连接到存储分片放置的工作节点,并对每个分片执行INSERT。从用户的角度来看,由于到工作节点的网络延迟,INSERT需要花费几毫秒的时间来处理。由于Citus协调器节点可以处理并发INSERT,因此可以达到比单机更高的高吞吐量。

Insert Throughput

Update Throughput

同时对于插入的性能提升,citus还支持masterless模式,在这种模式下,每个worker都存储元数据,这样每个worker都可以作为协调者去执行插入操作。

从苏宁发布的数据来及看。用masterless模式插入可以达到每秒30W条。

Citus 兼容性评估相关推荐

  1. 程序不支持新服务器,解决Windows Server 2008 R2的兼容性问题

    尽管大多数的新应用程序在Windows Server 2008 R2上运行得还算不错,但有些为旧版操作系统所写的应用程序可能无法在R2上安装或运行.幸运的是,有几种方法能解决这些兼容性的挑战. 及时更 ...

  2. 一文详解TDSQL PG版Oracle兼容性实践

    TDSQL PG版分布式关系型数据库,是一款同时面向在线事务交易和MPP实时数据分析的高性能HTAP数据库系统.面对应用业务产生的不定性数据爆炸需求,不管是高并发交易还是海量实时数据分析,TDSQL ...

  3. 统计学中p值计算公式_大学统计学白上了?800 多科学家联名反对 “统计学意义”,P 值该废了...

    [新智元导读]三位统计学家在 Nature 上发布公开信,号召科学家放弃追求 "统计学意义",这封公开信一周之内吸引了超过 800 名研究人员共同签署.大学里好不容易听懂的统计学, ...

  4. OceanBase迁移服务:向分布式架构升级的直接路径

    2019年1月4日,OceanBase迁移服务解决方案在ATEC城市峰会中正式发布.蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践. 蚂蚁数据库架构 ...

  5. 阿里研究员:软件测试中的18个难题

    简介:对于软件测试来说,怎么样才算测够了?如何评价测试的有效性?那么多测试用例,以后怎么删?在软件测试中会遇到非常多的问题,阿里研究员郑子颖分享了18个他总结出的难题以及相关看法,希望对同学们有所启发 ...

  6. ACT5.6 动手实验手册 如何在工作组模式下对客户端进行数据收集 如何在AD域环境下对...

    ACT5.6 动手实验手册 实验的目标 这个实验的目的是: · 了解如何部署ACT5.6 · 了解如何在工作组模式下对客户端进行数据收集 · 了解如何在AD域环境下对客户端进行数据收集 本次试验大约6 ...

  7. SAP 电商云 Spartacus UI 支持延迟加载的新功能的入口设计

    假设我们要为 Spartacus UI 开发一个新功能,首先,这个新功能,应该放到 feature library 文件夹里: 这个新功能的入口,放置到 Feature Module 中. 新功能通过 ...

  8. dts数据库迁移工具_传统数据库迁移上云利器-ADAM

    自1970年关系型数据库被提出以来,至今已有50年历史.但在关系型数据库领域正在发生着巨大的变化,首先是互联网的发展,使得开源数据库越来越受欢迎,可扩展性成为支撑业务发展的重要特性,比如WebScal ...

  9. 关于质量标准化的思考和实践

    简介:最近部门在推质量标准化,通过质量标准化,推动质量内建,从而提高研发部门的交付质量,作者深度参与其中,并在推进过程中总结了一些经验以及思考,在此通过以下定义.共识.实践三个大方向和大家分享一下. ...

最新文章

  1. CISCO路由器配置手册--第五章 虚拟局域网(VLAN)路由
  2. Vulnhub靶机渗透之 AI: Web: 1
  3. apache http server 停止工作_Tomcat9配置HTTP/2
  4. learn the python the hard way习题26~30总结
  5. 【QBKbupt】洛谷P2525Uim的情人节礼物·其之壱
  6. FreeRTOS学习记录(安富莱FreeRTOS教程摘录)
  7. 腾讯地图SDK公交路线规划Demo
  8. 使用JAVA编程实现多人聊天室(多线程实践)
  9. 洛谷OJ - P2440 - 木材加工(二分答案)
  10. Android蓝牙4.0单车锁应用实例开发
  11. 问答网站Stack Overflow的成功之道
  12. 行存储和列存储的区别
  13. 凭借近2亿的年销量,小米三年超越苹果的可能性有多大?
  14. 邮件营销怎么做你知道吗?电子邮件营销平台注册流程
  15. 为什么理工类专业成绩好的人,英语总是很差?
  16. MySQL数据库学习笔记2
  17. 电除尘器 matlab,基于MATALAB的静电除尘电源技术仿真
  18. 经典PID控制器的缺陷
  19. IOS 图标背景是黑色
  20. arena of valor服务器未响应,传说对决 -Arena of Valor-启动后一直黑屏无法进入什么原因...

热门文章

  1. 从博弈论的角度出发,解密股民与机构在股票市场中的博弈
  2. ubuntu桌面版安装jdk
  3. 财务管理试题-2023会计继续教育
  4. vue3使用富文本编辑器vueQuill
  5. 10年软件测试工程师感悟
  6. 马丁路德金博士的三段演讲录音
  7. juniper 开放端口_juniper如何查看端口流量
  8. 『津津乐道播客』#074. 技术无罪,那快播呢?
  9. 远程计算机怎么安装系统,装机高手教你怎样win7远程桌面连接设置
  10. 树控件DeleteAllItems之前先SelectItem(NULL)