2009年11月25日星期三

InfiniDB


Column-Oriented DBMS:
如:
EmpIdLastnameFirstnameSalary
1SmithJoe40000
2JonesMary50000
3JohnsonCathy44000

在row-oriented database中存储时被序列化成
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工具
From InfiniDB Technical Overview White Paper:
对于有选择的查询,即只要求读取很少的列时,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

用户查询处理流程:
  1. 一个查询来到MySQL (InfiniDB Server), MySQL进行表操作从MySQL中得到一个查询执行计划
  2. InfiniDB转换MySQL表对象为InfiniDB对象,并发给一个UM
  3. UM转换MySQL执行计划并优化这些对象成为InfiniDB执行计划.UM决定这个计划的执行步骤和时机
  4. UM咨询Extent Map,来得到适合查询的数据的位置
  5. UM发送命令给PM,执行块IO操作
  6. PM进行预过滤,连接处理,初始化聚合数据和发回结果给UM
  7. UM进行最终结果聚合和合成最终结果
  8. 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数目是不限的.















没有评论:

发表评论