文档章节

Infobright Tips

cwalet
 cwalet
发布于 2015/05/15 15:15
字数 1507
阅读 158
收藏 0
点赞 0
评论 0

说明

  • 下文对infobright统称IB,brighthouse引擎的表统称IB表,IB Loader指代 Infobright Loader
  • ICE指 IB社区版,IEE指 IB商业版,有钱任性,没钱心塞
  • 本文主要记录 IB使用问题,与前篇 MySQL Tips 2.0不直接相关
  • IB User Guide 及 wikis 中有更多干货。


(1).不要使用SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS * FROM ib_table;
SELECT FOUND_ROWS();

以上结果返回的行数不准确,始终为1或284,但是MY_ISAM及其他引擎可以使用,

原因是对于IB表的查询,IB优化器暂不支持该关键字实现计数。

参考:https://support.infobright.com/forums/showthread.php?6323-SQL_CALC_FOUND_ROWS


(2).查询中不能使用变量

SELECT * FROM ib_table a,(SELECT @i:=1) b


(3).不能使用包含子查询的HAVING子句

SELECT * FROM (SELECT * FROM ib_table) x HAVING COUNT(1)>0


(4).不能使用HAVING COUNT(DISTINCT 多个字段)

SELECT * FROM ib_table HAVING COUNT(DISTINCT a,b)>0
当然,该写法本身可能意义不大。


(5).IB查询优化器不支持的语法

以上类型的语句执行后都会报错:

[Err] 5 - The query includes syntax that is not supported by the Infobright Optimizer. Either restructure the query with supported syntax, or enable the MySQL Query Path in the brighthouse.ini file to execute the query with reduced performance.

解决方法是将infobright的默认查询解析方式更改为MySQL:

SHOW VARIABLES LIKE '%allowmysqlquerypath%';
SET GLOBAL brighthouse_ini_allowmysqlquerypath = 1;

注意了,上面的赋值会出错:

ERROR 1238 (HY000): Variable 'brighthouse_ini_allowmysqlquerypath' is a read only variable

因为该变量是只读变量,必须修改配置文件,但是在my-ib.inimy-ib.cnf中加入下面这行均无效:

brighthouse_ini_allowmysqlquerypath = 1
原因是brighthouse_ini开头的系统变量都必须在 brighthouse.ini(通常位于data目录)中设置:
AllowMySQLQueryPath = 1
重启服务后生效:
SHOW VARIABLES LIKE 'brighthouse_ini%';


(6).ICE不能实现主从复制

原因一是不支持INSERT,二是LOAD DATA使用的不是MySQL Loader,无法生成binlog,错误提示如下:

Binary logging not possible. Message: Statement cannot be logged to the binary log in row-based nor statement-based format

在IEE中可做如下设置(参考:Using the Infobright Loader):

SET @bh_dataformat = 'mysql';

替代方法有NFS实时同步、SCP结合CRON定时全量备份、RSYNC定时增量同步等等。

注意如果使用NFS,配置文件必须分开指定,并且同时启动两个IB很有可能会出现混乱。


(7).SELECT .. INTO OUTFILE 导出时报错:

Brighthouse specific error: Unable to open file or named pipe.

原因是该目录没权限:

chmod 777 dir && chgrp mysql dir


(8).使用lookup

IB内建知识网格索引,因此不需要也不能显式建立字段索引,

但是它提供了一种对于数据重复率比较高的CHAR型字段的优化方式,即lookup。

给字段添加注释为lookup即可:COMMENT 'lookup'

该选项仅在LOAD DATA时生效并自动生成,对于IEE来说,ALTER COLUMN不能添加或者删除lookup。

参考:how-and-when-to-use-lookups


(9).IB 与MySQL 在Load data 时的默认分隔符的区别

如果查询中包含IB表,则使用的是IB导出规则,否则为MySQL规则。

规则分别如下:

CLAUSE
infobright
MySQL
FIELDS TERMINATED BY
';'
'\t'
FIELDS ENCLOSED BY
'"'
''
FIELDS ESCAPED BY
''
'\\'

注意IB中默认字段包围符是双引号,而MySQL中为空字符,

但在IB中对应的是NULL而非空字符,即“ENCLOSED BY "NULL"”;

此外IB中 ENCLOSED BY ESCAPED BY子句一定要同时存在(为了防止导入包含特殊字符的数据出错)

且不为相同字符,否则会报错:ERROR 5 (HY000): An unknown system exception error caught.

在实际使用中发现,ICE版本会自动区分表引擎:

比如使用SELECT .. INTO OUTFILE(不加任何限定符)导出一个MyISAM表数据,导出的文本字段分隔符规则是按MySQL的,

然后使用load data导入到IB表中(同样不加任何FIELDS子句),此时的分隔符规则变为IB Loader的,因此导入出错。

最好的做法是明确指定所有分隔符,即使与默认值相同也要写出。

参考:Infobright_Data_Loading_GuideInfobright数据导入转义TIP


(10).IB Loader数据类型

很遗憾ICE仅支持 IB Loader的txt_variable模式,也即纯文本格式;

IEE额外支持二进制binary模式和标准MySQL Loader,这也是实现写binlog的关键。

在ICE中做如下设置是不可行的:

SET @bh_dataformat = 'mysql';
SET @bh_dataformat = 'binary';

设置的时候不会出错,但是执行load data或者select .. into outfile语句的时候会报错:

ERROR 1149 (42000): Brighthouse specific error: Unknown value of BH_DATAFORMAT parameter


(11).IB查询导出数据不完整

使用中发现,做数据统计时需要将查询IB表的结果导到新的IB表,但在并发较多时,

(线程数20左右,单个查询平均耗时20s,平均查询量在1亿,平均结果量10W)

会小概率出现EXPORT出的文本损坏,如部分行不完整,字段字符断裂,或者行丢失等问题,

目前使用的是最新版本 IB_4.0.7_r16961_17249(ice),暂不知道什么原因。

解决办法是重新执行查询生成文本。


(12).并发Load data时出现大量system lock

SELECT ID,USER,HOST,DB,COMMAND,TIME,STATE,SUBSTR(INFO,1,60) FROM information_schema.processlist;
执行上述查询发现大量load data线程都停止,STATE状态为:system lock
IB has only table-level locks. When doing any write operation to a table an exlusive lock is set on it and any other queries needing this table must wait until the writing transaction commits. And vice versa - if a table is used for reading, loading must wait.

IB只有表级别锁,可以理解并发写入时会锁表,这点与MyISAM有点类似;

另一方面IB目前使用的MySQL是5.1.40,processlist显示的准确性和详细度不如5.5以上版本。

此外,由于ICE对线程数有一定限制,并且单个查询或者loader线程使用的内存也有限制,

具体设置见brighthouse.ini:ServerMainHeapSizeLoaderMainHeapSize

因此尽量减少单表的并发操作,合理采用『分表、分库、分实例』来解决。

参考:关于数据库 System lock 状态的说明和处理方式


(13).to be continued.

© 著作权归作者所有

共有 人打赏支持
cwalet
粉丝 43
博文 91
码字总数 85861
作品 0
其他
infobright简介

infobright,一个基于mysql的数据仓库系统实现,它已经是很多开源或商用BI系统的底层存储引擎。 根据这几天看到的介绍与白皮书,又做了些试验,依据自己的理解先作一个概述性的介绍,下次再描...

小编辑 ⋅ 2010/02/03 ⋅ 3

基于Infobright的MySQL数据仓库方案测试

数据仓库之父Bill Inmon在1991年出版的“Building the Data Warehouse”一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integ...

小编辑 ⋅ 2010/02/03 ⋅ 1

[心得] 近期更新&关于Infobright

新的环境,新的机会,喜欢自由的我现在感觉不错,终于可以自在的记录我想记录的东西了,哈哈~关于GoogleApp的企业套件我也给自己弄了一套,感觉挺不错,和Outlook可以直接整合起来,不过只能...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Infobright使用

Infobright是基于专利技术的列式数据库,一个基于MySQL开发的开源数据仓库(Data Warehouse)软件,可作为MySQL的一个存储引擎来使用,SELECT查询与普通MySQL无区别。 一、几大优点: 1、高压...

ksfzhaohui ⋅ 2014/07/11 ⋅ 0

MySQL Infobright 数据仓库快速安装笔记

[文章作者:张宴 本文版本:v1.1 最后修改:2010.05.18 转载请注明原文链接:http://blog.s135.com/infobright/] Infobright是一个与MySQL集成的开源数据仓库(Data Warehouse)软件,可作为...

红薯 ⋅ 2010/06/08 ⋅ 3

infobright实战

之前的简介与架构分析之后,我做了一些实践,验证 infobright用于大量数据存储与查询的可行性。 我是从这里下载的infobright开源版本ICE3.1(据说刚出的ICE3.2查询速度更快)。用DEB包在ubu...

小编辑 ⋅ 2010/02/03 ⋅ 0

MySQL开源引擎infobright数据仓库解决方案

infobright是开源的MySQL数据仓库解决方案,它基于在MySQL上二次开发,infobright主要实现的就是一个存储引擎,但因为它自身存储逻辑跟关系型数据库根本不同,所以,它不能像InnoDB那样直接作...

往事_Jim_遗 ⋅ 2017/10/22 ⋅ 0

MySQL · 引擎特性 · Infobright 列存数据库

简介 系统架构 查询优化 存储结构 数据压缩 总结 简介 Infobright 是一个面向 OLAP 场景的开源列存数据库。比较容易找到代码的版本是 Infobright Community Edition 4.0.7,大概是 2006 年前...

阿里云RDS-数据库内核组 ⋅ 2016/12/02 ⋅ 0

infobright: 系统结构

这里深入介绍其结构及工作原理。下图是infobright白皮书中展示的系统架构,灰色部分是mysql原有的模块,白色与蓝色部分则是 infobright自身的。下面说说它的几个主要概念及其相互协作原理。 ...

小编辑 ⋅ 2010/02/03 ⋅ 0

Infobright数据仓库应用心得

近期,在给一家手机应用软件公司搞一个数据分析平台,使用到了Infobright的MySQL(以下简称ice,Infobright的社区 3.12版本),有些心得,整理出来共享。 之前我没怎么接触过MySQL,只知道关...

小编辑 ⋅ 2010/02/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部