如:
EmpId | Lastname | Firstname | Salary |
---|---|---|---|
1 | Smith | Joe | 40000 |
2 | Jones | Mary | 50000 |
3 | Johnson | Cathy | 44000 |
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;
在column-oriented DB中被序列化成:
1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;
区别在于:
1) 适合于运算于行多列少(一个列的较小集合)数据表查询.
2) 适合于更新整列的操作,可以不碰到其它列
3) 而row-oriented DB适合于更新有单行的多列.当一行很小时,只要一次磁盘操作就可取回整行
4) 而row-oriented DB适合于写入一个新行如果所有的列数据都提供的话
InfiniDB 是属于Column-oriented DB,由Calpont Corp.提供, GPL v2许可证. Open source
InfiniDB Features:
- Column-oriented, 适合查询
- 多线程设计.
- 自动的水平和横向分区.即行列都能分区
- 高并发:理论上无并发的限制,只受制于服务器的容量
- 高速数据装载器
- DML(可以视为是SQL的子集)支持 : 语句insert, update, delete
- Transactional支持:
- Crash恢复:
- 多版本并发控制(MVCC),保证所有的语句执行在一个特定的snapshot中,系统称之为(System Change Number, SCN). 这个称为Version Buffer的东西由内存(表明一个被修改的8块的hash表)和磁盘结构(默认4 个1G的文件, 散布在一台机器的多个驱动器上,(就象InfiniDB的数据文件一样)组成.
- 无需索引
- 低维护需求,诸如不需要实例化的视图和统计表来达到高性能
- Alter操作支持:add, drop
- 逻辑数据压缩,透明的,当前只通过去除重复数据的方法来压缩.以后会有针对列级别上物理数据的压缩.
- 性能自检:提供了SQL的分析和跟踪工具来查错和调优
- MySQL作为前端接口
- 运行在通用的硬件平台上
- 无许可证费用
- 商业智能(BI)工具兼容,因为用了MySQL的连接器,所有支持与MySQL兼容的BI工具
对于有选择的查询,即只要求读取很少的列时,row-based DB要化5~10倍的物理IO相对于Column-based DB.
因此Row-based DB利用索引,水平分区,物理视图,摘要表和并行处理来提高性能.这同时也带来了负面问题.如空间,索引的选择,更复杂的更新增删操作.
Extract-Transform-Load (ETL)指数据处理的三个主要过程 : 从不同的来源抽取数据,变换及过滤数据(有时可能没有),装载数据到Data warehouse.
通常reporting DB与data warehouse是不同的,它们仅是一个Transactional系统的镜像,用于查询当前或历史数据.数据在这两个系统间装缷,复制,或Extract-Load
InfiniDB还有社区版和商业版之分,
商业版还有如下Feature:
- 大并行处理能力:能采用多台通用硬件平台的机器来达到性能线性增长.能动态加入节点
- 分布式的Share-nothing数据缓冲: 有一个逻辑上的cache分布在各参于的节点中.要求大内存
- 自动Failover
- 自动并发的Scale-out
- 自动软件打补丁管理
Architecture:
用户模块(User Module) ; 由小的MySQL实例和一些InfiniDB的掌控并发扩充的进程组成.本模块也负责将SQL查询分解在针对于"性能模块"的多个部分,最终本模块组装所有查询的结果给用户,可以有多个用户模块存在,这提供了高可用性配置及查询的负载平衡
性能模块(Performance Module) : 负责保存, 读取, 管理数据库,处理块请求并传回"用户模块", 本模块从磁盘或Cache(也就是前述的Share-nothing的数据缓冲)中读数据.分布式Cache就存在于本模块中,增加PM也就增加了Cache. (好象只有企业版(商业版?)有)
存贮(Storage)利用本地存贮或共享存贮(e.g. SAN (storage area network)), 可以是单台或多台服务器
单台机(Community Edition) Architecture
Enterprise (Commercial Edition) Architecture
用户查询处理流程:
- 一个查询来到MySQL (InfiniDB Server), MySQL进行表操作从MySQL中得到一个查询执行计划
- InfiniDB转换MySQL表对象为InfiniDB对象,并发给一个UM
- UM转换MySQL执行计划并优化这些对象成为InfiniDB执行计划.UM决定这个计划的执行步骤和时机
- UM咨询Extent Map,来得到适合查询的数据的位置
- UM发送命令给PM,执行块IO操作
- PM进行预过滤,连接处理,初始化聚合数据和发回结果给UM
- UM进行最终结果聚合和合成最终结果
- UM返回结果集给用户
InfiniDB的存贮思想:
Block : 8k的数据块,有Logical Block ID,大小不能定制,但预读的数目可以定制
Extent : 一个逻辑空间尺寸,存在于一个或多个的称为segment文件的物理文件中. extent大小受1)默认的行数2)一个列的数据类型, 如默认行数是8M,对一字节数据类型来说,Extent大小就是8M; 对于8字节数据类型来说,就是64M;对于可变长数据类型来说也是64M.当一个Extent满了,一个新的Extent就会被创建出来.
Segment File : 当一个Segment文件达到它的Extent包含的最大数目,一个新的Segment文件就会被创建出来
Partition : 与row-based DB不同之处在于它是一个逻辑上的对象.由一个或多个Segment文件组成. 一个列的partition数目是不限的.
没有评论:
发表评论