淘宝数据库OceanBase SQL编译器部分 源码阅读--Schema模式

淘宝数据库OceanBase SQL编译器部分 源码阅读--Schema模式

什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们可以可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的柜子,行和列就是柜子中的格子。User就是房间的主人。简单来说,Schema是包括表,列,索引,视图等数据库对象的集合

OceanBase中的强Schema

OceanBase要求schema强类型约束,也就是要预先定义好schema。这与传统的数据库基本相同,与很多nosql的schema-free大相径庭。
也就是说,OceanBase的数据模式是基于关系模型的。关系模型通过关系分解消除数据结构的复杂性,获得了对数据查询的能力和灵活性。而关系模型的缺点也是因为关系分解,使得在需要“组装”的数据时要进行join操作,而join则是相当耗时的操作。
大部分的NoSQl产品以MongoDb为代表,是基于文档模型的,类似json的bjson格式,因此可以存储比较复杂的数据类型,并且可以避免了join操作。在获得数据结构的可扩展性的同时,则失去了对通用数据查询语言(SQL)的支持。你需要重新学习这些NoSQL产品的查询语言。
关于关系数据库与NoSQL的对比,这里有一篇好文推荐给大家:

自由模式的MySQL vs NoSQL

OceanBase中Schema的格式

根据OceanBase官方文档的介绍:
OceanBase 中的schema 表示为纯文本的ASCII码文件, 采用常见的配置文件的形式. 分成各个 section. 每个section 下有多个配置项, 配置项名称和配置值之间用”=”连接.

OceanBase 中 schema 是以应用为单位的, 一个应用一个schema文件. 一个应用中可以包含多张表, 每张表中可以包含多个列, 以及多个联表(join)关系.

我们以下面一个例子test1.ini文件来逐个梳理Schema的各个部分。文件内容如下:

[app_name]       
name=collect
max_table_id=1003

[u_collect_item_id]      
table_id=1001
table_type=1
column_info=1,2,item_name,int
column_info=1,3,new_price,varchar,20
rowkey_split=0
rowkey_max_length=9
max_column_id=3

[collect_info]
table_id=1002
table_type=2
column_info=1,2,item_name,int
column_info=1,3,item_price,varchar,20
rowkey_split=8
join=rowkey[8,16]%u_collect_item_id:item_name$item_name,item_price$new_price
rowkey_max_length=17
max_column_id=3

[collect_item_id]
table_id=1003
table_type=2
column_info=0,2,item_name,varchar,20
column_info=0,3,new_price,int
rowkey_split=0
rowkey_max_length=9
max_column_id=3


应用的信息

[app_name] section为应用的信息。其他section每一个代表一张表。
目前主要有两个配置项:
name :用来配置应用的名称, 是一个长度不超过128位的字符串.
max_table_id :用来记录当前已经使用的最大的table_id. 在OceanBase中, 每个表都由table_id唯一标识, 且table_id不可以被重复使用. max_table_id 这个配置项, 主要是为了方便 schema 生成程序记录已经使用过的table_id.

表的信息

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值