infobright学习笔记
2015-12-17 19:53
274 查看
介绍
官网https://www.infobright.com/Infobright是一个基于独特的专利知识网格技术的列式数据库,能够降低您90%的管理工作量。在一台PC服务器上,Infobright企业版在对50TB甚至更多数据量进行多并发复杂查询时,能够显示出令人惊叹的速度,相比于MySQL,其查询速度提升了数倍甚至数十倍。在同类产品中,Infobright的单机性能处于领先地位
分为ICE(社区)版本和IEE(企业)版本
适合场景
我的理解是:infobright的单机性能显著,压缩比高。适合中型数据(GB级别的查询应该是无敌的)复杂,低并发,快速的查询
ICE版本不支持DML操作,就算是支持,也不建议,因为是列式存储,事物做的不好
使用难度
可以把数据库粗略的划分成存储层和逻辑层,infobright的存储层是列式存储,逻辑层和mysql的成逻辑层一样,可以理解成一个列士存储的mysql所以,我们使用infobright和使用mysql是一样的,包括所有DDL,命令行,连接工具,支持的语言。
使用基本无难度
优势
20:1到40:1的高压缩比快速一致的查询性能,即使当数据量急剧增加
存储百万兆字节和长期分析所需的历史数据
加载速度在每小时百万兆字节,提供实时查询处理或报警
平台
Windows和linux都测试通过
ICE和IEE版本区别
相同
Column-orienteddatabase,idealforanalytics都是列式存储,主要用于分析
KnowledgeGridandInfobrightOptimizer
知识网格和Infobright优化器,指的是对sql的优化,适合列式查询
DomainExperttechnology
指的是某个技术吧
Industryleadingcompression(10:1onaverage)
行业领先的压缩(10:1平均)
Scalableto50TB(rawdata),30+concurrentqueries(withappropriatehardware)
50TB的存储,30+的并发(根据硬件而定)
SupportsIntelandAMDhardware
支持英特尔和AMD的硬件
不同
SuperiorqueryperformanceIEE比ICE快50-500%
Multi-corequeryexecution
ICE版本一次查询支持单核,加载也是支持单核,IEE版本近可能利用硬件,我用top命令看了下,我的cpu利用率一直是3%
ConcurrentQueryWhileLOAD/DML
IEE支持表级别并发DML,数据加载和LOAD数据,同时发生,ICE不支持
也就是说ICE版本,当数据库加载数据的时候,查询是需要等待的、
也就是说当加载这张表的时候,你的sql如果用到这个表,就必须等
DMLsupport(INSERT,UPDATE,DELETE)
IEE版本支持DML操作,ICE不支持
Sourcecodedownloadable
ICE开放源码
IEE不开源码
HighavailabilitysupportandReplication
IEE版支持主从复制和数据备份,ICE不支持
DistributedLoadProcessorwithHadoopconnectorsupported
IEE支持分布式处理器负载,提供Hadoop的连接器,使用更简单的方法来提取数据。
以很高的速度加载HDFS的数据到Hadoop中。
InfobrightLoadersupported
IEE可以并行,多线程以300GB每小时的速度加载数据
同时支持ASCII和二进制文件加载。
IEE最新的4.0版本,DLP支持没小时2TB的加载数据
ICE只支持一次装载,一个线程以300GB每小时的速度加载数据。多个装载是可以同时进行的。只支持ASCII
NativeMySQLloadersupported
IEE用户还可以使用本地MySQL装载机选项,提供额外的灵活性的,用于加载嵌入式函数、转换和模拟自动增量的表
ALTERTABLE/RENAMETABLEsupport
IEE支持修改表表结构和重名吧表
Temptablesupport
IEE支持这种语句
CREATETABLEREPAYMENT_STATISTICS_1SELECT*fromREPAYMENT_STATISTICS;
ICE不支持
Productsupport,warrantyandindemnification
IEE产品支持,保修和赔偿
License
不同的License
OSSupport
IEE支持LinuxandSolaris64bit,Windows32/64bit
IEC支持Linux32/64bit,Windows32/64bit
Mysql和infobright并存
最后不要装在一起,我的测试结果是安装infobright后,使用yum安装mysql成功,但直接用rpm装是失败的安装
ICE给的安装策略太简单了,建议结合IEE看ICE最好不要安装mysql
1rpm-iinfobright-4.0.7-0-x86_64-ice.rpm--prefix/usr/local
2/usr/local/infobright/postconfig.sh配置,如果让注册就选择N,不报错就好了
这步一定要做,要不然/etc/my-ib.cnf都找不到
3修改my-ib.cnf配置文件
把/usr/local/infobright/data下的东西,全部靠到指定的数据目录
4修改data目录下的brighthouse.ini
5/etc/init.d/mysqld-ibstart启动
6/etc/init.d/mysqld-ibstop停止
7mysql-ib-uroot进入
8rpm-einfobright卸载
9千万别忘了把所有操作的目录都改成777,因为infobright是用mysql用户的
IEE版本安装
我用root账号操作
1rpm-iinfobright-iee_mysql-4.8.1-rhel_centos_6_64.rpm--prefix/usr/local
2修改vi/etc/my-ib.cnf
cp-r/usr/local/infobright/data/*/data00/infobright/data/拷贝全部data的下的数据进入新目录
然后把rm-rf/data00/infobright/data/iee-mysql.err让程序重新生成这个文件,要不然记录不了日志
3mvinfobright.cnf.sampleinfobright.cnf所有参数都在这里改了,4.8以后就不用brighthouse.ini了
然后修改这个配置文件里的ServerMainHeapSize参数
4把infobright\license.lic靠到datadir目录下并且mvinfobright\license.licinfobright.lic
5chown-Rmysql:mysql/data00/infobright/
6chown-Rmysql:mysql/usr/local/infobright;chown-Rmysql:mysql/usr/local/infobright-4.8.1-x86_64/
5/etc/init.d/mysqld-ibstart把权限都给mysql因为使用mysql账号在操作的,所以要赋值
/usr/local/infobright/postconfig.sh这是个操作infobright的工具
升级
没试过创建用户
DeleteFROMuserWhereUser='fengxian'andHost='localhost';DeleteFROMuserWhereUser='fengxian'andHost='%';
CREATEUSER'fengxian'@'localhost'IDENTIFIEDBY'fengxian123';
GRANTALLON*.*TO'fengxian'@'localhost';
grantallprivilegeson*.*tofengxian@'%'identifiedby'fengxian123'
flushprivileges;
revokeallon*.*fromfengxian@'%';
revokeallon*.*fromfengxian@localhost;
flushprivileges;
GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'root'WITHGRANTOPTION;
密码
默认root密码是空可以自己修改下:
/usr/local/infobright/bin/mysqladmin-urootpassword'root'
远程连接
和修改mysql是一样的grantallprivilegeson*.*toroot@'%'identifiedby'root'
flushprivileges;
端口默认是5029
数据类型
基本上能想到的都支持NumericTypesMinValueMaxValue
TINYINT-127127
BOOL,BOOLEAN-127127
SMALLINT-3276732767
MEDIUMINT-83886088388607
INT-21474836472147483647
BIGINT-92233720368547758069223372036854775806
FLOAT-3.402823466E+383.402823466E+38
DOUBLE(DOUBLEPRECISION)-1.7976931348623157E+3081.7976931348623157E+308
DEC(M,D)-(1.0E+M-1)/(1.0E+D)(1.0E+M-1)/(1.0E+D)
WHERE0<M[code]AND0<=D<=M
DateandTimeTypesMinValueMaxValueFormat
DATE100-01-019999-12-31YYYY-mm-dd
DATETIME100-01-0100:00:009999-12-3123:59:59YYYY-mm-ddHH:MM:SS
TIMESTAMP1970-01-0100:00:002038-01-0100:59:59YYYY-mm-ddHH:MM:SS
TIME-838:59:59838:59:59HHH:MM:SS
YEAR(4-digitformatonly)19012155YYYY
StringTypesMaxValue
CHAR(N)255
VARCHAR(N)65532
BINARY(N)255
VARBINARY(N)65532
TINYTEXT255
TEXT(N)65535
数据类型的效率
最高效,更好的压缩TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
DECIMAL—note:storingas(10,0)willbemuchfasterthan(10,5)
DATE,TIME
一般
CHAR,VARCHAR
尽量替换
最低效
BINARY,VARBINARY
FLOAT
DOUBLE
TINYTEXT,TEXT
创建表和语法和DDL
官方是这么说的,就是和mysql的DDL是一样的,包括创建表等语句ICEsupportsstandardMySQLDDL,butifyourschemawasforOracleorSQLServer,therearepossiblysyntaxordatatypeswhicharenotsupported.Formoreinformation,see:
创建表语句举例
CREATETABLE`ACTUAL_REPAYMENT`(
`ACTUAL_REPAYMENT_ID`int(11)DEFAULTNULL,
`PAY_ID`int(11)DEFAULTNULL,
`STA_ID`int(11)DEFAULTNULL,
`REPAYMENT_AMT`varchar(100)DEFAULTNULL,
`REPAYMENT_INTEREST`varchar(100)DEFAULTNULL,
`REPAYMENT_PENALTY`varchar(100)DEFAULTNULL,
`REPAYMENT_PRINCIPAL`varchar(100)DEFAULTNULL,
`REPAYMENT_BREACH`varchar(100)DEFAULTNULL,
`REPAYMENT_MANAGE`varchar(100)DEFAULTNULL,
`DEPOSIT_DONE_PAY`varchar(100)DEFAULTNULL,
`PAY_DATE`varchar(100)DEFAULTNULL,
`GUARANTEE_BASE_PAY`varchar(100)DEFAULTNULL,
`PLATFORM_ADVANCE_PAY`varchar(100)DEFAULTNULL
)ENGINE=BRIGHTHOUSEDEFAULTCHARSET=utf8;
注意:
不执行任何参照完整性检查,也不支持默认值。Infobright优化器会接受这些条款,而这些条款,在表的定义被忽略。
ENGINE=BRIGHTHOUSE这个是mysql
中没有的,但是就算你学的是mysql中的其他ENGINE也会给你自动转化成这个,也就是说,你可以把mysql中的建表语句直接拿过来是没问题的,他帮你优化
加载数据
只支持文件加载语法
LOADDATAINFILE'/full_path/file_name'INTOTABLEtable_name
[FIELDS
[TERMINATEDBY'char']
[ENCLOSEDBY'char']
[ESCAPED'char']
];
TERMINATEDBY自动分割符支持多字符默认是“,”
--escaped-by,
enclosed字段包围符,默认没有包围符
escaped转义字符,默认没有转义字符
在Infobright中,enclosed和escaped要成对使用
loaddatainfile'/tmp/loadData/test'intotabletestFIELDSTERMINATEDBY','
enclosed举例
数据是'TheTimeTraveler'sWife'
loaddatainfile'/tmp/loadData/test'intotabletestFIELDSTERMINATEDBY',''\'';
结果是TheTimeTraveler'sWife干掉了行首和行尾的单引号
Escaped举例
数据是'TheTimeTraveler'/sWife'
loaddatainfile'/tmp/loadData/test'intotabletestFIELDSTERMINATEDBY','ESCAPEDBY'\\';
结果是TheTimeTraveler'sWife
也就是起到的作用是把单引号转义了
其实这两个参数在绝大多数数据库中都有,用于导入导出配合
导出的时候字段前后加上特殊字符,导入的时候去掉特殊字符,放在回车等出现
SetAUTOCOMMIT=1;自动提交数据
SetAUTOCOMMIT=0;手动提交再来一下COMMIT;
忽略数据
默认是导入数据的时候,如果有一条错了,就挂了,就都导入不了了我们可以设置可以忽略多少条数,超过一个定值再报错
按记录条数来
/**whenthenumberofrowsrejectedreaches10,abortprocess**/
set@BH_REJECT_FILE_PATH='/tmp/reject_file';
set@BH_ABORT_ON_COUNT=10;
loaddatainfileDATAFILE.csvintotableT;
按记录百分比来
/**if3%ofthenumberofrowserror,thenabortthecommitprocess**/
set@BH_REJECT_FILE_PATH='/tmp/reject_file';
set@BH_ABORT_ON_THRESHOLD=0.03;
loaddatainfileDATAFILE.csvintotableT;
关闭这个功能,默认就是关闭
/**Disabletherejectfilefeature**/
set@BH_REJECT_FILE_PATH=NULL;
set@BH_ABORT_ON_COUNT=NULL;
Lookups
其实就是把CHAR或VARCHAR内部用一个压缩比超过10:1的证书型去替换,生成索引,这样就查询就更快了适合
查找替换CHAR或VARCHAR值与总数与唯一值超过10:1就适合用
如果你一列100000个值,只有10000个是唯一的,那么是
CommentLookup比较适合年龄,性别,省份这一类型的字段
用法:再列上直接加comment'lookup'
优化查询
1使用高效的字段类型2使用优化过的函数和sql
SupportedSQLviatheInfobrightOptimizer
SelectStatements
SELECT[ALL|DISTINCT|DISTINCTROW]
SELECTexpr,
ASalias_name
FROMtablereference
WHEREwherecondition
GROUPBY{col_name|expr|position}
HAVINGwhere_condition
ORDERBY{col_name|expr|position}ASC|DESC
ORDERBYNULL
LIMIT{[offset,]row_count|row_countOFFSEToffset}
INTOOUTFILEfile_nameexport_options
JOINSYNTAX–allsupported
UNIONSYNTAX–allsupported(exceptRowSubqueries)
ControlFlowFunctions
CASE
IF
IFNULL
NULLIF
StringFunctions
ASCII
BIN
BIT_LENGTH
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT_WS
CONCAT
ELT
EXPORT_SET
FIELD
FIND_IN_SET
FORMAT
HEX
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MAKE_SET
MID
NOTREGEXP
OCTET_LENGTH
ORD
POSITION
QUOTE
REGEXP
REPEAT
REPLACE
REVERSE
RIGHT
RLIKE
RPAD
RTRIM
SOUNDEX
SPACE
STRCMP
SUBSTR
SUBSTRING_INDEX
SUBSTRING
TRIM
UCASE
UPPER
GroupByAggregateFunctions
AVG
COUNT
MIN
MAX
SUM
STDDEV
STDDEV_SAMP
STDDEV_POP
VARRIANCE
VAR_SAMP
VAR_POP
ArithmeticOperators
addition+
subtraction-
multiplication*
division/
modulo%
ComparisonFunctionsandOperators
equal=
notequal<>,!=
lessthanorequal<=
lessthan<
greaterthanorequal>=
greaterthan>
ISNULL
ISNOTNULL
BETWEEN...AND(exceptinjoinconditions)
NOTBETWEEN...AND
IN
NOTIN
LogicalOperators
NOT,!(exceptinjoinconditions)
AND,&&
OR,||
MathematicalFunctions
ABS
ACOS
ASIN
ATAN2,ATAN
ATAN
CEIL
CEILING
CONV
COS
COT
DEGREES
EXP
FLOOR
LN
LOG10
LOG2
LOG
MOD
OCT
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
TAN
TRUNCATE
DateandTimeFunctions
ADDDATE+
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE_ADD
DATE_FORMAT
DATE_SUB
DATE
DATEDIFF
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_UNIXTIME
HOUR
LOCALTIME
LOCALTIMESTAMP
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SUBDATE
SUBTIME
SYSDATE
TIME_FORMAT
TIME
TO_DAYS
UNIX_TIMESTAMP
WEEK
YEARWEEK
CastFunctionsandOperators
CAST
CONVERT
DataManipulationStatements
LOADDATAINFILE
SELECT(seedetailedlist)
DataDefinitionStatements
CREATEDATABASE
CREATETABLE
DROPDATABASE
DROPTABLE
3尽量不适用or,可以采用in或者union取而代之
4UNION比UNIONALL慢
5因为是列式存在,所以尽量只取必须的字段
6LimitingTablesUsedinResults
这个没看懂,有空一起看下
备份和恢复
备份,重点是data和KNFolder目录,我没试过内存调优
修改/usr/local/infobright/data/brighthouse.ini在配置文件里有建议例子,如下System | ServerMain | ServerCompressed | LoaderMain |
Memory | HeapSize | HeapSize | HeapSize |
—————- | ———————- | ——————————— | ——————— |
8GB | 4000 | 500 | 800 |
4GB | 1600 | 375 | 560 |
2GB | 600 | 256 | 320 |
ServerCompressedHeapSize压缩内存
LoderMainHeapSize加载内存
测试出的建议
1不支持主键2创建表的时候,尽量标准,不用想hive中一样都是String,按照传统数据库设置
3关联的键尽量不要varchar关联
测试结果
语句 | 表数据 | mysql | infobright |
select*fromtest.`name`t1INNERJOINtest.aget2ont1.u_id=t2.u_id | 6千万join1 | 8s | 0.8s |
select*fromtest.`name`t1INNERJOINtest.bookt2ont1.u_id=t2.u_id | 6千万join2 | 12s | 1.7s |
select*fromtest.`name`t1INNERJOINtest.phonet2ont1.u_id=t2.u_id | 6千万join100 | >5分钟 | 8s |
语句 | 表数据 | oracle | infobright |
SELECTRS.CONTRACT_ID ,BBI.S_CUSTTOMER_NAME ,str_to_date(AR.PAY_DATE,'YYYY-MM-DD') ,AR.PAY_ID ,ARD.PERIOD ,ARD.REPAYMENT_AMT ,ARD.REPAYMENT_PRINCIPAL ,ARD.REPAYMENT_INTEREST ,ARD.REPAYMENT_PENALTY ,ARD.REPAYMENT_MANAGE FROMACTUAL_REPAYMENT_DETAILARD LEFTJOINACTUAL_REPAYMENTARONAR.ACTUAL_REPAYMENT_ID=ARD.ACTUAL_REPAYMENT_ID LEFTJOINREPAYMENT_STATISTICSRSONRS.STA_ID=AR.STA_ID LEFTJOINB_APPLY_INFOBAIONBAI.I_APPLY_ID=RS.APPLY_ID LEFTJOINB_BASIC_INFOBBIONBBI.I_BORROW_ID=BAI.I_BORROW_ID WHEREARD.REPAYMENT_DETAIL_IDIN( SELECTDISTINCTARD.REPAYMENT_DETAIL_ID FROMACTUAL_REPAYMENT_DETAIL_ALLOTARDA LEFTJOINACTUAL_REPAYMENT_DETAILARDONARD.REPAYMENT_DETAIL_ID=ARDA.REPAYMENT_DETAIL_ID LEFTJOINACTUAL_REPAYMENTARONAR.ACTUAL_REPAYMENT_ID=ARD.ACTUAL_REPAYMENT_ID WHEREARDA.LENDER_USER_ID=3 ) ORDERBYRS.CONTRACT_ID,ARD.PERIOD; | 609742 642132 18439478 601895 2141894 114709 | 212s | 12s |
KnowledgeGridStatistics
基本就是infobright的核心架构了查询优化方式,我没看太懂相关文章推荐
- iOS分类的那些坑
- hql的几种写法
- Android Bitmap OutOfMemory 解决的方法
- 数组指针和指针数组的区别(转)
- 拓扑序列 之 hdu 5154 Harry and Magical Computer
- js关键字方法名
- date 时间的比较
- 容器重点总结一三六九JAVA142
- vim实用技巧
- cl_nif.c:40:19: 致命错误:CL/cl.h:没有那个文件或目录
- 118 Pascal's Triangle
- 设计模式之代理模式
- VS中的 MD/MT设置
- Select specified items from Tuple List
- Merge Two Sorted Lists
- Linux命令:文件目录管理
- Redhat7 搭建ntp(时间同步)
- React Native Android 使用友盟SDK功能
- Ubuntu网页无法播放视频
- 老程序员的忠告:不要做浮躁的软件工程师