OceanBase、TiDB这类NewSQL的定位是什么?
一、OceanBase、TiDB这类NewSQL的定位
oceanbase tidb spanner是share nothing的架构,单个分区有paxos保证可用性的前提下,还有近乎线性的扩展能力,而代价是复杂查询和DML,不一定都能生成下推执行的plan,要么无法执行要么执行很慢。再有就是分布式事务一致性的代价,分布式快照读代价较大。
mysql GR更像share data的rac和pureScale,容量和计算的扩展能力有限,它们的出现更多的意义是对传统的单机mysql oracle db2在可用性上的补充。使用起来与传统单机实例没有差别。
首先要明确的是,没有完美的系统,任何一个系统的出现都是为了解决当时最主要的问题,但是会产生一些其他的小问题,跟药一样,能治病,但是一般都会有副作用。
那么完美的数据库系统什么样呢,我现在能想到以下几点:
1.易用与灵活性:数据库可以理解自然语言,我跟它说我要存储什么样的数据,就存进去了,要查询什么样的数据,就给我取出来了,不需要我告诉它怎么存,怎么取
2.扩展性:可以存储无限多的数据,不需要担心容量的问题
3.高性能:性能非常强大,不管想存或取什么数据,瞬间就完成了
4.高可用:数据存储之后,永远也不会丢,系统永远也不会挂掉,1年365天,1天24小时随叫随到
5.并发与隔离性:数据库不仅可以满足我一个人,也可以满足所有人的同时读写,并且我们之间互不干扰
关系数据库之前的存储系统基本上一个条件也不满足
传统单机关系数据库一定程度上解决了问题1、3、5,用户不需要知道数据是怎么存储的,行存储还是列存储或者其他的结构信息,查询的时候用SQL就可以了,不需要根据数据的存储结构编写特定的程序,大大简化了应用开发,性能也还可以。之所以说是一定程度上,是因为并没有完美的解决。SQL虽然很简单,但要比自然语言复杂得多,更改表的schema也不是特别方便;性能的话对于复杂查询,优化器无能为力,可能会给出性能非常差的查询计划;并发与隔离性可以做到,但是要牺牲性能
Mysql Group Replication帮助传统单机关系数据库解决了问题4
如果数据量不大,这样用着也不错了。但是互联网导致了数据量的爆炸式增长,单机存储不下这么多数据了。所以才会出现了Bigtable等NoSQL分布式数据库,解决当时最主要的数据量暴增问题。这些系统一定程度上解决了问题2、3、4。它想不想解决其他问题呢?肯定想,但是要解决这些问题,系统会变得更加复杂,需要更长的时间,但是系统需要快速上线啊,那么就先把最主要的问题解决了就好。隔离性就由业务部门自己去解决吧,这也导致了后来业务部门很多的抱怨。所以我觉得NoSQL在开发的时候是有很多妥协的,属于救火的产品,不可能成为未来的方向。
目前看来OceanBase、TiDB、Spanner/F1这些系统是能够解决上述问题非常多的系统。
1.支持SQL
2.数据被拆分成一个个range,分散在不同的服务器中,通过增加服务器就可以一定程度上的线性扩容
4.多副本,并且通过paxos或raft保证多副本之间的一致性
5.通过2PC,MVCC支持不同隔离级别的事物
但是相比高端服务器上的单机数据库,性能会有些问题
查询的延迟(latency)会比较高,网络是一个问题,比如分布式join就要用到网络,有人做过实验,在不改变现有查询引擎的情况下,单条查询随着服务器数量增多,性能不增反降,把网络换成InfiniBand效果也不好,后来重新设计了查询引擎,性能做到了递增。可以参考High-Speed Query Processing over High-Speed Networks(
http://www.vldb.org/pvldb/vol9/p228-roediger.pdf
)
所以需要改变很多传统的做法,针对新硬件进行新的设计、优化,是可以大幅度提高性能的。
未来不敢说,单机数据库在很多场景下还是会有广泛应用的,NewSQL最起码接下来的几年里都还有很大的发展潜力,而NoSQL,分布式中间件等方案基本上就是明日黄花了。
延伸阅读:
二、数据库的查询功能实现原理
数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优异的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
猜你喜欢LIKE
相关推荐HOT
更多>>mysql怎么查看连接池是否已满?
一、mysql怎么查看连接池是否已满1.查看连接数配置(MySQL服务器允许的最大连接数16384)show variables like ‘%max_connections%’2.查看当前...详情>>
2023-10-17 21:20:19什么是职场情商,如何提高?
什么是情商?情商是一个 20 世纪 90 年代作为学术话题出现的概念,并迅速成为商业心理学和职场动态研究的重要组成部分。它通常被称为 EQ(情商...详情>>
2023-10-17 20:16:30vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访...详情>>
2023-10-17 19:45:03数据挖掘中涉及的关联规则在实际生活中的应用有哪些?
一、数据挖掘中涉及的关联规则在实际生活中的应用关于关联规则分析,这篇文章可以认真学习一下,讲的比较全面,关联规则分析还在零售、快消、电...详情>>
2023-10-17 18:40:06热门推荐
sql server2012r2所在服务器做端口限制,需要开放什么端口才能继续访问数据库?
沸Oracle有什么优势和劣势?
热数据库聚集索引非聚集索引实现上有哪些区别?
热数据库(如oracle、mysql)及编程语言(php、python、perl、lisp)的区别?
新CSS 隐藏页面元素有哪些方法?
除了cx_Oracle,python还可以通过什么方式访问Oracle数据库?
SQL开启事务处理的语句 START TRANSACTION 和BEGIN TRAN的区别?
Android适配你需要学习哪些?
开发web应用,好的开发流程是怎么样的?
为什么说Gradle是Android进阶绕不去的坎?
mysql怎么查看连接池是否已满?
WHERE中有很多IN判断怎么提速?
软件开发要遵循哪些事项?
有了innodb buffer pool为什么要有redis?