热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TiDBvsCockroachDB

CockroachDB去中心化设计,数据可以直接存放到本地磁盘水平弹性扩容,可自动Rebalancing各个节点之间完全对等,前端可挂负载均衡高可用遵循多数原则,默认数据保存三份副




CockroachDB


  • 去中心化设计, 数据可以直接存放到本地磁盘
  • 水平弹性扩容,可自动 Rebalancing
  • 各个节点之间完全对等,前端可挂负载均衡
  • 高可用遵循多数原则,默认数据保存三份副本(至少三台机器),可以允许一台机器挂掉
  • 一台机器挂掉后,会被标记成suspect,超过一定时间,将被标记成dead,此时会自动将其上面的副本转移到其它机器上去
  • 默认三个副本,如果有两台机器同时挂掉(这个"同时"时间可以配置),部分数据将不可用
  • CockroachDB 部署简单,只需要一个二进制文件,内置完善的图形界面
  • CockroachDB上层支持兼容PostgreSQL语法,下层调用分布式KV存储API

TiDB


  • TiDB 是PingCAP国产企业设计开发的开源分布式关系型数据库,其设计思想源于google spanner
  • TiDB 是中心化设计,其元数据信息存放在PD组建上
  • TiDB 同时支持行存储引擎TiKV、列存储引擎TiFlash,提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)解决方案
  • TiDB 兼容MySQL 5.7协议,支持mysql原生客户端、mysqldump、navicat等诸多mysql原生工具
  • TiDB 支持一键水平扩容或者缩容
  • TiDB 是存储与计算分离的架构,基于Raft协议保证强一致性,支持高可用,机房容灾

TiDB系统架构图

在这里插入图片描述


  • TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件对外提供统一的接入地址

  • PD (Placement Driver) Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。作为中心总控节点,PD 通过集成 etcd ,自动的支持 auto failover,无需担心单点故障问题。同时,PD 也通过 etcd 的 raft,保证了数据的强一致性,不用担心数据丢失的问题。

  • TiKV Server:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。TiKV基于RocksDB开发,基于Raft强一致性协议保证高可用,默
    认三个副本,一个Leader,两个Follower

  • TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。

TiDB存储架构图

在这里插入图片描述

TiDB计算层架构图

在这里插入图片描述

引入TiDB调度节点能够解决的问题


  • 如何保证同一个 Region 的多个 Replica 分布在不同的节点上?更进一步,如果在一台机器上启动多个 TiKV 实例,会有什么问题?
  • TiKV 集群进行跨机房部署用于容灾的时候,如何保证一个机房掉线,不会丢失 Raft Group 的多个 Replica?
  • 添加一个节点进入 TiKV 集群之后,如何将集群中其他节点上的数据搬过来?
  • 当一个节点掉线时,会出现什么问题?整个集群需要做什么事情?如果节点只是短暂掉线(重启服务),那么如何处理?如果节点是长时间掉线(磁盘故障,数据全部丢失),需要如何处理?
  • 假设集群需要每个 Raft Group 有 N 个副本,那么对于单个 Raft Group 来说,Replica 数量可能会不够多(例如节点掉线,失去副本),也可能会过于多(例如掉线的节点又回复正常,自动加入集群)。那么如何调节 Replica 个数?
  • 读/写都是通过 Leader 进行,如果 Leader 只集中在少量节点上,会对集群有什么影响?
  • 并不是所有的 Region 都被频繁的访问,可能访问热点只在少数几个 Region,这个时候我们需要做什么?
  • 集群在做负载均衡的时候,往往需要搬迁数据,这种数据的迁移会不会占用大量的网络带宽、磁盘 IO 以及 CPU?进而影响在线服务?

TiDB vs CockroachDB

表格对比


NameCockroachDBTiDB
DescriptionCockroachDB is a distributed database architected for modern cloud applications. It is wire compatible with PostgreSQL and backed by a Key-Value Store, which is either RocksDB or a purpose-built derivative, called Pebble.TiDB is an open source distributed Hybrid Transactional/Analytical Processing (HTAP) database that supports MySQL and Spark SQL syntaxes.
Primary database modelRelational DBMSRelational DBMS
Websitewww.cockroachlabs.compingcap.com
Technical documentationwww.cockroachlabs.com/­docsdocs.pingcap.com/­tidb/­stable
DeveloperCockroach LabsPingCAP, Inc.
Initial release20152016
Current release20.2, November 20204.0.10 , January 2021
LicenseOpen SourceOpen Source
Cloud-based onlynono
Implementation languageGoGo, Rust
Server operating systemsLinux macOS WindowsLinux
Data schemedynamic schemayes
Typingyesyes
XML supportnono
Secondary indexesyesyes
SQLyes, wire compatible with PostgreSQLyes
APIs and other access methodsJDBCJDBC
ODBC
Proprietary protocol
Supported programming languagesC#
C++
Clojure
Go
Java
Javascript (Node.js)
PHP
Python
Ruby
Rust
Ada
C
C#
C++
D
Delphi
Eiffel
Erlang
Haskell
Java
Javascript (Node.js)
Objective-C
OCaml
Perl
PHP
Python
Ruby
Scheme
Tcl
Server-side scriptsnono
Triggersnono
Partitioning methodshorizontal partitioning (by key range)horizontal partitioning (by key range)
Replication methodsMulti-source replication using RAFTUsing Raft consensus algorithm to ensure data replication with strong consistency among multiple replicas.
MapReducenoyes
Consistency conceptsImmediate ConsistencyImmediate Consistency
Foreign keysyesno
Transaction conceptsACIDACID
Concurrencyyesyes
Durabilityyesyes
In-memory capabilitiesnono
User conceptsRole-based access controlUsers with fine-grained authorization concept. No user groups or roles.

区别概览


  • 两者均为开源分布式数据库,TiDB由于是国产,中文文档支持非常好
  • TiDB目前不支持外键
  • TiDB是MySQL协议兼容,CockroachDB是PostgreSQL语法兼容,明显TiDB对MySQL兼容更好
  • CockroachDB部署极其简单,仅需单个二进制文件,因为部署简单,相应的扩所容、维护CockroachDB都比TiDB要简单
  • TiDB可以通过TiSpark扩展支持OLAP场景,而CockroachDB官方说明,不建议用在OLAP场景下
  • 两者均为CP系统,部分节点挂掉会短暂(几秒)影响可用性,不会影响一致性

参考资料

TiDB和CockroachDB同为Spanner/F1的开源实现,有哪些重大差异?
https://www.zhihu.com/question/60686555
https://rocksdb.org.cn/doc/getting-started.html
RocksDB是使用C++编写的嵌入式kv存储引擎,其键值均允许使用二进制流。由Facebook基于levelDB开发, 提供向后兼容的levelDB API。
RocksDB针对Flash存储进行优化,延迟极小。RocksDB使用LSM存储引擎,纯C++编写。
NewSQL TiDB vs CockroachDB
https://blog.csdn.net/vkingnew/article/details/88559050
CAP理论表明了对于一个分布式的系统在以下3种保证中同时实现超过两种是不可能的:
Consistency(一致性)
Availability(可用性)
Partition Tolerance(分区容错性)


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
author-avatar
廊坊0316慢摇酒吧_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有