• 1. Infinidb在大数据的实战应用赖亿 2015/5/16
  • 2. 目录背景 InfiniDB的特点 Infinidb的实战
  • 3. 背景
  • 4. 问题一个真实的血案: 需求:我们在数据库mysql要做基于pv的分析。日均裸数据增量>10g 初始方案: 使用innodb 问题:数据量增加太快,磁盘空间增加太快(40g) 数据加载太慢了 最最重要统计类查询太慢了,需要建太多的索引/汇总表 改进方案:换成tokudb 解决问题:数据压缩4倍,空间增加勉强可以接受(10g) 数据加载快些了4倍左右,勉强可以接受 未解决: 最最重要查询太慢了,一个查询5分钟甚至更长, 优化太痛苦,需要建太多的索引/汇总表
  • 5. 问题一个真实的血案: 需求:我们在数据库mysql要做基于pv的分析。日均裸数据增量>10g 初始方案: 使用innodb 问题:数据量增加太快,磁盘空间增加太快(40g) 数据加载太慢了 最最重要统计类查询太慢了,需要建太多的索引/汇总表 改进方案:换成tokudb 解决问题:数据压缩4倍,空间增加勉强可以接受(10g) 数据加载快些了4倍左右,勉强可以接受 未解决: 最最重要查询太慢了,一个查询5分钟甚至更长, 优化太痛苦,需要建太多的索引/汇总表
  • 6. 解决:--换成infinidb最终方案: 使用infinidb(和最初方案innodb比较) 空间增量2g ( 原来增量40g) 加载数据 20万/每秒 (原来 <1万/每秒) 查询一般小于1分钟(原来5分钟,甚至20分钟) 免优化(再也不要建index了哦) 业务线的反馈
  • 7. 目录背景 InfiniDB的特点 Infinidb的实战
  • 8. Infinidb的定位Hbase等infinidbinfinidb
  • 9. infinidb产品介绍产品特点: Mysql协议兼容 全功能,支持dml 统计类查询10倍 Load数据快(每秒>10万) 压缩率5倍(和裸数据比) 免优化
  • 10. Infinidb的单机构架
  • 11. InfiniDB 分布式框架集群文件系统(hdfs/gfs) 2013.10.15 支持hdfs –不太建议生产环境用
  • 12. InfiniDB-兼容 性不支持最新版本mysql 官方的java驱动 支持marridb的mysql驱动 模式0和1性能相差10倍
  • 13. InfiniDB-兼容 性带来的性能问题模式0和1性能相差10倍 符合infinidb的sql: (17.33 sec) 不符合infinidb的sql且语法 select ...from fact,dim .., (1 min 5.22 sec) 不符合infinidb的sql且语法 select ...from dim,fact .., (4 min 47.09 sec)
  • 14. 真实业务性能测试—查询性能
  • 15. 分析类存储引擎InfiniDB – 查询性能对比测试 TPCH测试(以下以1G数据量,150000行用户数据测试)
  • 16. InfiniDB存储 – 为啥查询这样快数据存储方面,“拆拆拆”: 按列拆 按行(范围)拆: 核心算法:hash join
  • 17. InfiniDB存储 – 按列拆
  • 18. InfiniDB存储 – 按行(范围)拆每个范围(术语:Extent Map)都有最大/最小值,方便过滤 Extent Map 的向上扩展更大的范围(术语:Partition)也有最大值/最小值 每个Extent Map 可以并行计算
  • 19. InfiniDB存储 – hash join 核心算法:hash join 每行都有一个rowid 查询2列以上:通过行rowid关联,使用hash join 不太怕表的关联 很怕Select *
  • 20. InfiniDB存储 – 多表关联
  • 21. InfiniDB存储 – 多表关联性能问题性能损耗: 如果sql是infinidb语法:多一个表查询时间就会多一倍 比如1个事实表7秒,2个表(1个事实表+1个维度表)关联大约14秒,3个表(1个事实表+2个维度表)关联大约28秒 如果sql不是infinidb语法,多表关联是灾难
  • 22. InfiniDB存储 – 为啥查询这样快(总结)数据存储方面,“拆拆拆”: 按列拆 按行(范围)拆: 通过核心算法:hash join实现关联
  • 23. 装载和更新-真实业务性能测试
  • 24. InfiniDB存储 – 数据装载 语法load data local infile … 速度超快 (>10万/每秒) 一个表只能对应一个load语句,不可并行 内部过程: 内部实现转换成cpimport的方式 内部实现 并行加载(不可以调并行度,代码写死了) Cpimport的实现是append 文件的方式
  • 25. InfiniDB存储 –-锁、事务和mvcc对于DML:页级别的锁 Version Buffer (SCN) : 保存被修改的数据块,用于管理回滚、MVCC支持和snapshot Initial 4M 内存hash表,默认文件1G,VersionBufferFileSize控制大小 在HDFS上,MVCC是disabled的,回滚只支持在语句级 对应load数据:append数据到文件末尾,需要回滚时直接抛弃数据
  • 26. InfiniDB – 压缩每一列的重复值多,所以压缩率5倍 set infinidb_compression_type = n 可以在实例级或session启用关闭压缩。 0) 关闭压缩 1 or 2) 启用压缩,默认为2(quicklz算法)
  • 27. InfiniDB – 免优化 无index 自动分区 dba唯一可以做的:sql优化只能调整表的连接持续
  • 28. InfiniDB – 和其他产品的对比 Inforbright社区版 功能:不支持DML 限制功能的开源 Hbase Hbase本质上是个key –多value的构架 复杂 扩展性好 和infinidb是互补的结构
  • 29. infinidb产品特点(总结)产品特点: Mysql协议兼容 全功能,支持dml 统计类查询10倍 Load数据快(每秒>10万) 压缩率5倍(和裸数据比) 免优化
  • 30. 目录背景 InfiniDB的特点 Infinidb的实战
  • 31. InfiniDB – 社区支持问题 现在支持比较差,未来前景比较好 (现状)文档和问题资料比较少 2000 年公司,发布产品 2013.10月,支持hadoop文件系统 2014.10月公司倒闭 2014.10月 mariadb接手 2015.Q1会发布新的版本
  • 32. InfiniDB – 高可用问题 集群版本没有高可用文档,但是也许不太稳定 单机版本本身不提供高可用 备份/恢复方案+手工补缺少数据 使用lvm Drbd的方案 Mysql主从方案不适应( 因为有binlog问题)
  • 33. InfiniDB – 高可用drbd
  • 34. InfiniDB – 规范(合适的场景)
  • 35. InfiniDB –规范(不合适的场景)
  • 36. InfiniDB –应用类问题 如果sql不符合infinidb的语法且又有多表关联是灾难 Infinidb数据会混乱 使用最简单的语法 Infinidb的数据表损坏 重新建立表,然后把数据导回去 大量的delete/load并行容易死锁 比如一天 84次delete,每次600万 Infinidb数据量排序大报错 max_length_for_sort_data  infindb server本地mysql客户端不能load file 远程做,不要本地做
  • 37. 总结 目前:在可用性要求不高情况下,sql统计分析的利器 统计类查询10倍 Load数据快(每秒>10万) 压缩率5倍(和裸数据比) 免优化 将来:在数据仓库中环境中,很有前景的产品 构架先进 有mariadb组织的支持
  • 38. QA中国MySQL用户组 http://acmug.com