OceanBase相比其他开源的noSQL数据库有什么优点?
一、OceanBase相比其他开源的noSQL数据库的优点
1. OB的redolog是使用分布式一致性算法paxos实现的。所以在CAP理论中,虽然OB使用的是强一致模型,但是OB能在一定网络分区的情况下做到高可用(通俗点讲就是多余半数机器还活着的时候就能干活)。官方的MySQL目前做不到这一点
2. OB的存储结构使用的是两级的LSM-tree。其中内存中的C0 Btree叶节点不需要和磁盘上的btree一样大小,所以能做得比较小,对cpu的cache比较友好,并且不会有写入放大的问题。使得OB的写性能有极大的提升。同时磁盘上的C1 tree不是一个传统意义上的btree(btree未经压缩可能浪费一半空间)。空间利用率大大提高。简单来说就是速度快,省成本。这里说的比较粗略,想详细理解自己去看LSM-tree的论文。
3. 数据库自动分片功能(支持hash/range,一级二级等等分片方式),提供独立的proxy路由写入查询等操作到对应的分片。这意味着数据量再大也不需要手动分库分表了。并且分片能在线的在各个server之间迁移,解决热点问题(资源分配不均的问题,做到弹性加机器和减机器)。每个分片(确切的说是被选为主的分片)都支持读写,做到多点写入(高吞吐量,性能可线性扩展)。
4. 数据库内部实现的无阻塞的两阶段提交(跨机事务)。参见论文Consensus on Transaction Commit
5. 数据库原生的多租户支持。能直接隔离租户之间的cpu,mem,io等资源。
6. 基于代价的SQL查询优化和改写功能,对于复杂的分析型SQL做得比MySQL好(目前比Oracle差,正在努力追赶中)。支持各种类型的join算法(nestloop, merge, hash),优化器会自动选择优异的join类型。支持类似Oracle的SPM功能,用户能很轻松自如的管理查询计划。
7. 自动化的集群管理,包括机器上下线,自动下故障盘等等。总之OB的设计理念就是只要是数据库需要解决的问题就不让用户操心。
延伸阅读:
二、数据库的查询功能实现原理
数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优异的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

猜你喜欢LIKE
相关推荐HOT
更多>>
Linux系统开机加电后发生了什么?
一、Linux系统开机加电后发生了什么电脑启动后,CPU逻辑电路被设计为只能运行内存中的程序,没有能力直接运行存在于软盘或硬盘中的操作系统,如...详情>>
2023-10-16 20:17:25
Medium Android客户端都使用了哪些开源项目?
1、RetrofitRetrofit是一个适用于 Android 和 Java 的类型安全的 HTTP 客户端,是一个针对Android平台的网络请求库,它基于OkHttp封装了网络请...详情>>
2023-10-16 19:21:33
MySql什么是数据库架构设计?
一、MySql什么是数据库架构设计MySQL是一种流行的关系型数据库管理系统,它被广泛用于Web应用程序和企业应用程序的开发。在MySQL中,数据库架构...详情>>
2023-10-16 13:21:22
JVM中的堆区为什么叫堆(heap),与数据结构中的堆是一个概念吗?
一、JVM中的堆区为什么叫堆(heap)JVM中的堆区和数据结构中的堆并不是一个概念。JVM中的堆区之所以叫做堆,是因为它的物理存储结构类似于堆(h...详情>>
2023-10-16 11:24:35热门推荐
OceanBase相比其他开源的noSQL数据库有什么优点?
沸Flash动画制作的原理是什么?
热为什么GIL让多线程变得如此鸡肋?
热为什么要用Lambda表达式?
新苹果电脑mac怎么安装SQL server?
C、C++、C#的区别?
Linux系统开机加电后发生了什么?
Python解释器,终端,编辑器区别和联系?
Medium Android客户端都使用了哪些开源项目?
MyBatis流行的原因?
transform和opacity动画为什么性能好?
JButton的e.getSource()和e.getActionCommand()方法有什么区别?
webpack中的url-loader和file-loader有哪些区别?
为什么 SwiftUI 用 “some View” 作为视图类型?
技术干货






