Pgsql
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。
五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好
TiDB 在架构上将计算和存储层进行高度的抽象和分离,对混合负载的场景通过 IO 优先级队列,智能副本调度,行列混合存储等技术使其变为可能。TiDB 作为开源的分布式关系数据库,其特点是几乎可以 100% 兼容 MySQL 接口,也兼容 MySQL 的语法和协议,在保证不丧失 ACID 事务的前提下,能够弹性伸缩,高可用,可以同时处理 OLTP 和 OLAP 工作负载,不再需要 ETL。
OceanBase采用的是share-nothing的分布式架构,每个OBServer都是对等的,管理不同的数据分区。单机的存储引擎采取读写分离的架构,将当前更新的动态数据存入内存称为MemTable,存量的基线数据存在磁盘,称为SSTable。 一个Partition的所有数据(基线数据+增量数据+事务日志)都放在一个OBServer中,因此针对一个Partition的读写操作不会有跨机的操作,数据的写入也分布到多点并行执行。
都高度兼容 mysql.
作者:李晨曦
链接:https://www.zhihu.com/question/53795813/answer/137046615
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
首先要明确的是,没有完美的系统,任何一个系统的出现都是为了解决当时最主要的问题,但是会产生一些其他的小问题,跟药一样,能治病,但是一般都会有副作用。那么完美的数据库系统什么样呢,我现在能想到以下几点: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.支持SQL2.数据被拆分成一个个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,分布式中间件等方案基本上就是明日黄花了。
oceanbase支持跨表的事务,而hbase中支持跨行的事务,这是由他们的设计特别决定的。
updateserver实际上是将Hbase所有ReginonServer的memtable聚合在一起。
regionserver只服务一部分table的更新(当然也有查询服务),所以只能够提供行级别更新的事务。
而UpdateServer是服务所有的tablet的更新,所以可以提供跨行跨表的事务,所以UpdateServer看起来很重,但是适合读大于写的应用