范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SQLNoSQL和NewSQLDataBase

  XSQL发展
  数据库和操作系统是计算机基础理论的核心产品,纵观整个IT行业,无论是传统的系统软件还是通用的应用系统离不开这2款系统软件。随着业务系统的多样性,OS和DB也在不断的演进。对比OS, DB的演进更是处于百花齐放状态,唯一目标就是在特定的场景中能更好的满足业务的需求。
  SQL
  传统的关系型数据库有着悠久的历史,从上世纪60年代开始就已经在航空领域发挥作用。因为事务性、强一致和通用的关系型数据模型接口,获得了越来越多的应用,大有一统天下的气势。这期间,涌现出了一批佼佼者,其中有优秀的商业化数据库如 Oracle,DB2,SQL Server 等,也有我们耳熟能详的开源数据库 MySQL及PostgreSQL 。这里不严谨的将这类传统数据库统称为SQL数据库。
  SQL to NoSQL
  随着互联网应用的出现,在很多场景下业务并不需要传统关系型数据库提供的强一致性以及关系型数据模型。相反,由于快速膨胀和变化的业务场景,对 可扩展性(Scalability) 以及 可靠性(Reliable) 更加需要,而这个又正是传统关系型数据库的弱点。自然地,新的适合这种业务特点的数据库NoSQL开始出现,其中最句代表性的是 Amazon的Dynamo以及Google的BigTable,以及他们对应的开源版本像Cassandra以及HBase 。
  由于业务模型的千变万化,以及抛弃了强一致和关系型,大大降低了技术难度,各种NoSQL版本像雨后春笋一样涌现,基本成规模的互联网公司都会有自己的NoSQL实现。主要可以从两个维度来对各种NoSQL做区分: 按元信息管理方式划分:以Dynamo[1]为代表的对等节点的策略,由于没有中心节点的束缚有更高的可用性。而采用有中心节点的策略的,以BigTable[2]为代表的的数据库,则由于减少全网的信息交互而获得更好的可扩展性。 按数据模型划分:针对不同业务模型出现的不同数据模型的数据库,比较知名的有文档型数据库MongoDB,KV数据库Redis、FoundationDB[3]和Pika等,列数据库Cassandra、HBase,图数据库Neo4J。
  NoSQL to New SQL
  NoSQL也有很明显的问题,由于缺乏强一致性及事务支持,很多业务场景被NoSQL拒之门外。同时,缺乏统一的高级数据模型、访问接口,又让业务代码承担了很多的负担。图灵奖得主Michael Stonebraker甚至专门发文声讨,"Why Enterprises Are ­Uninterested in NoSQL" [3] 一文中,列出了NoSQL的三大罪状:No ACID Equals No Interest, A Low-Level Query Language is Death,NoSQL Means No Standards。数据库的历史就这样经历了否定之否定,又螺旋上升的过程。
  2011年分析师Matthew Aslett首次提出了NewSQL的概念,期望将NoSQL和传统的数据库的优势融合,将现有数据库存在的缺陷在下一代中解决掉。而Google首先将这一概念工程化,也就是Spanner[5]。随后开源社区也陆续跟进。 NoSQL 到 NewSQL的支持:数据分片
  如何能在获得SQL的强一致性、事务支持的同时,获得NoSQL的可扩展性及可靠性。答案显而易见,就是要 在SQL的基础上像NoSQL一样做分片 。通过分片将数据或计算打散到不同的节点,来摆脱单机硬件对容量和计算能力的限制,从而获得更高的可用性、性能以及弹性:
  我们将数据库系统划分为上下两个部分,Part 1保持不动,将Part 2进行分片打散,由不同的节点负责,并在分片间通过副本方式保证高可用。同时,Part 2部分的功能由于被多个节点分担,也可以获得并行执行带来的性能提升。
  数据库的分片分层策略
  所以现在实现NewSQL的核心问题变成了: 确定一条分割线将数据库系统划分为上下两个部分,对Part 2做分片打散。 而这条分割线的确定就成了主流NewSQL数据库的不同方向,不同的选择带来的不同的ACID实现方式,以及遇到的问题也大不相同。下图展示了更详细的数据库系统内部结构,以及主流的分界线选择及工业实现代表:
  工业级的NewSQL产品
  为了方便说明,本文中根据这个分片分割线的位置,将不同的方案命名为:Partition All、Partition Engine、Partiton Storage 以及 Partition Disk。这里先说 结论:随着分片层次的下降,可扩展性会降低,但易用性和生态兼容性会增大 。下面就分别介绍每种选择中需要解决的问题,优缺点,使用场景以及代表性工业实现的实现方式。 PARTITION ALL:分库分表
  最直观的想法,就是直接用多个DB实例共同服务,从而缓解单机数据库的限制,这也是很多大公司内部在业务扩张期的第一选择。这种方式相当于是在数据库系统的最顶层就做了Partition,理想情况下,整个数据库的各个模块可以全部并发执行起来。
  多DB分库
  采用分库分表的首要问题就是如何对数据进行分片,常见的就是在表或者库的维度水平或垂直地进行分片。这里分片的选择是非常关键的,良好的,适应业务模式的分片可以让多DB实例尽量的并发起来获得最好的扩展性能。而不合适的分片则可能导致大量的跨节点访问,导致负载不均衡,或引入访问瓶颈。除 分片策略 之外,由于跨节点的访问需要,会有一些通用的问题需要解决,比如如何在分片之间支持 分布式事务 ,处理 分布式Query 拆分和结果合并,以及全局自增ID的生成等。而且,最重要的,所有这些新增的负担全部要业务层来承担,极大地增加了业务的成本。
  因此,分库分表的模式,在良好的业务侧设计下可以获得极佳的扩展性,取得高性能、大容量的数据库服务。但业务耦合大,通用性差,需要用户自己处理分片策略、分布式事务、分布式Query。这也是为什么在各大公司内部都有成熟稳定的分库分表的数据库实现的情况下,这些实现却很难对外通用的输出。 PARTITION ENGINE: SPANNER
  我们将Part 1和Part2的分界线下移,到Server层之下,也就是只在引擎层做Partition。这种模式由于节点间相对独立,也被称作Share Nothing架构。相对于传统分库分表,Partition Engine的方式将之前复杂的分布式事务,分布式Query等处理放到了数据库内部来处理。
  本文就以 分布式事务 为例,来尝试解释这种分片层次所面对的问题和解决思路。要支持事务就需要解决事务的ACID问题。而ACID的问题在分布式的环境下又变得复杂很多:
  A(Atomicity) ,在传统数据库系统中,通过REDO加UNDO的方式容易解决这个问题[4],但当有多个不同的节点参与到同一个事务中的时候问题变的复杂起来,如何能把保证不同节点上的修改同时成功或同时回滚呢,这个问题有成熟的解决方案,就是 2PC(Two-Phase Commit Protocol) ,引入Coordinator角色和prepare阶段来在节点间协商。
  D (Durability) ,单机数据库中,我们通过REDO配合Buffer Pool的刷脏策略可以保证节点重启后可以看到已经提交的事务[4]。而在分布式环境中通常会需要更高的可用性,节点宕机后马上需要有新的节点顶上。这里的解决方案也比较成熟,就是给分片提供多个副本(通常是3个),每个副本由不同的节点负责,并且采用一致性算法 Multi-Paxos[6]或其变种 来保证副本间的一致性。下图是Spanner[5]的实现方式,每个spanserver节点负责不同partition的多个分片,每个partition的副本之间用Paxos来保证其一致性,而跨Partition的事务则用2PC来保证原子。
  I(Isolation) ,"数据库并发控控制"[7]一文中介绍过,是实现并发控制最直观的做法是2PL(两阶段锁),之后为了减少读写之间的加锁冲突,大多数数据库都采取了 2PL + MVCC 的实现方式,即通过维护多版本信息来让写请求和读请求可以并发执行。
  MVCC的实现中有十分依赖一个全局递增的事务执行序列,用来判断事务开始的先后,从而寻找正确的可读历史版本。而这个全局递增的序列在分布式的数据库中变得十分复杂,原因是机器间的时钟存在误差,并且这种误差的范围不确定。常见的做法是通过节点间的信息交互来确定跨节点的时间先后,如 Lamport时钟 [8]。但更多的信息交互带来了瓶颈,从而限制了集群的扩展规模以及跨地域的复制。Spanner[5]提出了一种新的思路,通过引入 GPS和原子钟 的校准,在全球范围内,将不同节点的时钟误差限制到一个确定的范围内。这个确定的误差范围非常重要,因为他支持了一种可能:通过适度的等待保证事务的正确性。
  具体的说,这里Spanner需要保证 External Consistency ,即如果事务T2开始在T1 commit之后, 那么T2拿到的Commit Timestamp一定要大于T1的Timestamp。Spanner实现这个保证的做法,是让事务等待其拿到的Commit Timestamp真正过去后才真正提交(Commit Wait):
  如上图[9]所示,事务Commit时,首先通过TrueTime API获取一个当前时间now,这个时间是一个范围now = [t - ε, t + ε],那么这个t - ε就是作为这个事务的Commit Timestamp,之后要一直等待到TrueTime API返回的当前时间now.earliest > s时,才可以安全地开始做真正的comimt,这也就保证,这个事务commit以后,其他事务再也不会拿到更小的Timestamp。
  总结下, 采用Partition Engine策略的NewSQL,向用户屏蔽了分布式事务等细节,提供统一的数据库服务,简化了用户使用。Spanner,CockroachDB,Oceanbase,TIDB都属于这种类型。这里有个值得探讨的问题:由于大多数分库分表的实现也会通过中间件的引入来屏蔽分布式事务等实现细节,同样采用类Multi Paxos这样的一致性协议来保证副本一致,同样对用户提供统一的数据库访问,那么相较而言,Partition Engine的策略优势又有多大呢?在大企业,银行等场景下, 这两种方案或许正在正面竞争,我们拭目以待[11]。 PARTITION STORAGE: AURORA、POLARDB
  继续将分片的分界线下移,到事务及索引系统的下层。这个时候由于Part 1部分保留了完整的事务系统,已经不是无状态的,通常会保留单独的节点来处理服务。这样Part 1主要保留了计算相关逻辑,而Part 2负责了存储相关的像REDO,刷脏以及故障恢复。因此这种结构也就是我们常说的计算存储分离架构,也被称为Share Storage架构。
  这种策略由于关键的事务系统并没有做分片处理,也避免了分布式事务的需要。而更多的精力放在了存储层的数据交互及高效的实现。这个方向最早的工业实现是Amazon的Aurora[12]。Aurora的计算节点层保留了锁,事务管理,死锁检测等影响请求能否执行成功的模块,对存储节点来说只需要执行持久化操作而不需要Vote。另外,计算节点还维护了全局递增的日志序列号LSN,通过跟存储节点的交互可以知道当前日志在所有分片上完成持久化的LSN位置,来进行实物提交或缓存淘汰的决策。因此,Aurora可以避免Partition Engine架构中面临的分布式事务的问题[18]。
  Auraro认为计算节点与存储节点之间,存储节点的分片副本之间的网络交互会成为整个系统的瓶颈。而这些数据交互中的大量Page信息本身是可以通过REDO信息构建的,也就是说有大量的网络交互是冗余的,因此Aurora提出了"Log is Database",也就是所有的节点间网络交互全部只传输REDO,每个节点本地自己在通过REDO的重放来构建需要的Page信息。
  从上图可以看出,计算节点和存储节点之间传输的只有REDO,也就是是说,传统数据库中存储相关的部分从计算节点移到了存储节点中,这些功能包括: REDO日志的持久化 脏页的生成与持久化 Recovery过程的REDO重放 快照及备份
  这些功能对数据库整体的性能有非常大的影响:首先,根据ARIES[17]安全性要求,只有当REDO落盘后事务才能提交,这使得REDO的写速度很容易成为性能瓶颈;其次,当Buffer Pool接近满时,如果不能及时对Page做刷脏,后续的请求就会由于获取不到内存而变慢;最后,节点发生故障重启时,在完成REDO重放之前是无法对外提供服务的,因此这个时间会直接影响数据库的可用性。而在Aurora中,由于存储节点中对数据页做了分片打散,这些功能可以由不同的节点负责,得以并发执行,充分利用多节点的资源获得更大的容量,更好的性能。
  PolarDB
  2017年,由于RDMA的出现及普及,大大加快了网络间的网络传输速率,PolarDB[15]认为未来网络的速度会接近总线速度,也就是瓶颈不再是网络,而是软件栈。因此PolarDB采用新硬件结合Bypass Kernel的方式来实现高效的共享盘实现,进而支撑高效的数据库服务。由于PolarDB的分片层次更低,也就能做到更好的生态兼容,也就是为什么PolarDB能够很快的做到社区版本的全覆盖。副本间PoalrDB采用了ParalleRaft来允许一定范围内的乱序确认,乱序Commit以及乱序Apply。
  采用Partition Storage的策略的NewSQL,由于保持了完整的计算层,所以相对于传统数据库需要用户感知的变化非常少,能过做到更大程度的生态兼容。同时也因为只有存储层做了分片和打散,可扩展性不如上面提到的两种方案。在计算存储分离的基础上,Microsoft的Socrates[13]提出了进一步将Log模块拆分,实现Durability和Available的分离;Oracal的Cache Fusion[14]通过增加计算节点间共享的Memory来获得多点写及快速Recovery,总体来讲他们都属于Partition Storage这个范畴。 对比
  可以看出,如果我们以可扩展性为横坐标,易用及兼容生态作为纵坐标,可以得到如上图所示的坐标轴,越往右上角当然约理想,但现实是二者很难兼得,需要作出一定的取舍。
  首先来看传统的单节数据库其实就是不易扩展的极端,同时由于他自己就是生态所以兼容生态方面满分。另一个极端就是传统的分库分表实现,良好的分片设计下这种策略能一定程度下获得接近线性的扩展性。但需要做业务改造,并且需要外部处理分布式事务,分布式Query这种棘手的问题。之后以Spanner为代表的的Partition Engine类型的NewSQL由于较高的分片层次,可以获得接近传统分库分表的扩展性,因此容易在TPCC这样的场景下取得好成绩,但其需要做业务改造也是一个大的限制。以Aurora及PolarDB为代表的的Partition Storage的NewSQL则更倾向于良好的生态兼容,几乎为零的业务改造,来交换了一定程度的可扩展性。
  使用场景上来看,大企业,银行等对用户对扩展性要求较高,可以接受业务改造的情况下,类Spanner的NewSQL及传统分库分表的实现正在正面竞争。而Aurora和PolarDB则在云数据库的场景下一统江湖。 参考[1] DeCandia, Giuseppe, et al. "Dynamo: amazon’s highly available key-value store."  ACM SIGOPS operating systems review  41.6 (2007): 205-220. [2] Chang, Fay, et al. "Bigtable: A distributed storage system for structured data."  ACM Transactions on Computer Systems (TOCS)  26.2 (2008): 1-26. [3] Jingyu Zhou, Alex Miller, et al. " FoundationDB: A Distributed Unbundled Transactional KeyValue Store."  ACM ISBN 978-1-4503-8343-1/21/06 [4] 数据库故障恢复机制的前世今生:https://zhuanlan.zhihu.com/p/20868175 [5] James C. Corbett, et al. "Spanner: Google’s Globally-Distributed Database."  Published in the Proceedings of OSDI 2012 [6] Chandra, Tushar D., Robert Griesemer, and Joshua Redstone. "Paxos made live: an engineering perspective."  Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing . 2007. [7] 浅析数据库并发控制。https://zhuanlan.zhihu.com/p/45339550 [8] Lamport, Leslie. "Time, clocks, and the ordering of events in a distributed system." Concurrency: the Works of Leslie Lamport. 2019. 179-196. [9] Spanner的分布式事务实现。https://zhuanlan.zhihu.com/p/20868175 [10] Pavlo, Andrew, and Matthew Aslett. "What’s really new with NewSQL?." ACM Sigmod Record 45.2 (2016): 45-55. [11] 分库分表 or NewSQL数据库? https://dbaplus.cn/news-159-2690-1.html [12] Verbitski, Alexandre, et al. "Amazon aurora: Design considerations for high throughput cloud-native relational databases." Proceedings of the 2017 ACM International Conference on Management of Data. 2017. [13] Antonopoulos, Panagiotis, et al. "Socrates: the new SQL server in the cloud."  Proceedings of the 2019 International Conference on Management of Data . 2019. [14] Lahiri, Tirthankar, et al. "Cache fusion: Extending shared-disk clusters with shared caches." VLDB. Vol. 1. 2001. [15] Cao, Wei, et al. "PolarFS: an ultra-low latency and failure resilient distributed file system for shared storage cloud database." Proceedings of the VLDB Endowment 11.12 (2018): 1849-1862. [16] Depoutovitch, Alex, et al. "Taurus Database: How to be Fast, Available, and Frugal in the Cloud." Proceedings of the 2020 ACM SIGMOD International Conference on Management of Data. 2020. [17] Mohan, Chandrasekaran, et al. "ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging." ACM Transactions on Database Systems (TODS) 17.1 (1992): 94-162. [18] Amazon Aurora: On Avoiding Distributed Consensus for I/Os, Commits, and Membership Changes

西南边陲血泪史头条号天启元贞文青藏高原位于我国西南边陲,总面积250万平方公里,是世界海拔最高的高原,也是中国面积最大的高原。从某种意义上讲,青藏高原这片神圣的土地是华夏民族的摇篮。远古时期,在日本再不偷袭珍珠港,这大东亚战争就算是白打了估计很多朋友都有这样的疑惑二战时日本为何要偷袭珍珠港呢?偷袭珍珠港导致强大的美国从中立改变态度向轴心国宣战,从而使二战的均势打破,导向同盟国有利的局面。老虎的屁股摸不得,日本政府不太平天国往事1靓仔,你知道耶稣吗头条创作挑战赛1833年的某一天,广州街头,第n次参加府试(明清的科举制度关卡繁多,朋友们可以简单点理解为去考秀才就好,这不是重点,哦不对,这暗含着一个重点,那就洪秀全一辈子连秀才老照片100年前,外国人镜头下的云南思茅,竟然这么美云南思茅,钟灵毓秀,历史悠久。思茅是茶马古道南方丝绸之路的起点,为云南三大海关重镇之一,曾有东南亚陆路码头和银思茅之称。民国时期,思茅为普洱道署驻地。1922年,维也纳人约瑟夫洛克OMF15686疑似古严国父系在尧舜时期已经有严国,尧时代的名士许由之友严僖,战国时韩国人严遂都是严国的后裔。古严国的族属和古址已不可稽考了。根据历史上严氏的分布留下了一些带严字的地名推测,估计古严国应在今河南东南亚岛屿地区为何先于半岛地区沦为殖民地?随着资本主义出现,西方国家开始走上对外扩张的道路,随后,他们便把殖民掠夺的目光瞄准了亚洲地区,东南亚便是被殖民掠夺的地区之一。随着西方国家殖民侵略的进行,东南亚国家也因此发生了翻天浅析美国革命战争初期,美国是如何一步步蚕食加拿大的?文史这样滴编辑史这样滴前言雪松之战是美国革命战争初期,大陆军在1775年9月开始入侵加拿大期间发生的一系列军事对抗。雪松位于圣劳伦斯河北岸,距离现代蒙特利尔中心约45公里(28英里内蒙古与河北的区划调整,河北省的11个县,为何划入了内蒙古?在之前的文章中,作者和大家聊了一系列关于我国河北省与周边各省区划变迁的故事,例如河北省与山东省河北省与河南省河北省与辽宁省的区划变迁等等。今天,我们聊聊河北省与内蒙古之间的区划变迁27张抗日战争时期上色老照片,日军海军陆战队装备精良,缅怀先烈11937年上海,日军战地记者拍摄的战地照片。照片中的日军与对面的中国军队形成了对峙,墙上的广告牌写着可口可乐,屈臣氏汽水。原来那时候的中国已经有了可口可乐,不过估计是上流社会才能明朝有三次兄终弟及第一次兄弟反目,后两次如何呢?头条创作挑战赛兄终弟及在古代历史上出现的次数在三十次左右,是除了皇子继承皇位之外,出现最多的皇位继承形式。这种现象大多出现在乱世和割据势力中。特别是两晋南北朝时期,兄终弟及出现的次延续西汉时期(东汉)历史解读上期已了解西汉时期了,这期让我们接着一口吃读懂东汉时期,为什要分东西汉朝呢?史学家为了区分汉朝的两个时期。就按地理位置来划分,因为西汉首都长安位置相对偏西,所以史称西汉东汉首都洛阳
华为Mate50率先用北斗卫星实现短信通信,手机上卫星通信难在哪?知情郎眼侃透公司专利事儿你会买华为Mate50还是iPhone14?这问题都上热搜了。下午2点半,华为官宣的向上捅破天技术实锤了,余承东说,Mate50是全球首款支持卫星通信功能的荣耀X40官宣曲面屏大圆环,外观迎来重大升级作为荣耀旗下的千元代表产品,荣耀X系列手机受到了许多消费者的关注。目前,不少用户期待的荣耀X40已经确定将于9月15日1930发布,而且从官方公布的预热海报来看,荣耀X40的外观设专利战台积电申请夺冠,华为也来势汹汹知识产权是全球科技产业的竞争关键,而专利战更成为厂商争夺市场利器,根据台湾地区知识产权局统计,2021年中国台湾受理发明专利申请达49116件,创2014年以来最高,而世界知识产权玛恩医生注意这几点冬季肌肤不再干都说女人是水做的,补水总是护肤步骤中不可或缺的一环。然而,冬季天气干燥,肌肤也跟着干燥起来,很多人不但干,还会起屑,甚至因为皮肤干燥,本来不是敏感肌的你变成了敏感肌注意这几点,告别真正见过世面的女人,穿风衣不会搭高跟鞋,太土!这样穿更洋气秋冬天在路上你会被什么样的女性所吸引?漂亮的女人!但是秋冬天不像夏季,大家能展示自己的身材曲线,大家都包裹着像球一样,根本无法分辨美人。但是刘雯为什么总能吸引我的视线,因为会穿!刘新车蔚来ET5更多内饰官图发布,形如小号ET7,细节处有惊喜文懂车帝原创曹浩懂车帝原创产品日前,蔚来官方发布了ET5的最新内饰官图,并且释放了更多车内细节。新车于今年1月NIODay2021上正式发布,补贴前售价为32。8万元,使用BaaSAirPodsPro2终于来了,全新H2芯片亮点很多,但仍有遗憾今天凌晨,苹果举办线上发布会,除了大家期待已久的iPhone14系列正式发布外。此次发布会还带来了AppleWatch系列AirPodsPro第二代。让大家意想不到的是,这次备受关一个人能否成大事,就看这五种迹象有定力,不浮躁一个人想要干成一番事业,首先要有定力。定力看的是一个人能否沉下心去做一件事情。有定力的人,看问题的时候不会眼高手低,而是客观理性遇到打击和磨炼,能沉下心来专注应对,讲谁写的藏头诗,有才我们天天空间见,把握今生这份缘。我愿真心换真意,的确感到好温暖。祝友运好财亦好,福如东海寿南山。送与温馨谐互动,给予真情久留恋。大富还要加大贵,家家幸福偕年年。祝友节日笑开颜,福似怪兽充电第二季度营收突破6。9亿元,单季净增用户1160万北京时间9月8日晚间,在纳斯达克上市的共享充电宝第一股怪兽充电(NASDAQEM)公布了截至2022年6月30日的第二季度未经审计财务报告。财报显示,怪兽充电今年第二季度营业收入达老年人学用智能手机(三)上一次介绍了智能手机的界面,分享了打电话接电话保存亲朋好友电话号码和收发短信的方法,今天想和朋友们一起学习智能手机5个常用功能的设置和用法。1。如何调节字体大小和粗细第一步,在手机