`
爱迪生的小屋
  • 浏览: 36388 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Infobright优化实践

阅读更多

Infobright优化实践

      统计系统后台用到了Infobright ICE社区版,记录10亿规模,出于灵活和省力的目的。日志入库过程并未作复杂处理,而是一条记录对应一条日志,所有的统计分析都是实时查询。最近日益感觉查询速度不足,于是做了一些研究和优化,成功将速度提升10倍以上,现将优化实践做个记录。

 

老少皆知的方法

    1. comment 'lookup':对于选择少于10000的字符串型字段,这是一个非常实用的优化

    2. 按特定顺序导入记录:日志最重要的属性是时间,我的日志也是按时间升序导入,因为时间本身没什么重复性,所以不用考虑第二,第三排序字段。

    3. 结果输入字段尽量精减:作为列存储数据库,查询过程用到的字段越少,读的数据就越少,最后select的结果就是where和group里用的条件。

 

我所尝试的方法

    1. 扩展comment 'lookup'的思路,将字符串字段先在mysql的库中建一个字典,入infobright库时转换为数字型主键。可以解决comment 'lookup'里10000个的限制;而且在数据导出时也是数据,减少导出文件的大小。

    2. 将字符型字段转换成数字:比如IP字段,完全可以转换成一个4byte的数字,不会丢失精度。再比如userToken字段,如果是比较短的字母和数字的组合,可以将里面的字母替换成0-9数字,虽然会丢失一点精度,但不同的token上仍然可以区分,可以在不是非常丢失精度的情况下获得近似正确的统计结果,对我而言是可以接受的。

    3. 日期的统计,往往有按年,月,日,小时,周期,季度都的需求,使用函数显然不合适。这里可以在表里为每一个需求多加一个字段,比如2001算起的第几年,第几月,第几日,第几个星期,占用空间不大,统计起来直接按照对应字段来group,速度提升显著。

    4. 更新Infobright版本,把我用的infobright版本从3.5.2提升到4.0.7,感觉上有20%的性能提升,免费的提升,不要白不要。

    5. 提高内存,服务器12G内存,Infobright推荐堆内存6G,我把它提高到了8G,减少了一些cache的使用。

    6. cache目录和data目录分两块硬盘,使用到cache的时候相当于硬盘的读写性能翻倍。

    7. 粗排序:我自己发明的名词,不知道有没有人提出过,基本原理是基于Infobright的数据集,为了能尽快发现一个数据集与查询条件是否相关,我们会使用到排序,而且是多字段的。问题出现在这里,当前面的排序字段重复性越低,后面的排序字段的作用就越小。比如我的日志表,第一排序字段是时间,单位是秒,第二排序字段是客户端类型,我发现由于同一秒内的请求量太少,客户端排序就显得没什么意义,根据客户端的搜索就得不到什么优化,如果时间单位是毫秒,那就更不会有同一时刻的请求出现,客户端排序就变得毫不意义。为了解决这个问题,我把第一排序字段换成了createhour,即前面第3条为了group by hour而添加的字段,第二排序字段还是client,这样一来,同一小时的记录数大大增加,查询条件里针对client的优化也出现了明显的速度提升,至于按照时间来排序,的确速度会略有下降,但是因为只是在一个小时的记录数内进行排序,速度还是非常之快。正所谓:天之道,损有余而补不足。这个优化非常成功,将综合性能提升了2-3倍。

 

特定条件下的关键优化

    如果一个查询是可以拆分的,则可以进一步优化。

    所谓查询可拆分,指的是查询可以通过where条件分成多个区间,每个区间的结果互不影响,将每个区间的结果组合就可以得到最终结果。

    比如:要查询日志表中每个月的请求数,我们会用这样的sql

            select createmonth, count(*) from access_log group by createmonth;

    这就是可以拆分,它可以按时间被拆分成一组sql

    select createmonth, count(*) from access_log where createtime between '2013-01-01' and '2013-02-28' group by createmonth;

      select createmonth, count(*) from access_log where createtime between '2013-03-01' and '2013-04-30' group by createmonth;

      select createmonth, count(*) from access_log where createtime between '2013-05-01' and '2013-06-30' group by createmonth; 

      select createmonth, count(*) from access_log where createtime between '2013-07-01' and '2013-08-31' group by createmonth;

     最后把每个查询的结果组合在一起就可以得到每个月的播放数。一般情况下,一个查询是否可以拆分凭经验就可以判断,基本上没有多表组合且没有distinct的查询都可以拆分。

     对于可拆分的查询,有两个强大的优化可以做,那就是:

     1. 多线程查询:要知道Infobright社区版是不支持一个查询语句多线程,这也是它被诟病最多的一点,但企业版又过于昂贵,不是一个普通的程序员可以决定买不买的。但是如果我们把一个查询拆分,就可以自己实现多线程查询,可以充份发挥服务器的性能,速度提高达8倍以上,这也是我这次所做的最成功的优化。

     2. 分批查询:如果一个查询的结果太大,Infobright会把它先保存到cache中,再一起返回,多了cache的读写,自然会比内存慢很多,如果把查询拆开,多次返回,可以保证所有的操作都在内存中,速度提升明显。

0
2
分享到:
评论

相关推荐

    infobright-社区版.zip

    它还提供了丰富的性能优化选项,比如分区、物化视图和并行处理,以满足不同场景的需求。 "IB"(Infobright)是该软件的缩写,通常用于标识与Infobright相关的讨论、文档或资源。社区版虽然免费,但可能缺少一些企业...

    infobright

    infobright-4.0.7,32位系统,32位。

    mysql.rar_infobright

    3. **优化的查询引擎**:Infobright的查询引擎针对分析查询进行了优化,能够快速处理复杂的SQL查询,尤其是在数据仓库场景下。 4. **无索引设计**:Infobright在设计上不依赖于传统的B树索引,而是依赖于数据本身的...

    infobright最新安装包.zip

    此外,Infobright采用列式存储,针对分析查询优化,对于读取大量数据的SQL查询有显著优势。系统还支持分布式计算,通过并行处理提高数据处理速度。 Infobright-4.0.7是该软件的一个版本,提供了增强的性能和稳定性...

    infobright珍贵资料(官方)

    Infobright是一款高效的数据仓库解决方案,它以列式存储为主,特别适合大...这份“infobright珍贵资料(官方)”集合了官方文档,将帮助你深入理解Infobright的功能和最佳实践,是学习和研究Infobright不可多得的资源。

    Infobright原理

    Infobright是一款高性能的列式数据库系统,尤其适合大数据分析场景。其核心优势在于其独特的数据存储和查询优化机制,这使得它在处理大规模数据分析时能展现出极高的性能。 Infobright的架构基于MySQL,但采用了...

    infobright4.0.7-win.zip

    Infobright的核心技术之一是其列式存储模式,与传统的行式存储不同,列式存储优化了数据分析,因为大多数数据分析任务都涉及到对特定列的操作。这种架构使得读取和处理大量数据时的性能显著提升。此外,Infobright还...

    Ubuntu安装Infobright及主从同步

    **Ubuntu安装Infobright及主从同步** Infobright是一款开源的企业级数据仓库系统,以其高效...通过文档《infobright双机热备.doc》可以获取更详细的指导和最佳实践,以确保你的Infobright数据库系统稳定、高效地运行。

    infobright for windows 64 数据仓库

    标题中的"infobright for windows 64 数据仓库"指的是适用于64位Windows系统的Infobright数据仓库软件,该版本特别优化了在Windows环境下的运行效率。 描述中的"infobright for windows 64 数据仓库 快速安装包...

    infobright-4.0.7-0-x86_64-ice.rpm

    其次,系统资源,尤其是内存,应该足够应对预期的负载,因为Infobright在运行时需要大量内存来优化查询性能。此外,你需要规划好数据存储和备份策略,确保数据安全和高可用性。 Infobright提供了SQL接口,使得用户...

    infobright包

    大数据量存储主要依赖自己提供的高速数据加载工具(百G/小时)和高数据压缩比(>10:1),高效查询主要依赖特殊设计的存储结构对查询的优化,但这里优化的效果还取决于数据库结构和查询语句的设计。 2. 高数据压缩比...

    infobright.7z

    3. **查询优化**:利用Infobright的列式存储和查询优化器,可以编写高效的SQL查询。理解JOIN操作、索引使用以及预计算视图等概念有助于提升查询性能。 4. **安全性**:Infobright提供了用户权限管理、角色定义以及...

    infobright for windows 32 数据仓库

    7. **社区支持**:Infobright有一个活跃的开发者和用户社区,提供各种资源、文档和论坛讨论,帮助用户解决问题和分享最佳实践。 8. **安全性**:尽管没有在标题和描述中提及,但作为一款企业级产品,Infobright通常...

    infobright-4.0.7-0-src-ice.tar.gz

    Infobright的核心优势在于其优化的查询处理和压缩算法,使得在处理大量数据时,能够显著降低存储需求并提升查询效率。 标题"infobright-4.0.7-0-src-ice.tar.gz"指的是Infobright数据库的4.0.7版本的源代码压缩包,...

    infobright-rpm.zip

    在4.0.7这个版本中,可能包含了性能优化、bug修复以及对硬件和操作系统平台的支持。 安装Infobright RPM软件包的步骤通常包括以下几步: 1. 首先,你需要解压“infobright-rpm.zip”文件,这可以通过常见的压缩...

    infobright-4.0.7-0-x86_64-ice.zip

    infobright-4.0.7-0-x86_64-ice.rpm infobright社区版,本来就是开源的东西,还要资源分,没办法了,只能选最低2分, csdn禁止重复上传,于是采用了压缩包加密上传,zip解压,密码是2CcMBzP8,云盘分享:htt去ps://...

    安装infobright

    总的来说,Infobright的安装是一个相对直接的过程,但正确配置和优化以满足特定业务需求则需要对系统和数据库管理有一定的了解。安装完成后,你可以利用其强大的列式存储能力,快速处理大规模的数据分析任务。

    infobright.rar

    Infobright是一款高效的数据仓库解决方案,它以列式存储的方式优化了大数据分析性能。这款软件在MySQL和MariaDB家族中占据一席之地,为大规模数据分析提供了强大的支持。Infobright的核心在于其高度优化的列式存储...

Global site tag (gtag.js) - Google Analytics