内容参考

对分布式对定义参考这篇文章:

微服务都想用,先把分布式和微服务之间的关系说清楚

对分布式架构中心或无中心对比参考这篇文章:

分布式存储单主、多主和无中心架构的特征与趋势

对HDFS对内部机制参考这篇文章:

Hadoop分布式文件系统I/O原理机制的深度解读

分布式文件系统HDFS无索引就无K/V

首先分布式数据并不是绝对的喜欢使用kv存储模式,例如分布式数据库里面mongodb和elasticsearch是文档形式存储,若把HDFS也算进去的话,它是无索引的存储。

上图是HDFS作为分布式数据存储的文件分块存储模式,简单直接,并没有进行任何的kv索引建立。我们可以看到图中Nginx日志被切割成duo多份,然后分布在三台数据节点上,要注意的是,HDFS的副本一般是三份,图中只做了两份代表副本的意思,但实际上是三份。客户端在进行访问通信是时候,都是通过数据块scan的方式进行,没有索引,就没有随机访问机制。

TiDB的架构特征

像cockroach,tidb,明明是关系库,为啥非要弄个key,即使业务逻辑不需要表有unique key,也要给每条记录硬加一个key,这是什么目的?

其实cockroach,tidb都叫NewSQL,是NoSQL+关系型数据库的合体,认为它们是关系库,说得不恰当。

例如:tidb分为PD、TIKV、TIDB,PD管理者kv的关系结构,这部分可以对标关系型数据库。

上图是TIDB的架构图,图中可以看到TIDB形成的集群主要是接收外部应用的SQL,处理SQL的逻辑,与PD交互获取KV地址,与KV交互获取数据;

PD组成的集群主要是通过元数据的语义理解kv在集群中的位置,实现对KV集群的调度和负载均衡,分配全局事务ID;

TIKV就是我们说到的重点,通过Key-Value存储引擎,提供分布式事务能力。每个节点有多个Region,Region存储一个范围Key的数据——Key Range,主要是为了形成连续的小组,在局部提供写入和读取的性能优势。并且以Region作为原子单元,实现集群跨节点的副本复制,复制方式用Raft协议实现。

实际上TIKV部分就是标准的NoSQL为基础的数据持久化层了,TIKV的持久化数据层就是RocksDB,同样的cockroach持久化数据层也用的是RocksDB,RocksDB的就是LSM-Tree的日志追加方式WAL (write ahead log)快速写入数据,再通过LSM-Tree的memtable,sstable结构,索引key,获取value,所以就是个标准的key/value数据库。

RocksDB的核心优势LSM-Tree结构

为什么它们不约而同的都选择了RocksDB,因为作为核心结构LSM树的WAL,memtable,sstable方式具有写入数据的巨大优势并保证数据可靠性,形成很多小的顺序分组,同时又得到局部热点上的惊人查询优势,在内存中完成查找。

而且LSM-Tree配合Bloom Filter又能将时间线作为优先级,快速索引数据在磁盘中的位置范围,这就大大减少扫描磁盘的动作。

若遇到大范围随机查找,Bloom Filter有也查不到位置的情况,才会通过二分查找,并在树的不同层进行多路合并,取优先级最高的数据。

那么通过这种思路,就能比关系型数据库的b/b+树索引在写的性能方面带来质的提升,而且对于局部热点,也就是近期数据带来惊人的查询性能,虽然全局范围的查询有所降低,数据段合并会带来的资源消耗(rocksdb通过多线程合并提升了这一过程的效率),但数据库读写的整体性能的平衡性变得更合理了,总之将来通过集群处理读的问题总是比处理写的问题更容易,这就是选择key/value数据库的底层逻辑。

NewSQL相对于MySQL的优势

反观关系型数据库,例如要给MySQL加上一条索引,那么索引字段就是key。所以RDBMS也不能说自己跟key/value存储没啥联系。

作为业务逻辑上不需要unique key而非要加一个key,这是因为关系型数据库设计的初衷就不是为了海量数据的快速写入和查找所设计的,即便没有索引,行集扫描也没有问题,这才是常态是其本质,这和Hadoo HDFS的按块扫描一样,都是一种原始的状态,HDFS之上依然需要HBase数据库来解决海量数据的随机查找场景,本质上作为列族分类的HBase也是Key/Value模式。

NewSQL选择了RocksDB,也就是选择了业务记录中key存在的必须,但换来的是海量数据的高效写入和查找,非常划算。

前往读字节的知乎——了解更多关于大数据的知识

公众号 "读字节" 大数据(技术、架构、应用)的深度,专业解读

NewSQL分布式数据库,例如TIDB用K/V的底层逻辑的更多相关文章

  1. 从NoSQL到NewSQL,谈交易型分布式数据库建设要点

    在上一篇文章<从架构特点到功能缺陷,重新认识分析型分布式数据库>中,我们完成了对不同"分布式数据库"的横向分析,本文Ivan将讲述拆解的第二部分,会结合NoSQL与Ne ...

  2. 关于时间序列数据库的思考——(1)运用hash文件(例如:RRD,Whisper) (2)运用LSM树来备份(例如:LevelDB,RocksDB,Cassandra) (3)运用B-树排序和k/v存储(例如:BoltDB,LMDB)

    转自:http://0351slc.com/portal.php?mod=view&aid=12 近期网络上呈现了有关catena.benchmarking boltdb等时刻序列存储办法的介 ...

  3. 时间序列数据库概览——基于文件(RRD)、K/V数据库(influxDB)、关系型数据库

    一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这类工具附属于监控告警工具,底层没有 ...

  4. erlang 分布式数据库Mnesia 实现及应用

    先推荐一篇:mnesia源码分析(yufeng)   - linear hash   ETS/DETS/mnesia 都使用了linear hash算法 http://en.wikipedia.org ...

  5. 怎样打造一个分布式数据库——rocksDB, raft, mvcc,本质上是为了解决跨数据中心的复制

    摘自:http://www.infoq.com/cn/articles/how-to-build-a-distributed-database?utm_campaign=rightbar_v2& ...

  6. 全球分布式数据库:Google Spanner(论文翻译)

    本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...

  7. (三)分布式数据库tidb-隔离级别详解

    tidb隔离级别详解: 1.TiDB 支持的隔离级别是 Snapshot Isolation(SI),它和 Repeatable Read(RR) 隔离级别基本等价,详细情况如下: ● TiDB 的 ...

  8. Mycat分布式数据库架构解决方案--Mycat实现读写分离

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 安装完 ...

  9. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

随机推荐

  1. vlc音视频开发(二)环境搭建(VS篇)

    来源:微信公众号「编程学习基地」 目录 简介 VS配置vlc开发环境 下载vlc源码 创建vlc环境 测试vlc代码 运行vlc程序 完成项目文件获取 简介 VLC 是一款自由.开源的跨平台多媒体播放 ...

  2. httprunner(9)运行测试用例的方式总结

    前言 用过pytest的小伙伴都知道,pytest的运行方式是非常丰富的,可以说是你想怎么运行怎么运行,想运行哪些运行哪些,那httprunner是否同样可以呢? 运行用例的各种方式 运行指定路径的用 ...

  3. l2-002 链表去重 (未解决)

    L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...

  4. vue 自动注册全局组件

    vue 自动注册全局组件 vue 注册全局组件的方式 const plugins = { install(Vue) { const requireComponent = require.context ...

  5. HTTP2.0 的学习笔记

    1 1 1 HTTP2.0 1 11 1 1 1 1 1 1 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,也被称为HTTP ove ...

  6. 如何用 js 实现一个 sleep 函数

    如何用 js 实现一个 sleep 函数 原理 实现方式 总结 refs js sleep xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. LeetCode & Binary Search 解题模版

    LeetCode & Binary Search 解题模版 In computer science, binary search, also known as half-interval se ...

  8. CSS Layout All In One

    CSS Layout All In One CSS2 position float % px , rem, em CSS3 flex grid multi column vw / vh 常见布局模式 ...

  9. 应该如何看待VAST的未来价格与价值?

    提起数字货币的价格,很多币圈人士都是滔滔不绝,随口一举例,便是百倍千倍的数字货币.可是提起数字货币的价值,就很少有币圈人士能举出几个有力的例子,常常顾左右而言他,场面十分尴尬.之所以会这样,是因为很多 ...

  10. Python 与 excel的简单应用

    1.pip openpyxl库: pip install openpyxl -i http://pypi.douban.com/simple --trust-host pypi.douban.com ...