与mysql对比
分布式一致性算法 paxos
存储结构(引擎)用的是两级的
数据库自动分片功能,提供独立的obproxy路由写入查询等操作到对应的分片
多租户
方便扩展
存储层
http://www.hzhcontrols.com/new-1391864.html
LSM tree,is very different from relationship database 读写分离,数据氛围基线数据和增量数据,基线放SSD, 增量放内存
它并不是一棵树,也不是一种具体的数据结构,它实际上是一种数据保存和更新的思想。
**ob所有的数据更新写入操作都在内存的 MemTable ,达到阈值,转磁盘中的 SSTable
存储层以一张表或者一个分区为粒度提供数据存储与访问,**每个分区对应一个用于存储数据的Tablet(分片),用户定义的非分区表也会对应一个 Tablet
均衡层
当租户有扩容操作,获得更多服务器资源时,均衡层会将租户内已有的日志流进行分裂,并选择合适数量的 Tablet 一同分裂到新的日志流中,再将新日志流迁移到新增的服务器上,以充分利用扩容后的资源。新建表和新增分区时,系统会按照均衡原则选择合适的日志流创建 Tablet
多租户
每一个租户即一个实例(类比 MySQL Instance)
索引
OceanBase 数据库采用的是聚集索引表模型,对于用户指定的主键,系统会自动生成主键索引,而对于用户创建的其他索引,则是二级索引
执行计划
执行计划分为三种:Local 、Remote 、Distribute
local 本节点 单表单分区 romote 其他节点 单表单分区 Distribute 多表多分区 多个节点
https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001700649
=======================================================================
|ID|OPERATOR |NAME |EST. ROWS|COST|
-----------------------------------------------------------------------
|0 |EXCHANGE IN REMOTE | |1 |54 |
|1 | EXCHANGE OUT REMOTE| |1 |53 |
|2 | TABLE GET |t_cs_digital_core_chat_history|1 |53 | TABLE GET 主键定位 TABLE SCAN范围搜索 若有索引则TABLE SCAN t1(index1) 没有则主表扫描
=======================================================================
对于普通索引和全局索引,索引回表的逻辑是封装在 TABLE SCAN 算子中的 is_index_back是否需要回表 is_global_index 标识算子是否是扫描全局索引
Outputs & filters:
-------------------------------------0 - output([t_cs_digital_core_chat_history.visit_session_id(0x7f4c5f91ab90)], //输出列[t_cs_digital_core_chat_history.slot(0x7f4c5f91b110)]), filter(nil) 过滤41 - output([t_cs_digital_core_chat_history.visit_session_id(0x7f4c5f91ab90)], [t_cs_digital_core_chat_history.slot(0x7f4c5f91b110)]), filter(nil)2 - output([t_cs_digital_core_chat_history.visit_session_id(0x7f4c5f91ab90)], [t_cs_digital_core_chat_history.slot(0x7f4c5f91b110)]), filter([t_cs_digital_core_chat_history.data_type(0x7f463e248a10) != 3(0x7f463e248360)]), access([t_cs_digital_core_chat_history.data_type(0x7f463e248a10)], [t_cs_digital_core_chat_history.visit_session_id(0x7f4c5f91ab90)], [t_cs_digital_core_chat_history.slot(0x7f4c5f91b110)]), partitions(p0), //非分区表只有p0is_index_back=true, filter_before_indexback[false], range_key([t_cs_digital_core_chat_history.ID(0x7f4c5f91a610)]), range[4003526 ; 4003526], // 索引的key列,range start endrange_cond([t_cs_digital_core_chat_history.ID(0x7f4c5f91a610) = 4003526(0x7f4c5f919f60)]) condition determining the range Used Hint:
-------------------------------------/*+*/Outline Data:
-------------------------------------/*+BEGIN_OUTLINE_DATAFULL(@"SEL$1" "cs_digital_core_db.t_cs_digital_core_chat_history"@"SEL$1")END_OUTLINE_DATA*/Plan Type:
-------------------------------------
REMOTEOptimization Info:
-------------------------------------t_cs_digital_core_chat_history:table_rows:10, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:0, est_method:local_storage, optimization_method=rule_based, heuristic_rule=unique_index_without_indexbackParameters
-------------------------------------
对于有关联性的表,建议使用关联键作为分区键,并采用相同分区方式,尽量避免区跨节点操作
副本
zone>=3 奇数选举 以分区为单位,一个zone包含一个副本,一个分区数据可在多个zone内保存多个副本,副本容灾和分散压力,主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性
分区
单个表最多支持创建的分区个数为 8192 个
zone 副本 observer Shared Nothing obproxy multi tenant