主流列式数据库评测:InfiniDB

摘要:
Data1目录用于存储InfiniDB存储引擎的数据文件。在Windows任务管理器中,您可以观察到InfiniDB启动了8个后台进程。图3 InfiniDB Enterprise Edition和Community Edition之间的具体差异。InfiniDBInI的事务处理实现类似于Oracle,但默认情况下会自动提交。您可以设置为不自动提交事务,默认情况下是在会话级别。InfiniDB支持中文,但需要进行一些设置。InfiniDB和原始MySQL的SQL解释和执行引擎不同。因此,不支持包含InfiniDB的表与其他数据引擎的表的关联操作,但其他原始MySQL数据引擎支持从InfiniDB表中查询数据并保存结果。
)。本文测试的InfiniDB版本是2010年12月20日发布的2.02版,下载文件名分别为InfiniDB64-2.0.2-2.exe 和InfiniDB64-ent-2.0.2-2.exe。安装文件大约在30兆字节。32位最新版只提供了InfiniDB社区版,企业版只有64位,包括Windows和Linux平台。

  64位InfiniDB在Windows 2008 x64上安装总是失败,但文档说是支持的,经技术人员确认,该安装文件只支持在windows 2008 R2 上安装。网站也提供了一些使用手册文档下载和论坛(社区)的支持,这为用户试用带来了方便。相比Infobright,InfiniDB的文档和论坛的技术支持水平都差不多,都是能比较快地解答用户使用的问题。

  安装界面全是图形交互式的,很简单,一路Next就安装完成了。但最后一步要耗费一定的时间初始化系统表。

  安装完成以后,在开始/所有程序下新增了一个InfiniDB的菜单项,有服务器启动、关闭的快捷方式,数据库后台服务默认是自动开启的。与Infobright类似,它的安装不包括图形化管理工具,只提供了命令行界面的客户端和其他工具,但有所差别的是,InfiniDB对MySQL作了更大范围的改动,主要体现在下面几方面。

  1.执行的后台进程更多。

  2.文件存储方式更类似DB2和PostgreSQL,采取多目录、多数据文件的方式,目录和文件命名对用户不可辨别,而且在数据库和表删除以后,数据文件并不收缩,而是供新增的其他表和数据利用。

  按惯例,先看一下数据库安装在磁盘上的文件和目录。

  D:Infobright 的目录

主流列式数据库评测之InfiniDB安装

  我们看到,比原始的mysql安装目录多了几个子目录,如bulk,data1,etc等。

主流列式数据库评测之InfiniDB安装

  bulk目录用于批量加载数据。

主流列式数据库评测之InfiniDB安装

  Data1目录用于存放infiniDB存储引擎的数据文件。

主流列式数据库评测之InfiniDB安装


  mysqldb目录用于存放mysql存储引擎的数据文件,相当于原来的data。

主流列式数据库评测之InfiniDB安装脚本

  etc目录用于存放系统表初始化脚本和错误提示信息。

主流列式数据库评测之InfiniDB安装脚本

  Bin目录用于存放可执行文件和动态链接库。

  如上图所示,安装程序在磁盘上创建了几个目录和一些文件。bin目录下面除了MySQL原始的可执行文件,还包括InfiniDB特有的系统文件和工具,其中3个批处理文件,分别用于InfiniDB后台服务的启动和关闭,客户端的启动。

  之所以需要初始化脚本,是由于InfiniDB是以插件的方式启动的,需要把这些信息写入系统表。首次启动时,安装程序会调用这些脚本。

主流列式数据库评测之InfiniDB安装脚本

主流列式数据库评测之InfiniDB安装脚本

  在Windows任务管理器中可以观察到InfiniDB启动了8个后台进程。

  我们也可以用控制台方式启动InfiniDB,这种方式可以更详细地观察服务器的启动过程,如果启动出错,可以根据出错信息的提示排除错误。


  我们观察到InfiniDB采用的MySQL版本是5.1.39.

  再来观察数据文件物理存储,在创建了一些表以后,data1目录下创建了子目录000.dir,下面还有很多类似的子目录。最外层子目录下有FILE000.cdf、FILE001.cdf等,可以看出,数据文件命名对用户是无法辨认的,这为数据备份带来了难度。而前文提到的infobright只要在数据库进程关闭时将某个数据库的目录备份即可。

主流列式数据库评测:InfiniDB第9张
图3

  InfiniDB企业版和社区版的具体区别。参见http://www.calpont.com/resources/community,可见社区版仍然支持DML操作,这点比infobright强,但付出的代价是不支持压缩,但即使是企业版压缩比infobright也差很多。我们对tpch scala=10的10GB数据导入以后,占用空间达8775933952字节,只压缩了13%,而同样的数据,infobright占用1951699241字节,压缩了81%。

  二、数据库的功能

  数据库的基本功能有CRUD(表的创建、插入、更新、删除)等方面,下面我们逐个测试。

  下面创建一个test数据库,然后在其中创建一个表t1,可以观察到默认的存储引擎仍然是MyISAM。

主流列式数据库评测:InfiniDB第10张

  这是一个需要注意的地方,如果要使用InfiniDB引擎,或者在创建表时显式说明,或者设置默认存储引擎为InfiniDB,建议用前一种。因为后一种使某些查询语句失效,影响查询执行。最简单的语法都报错。

主流列式数据库评测之之InfiniDB功能


  对于比较规律的测试数据,可以通过存储过程产生,语法规则和mysql的一致, InfiniDB引擎的DML速度比较慢,无论设置自动提交开关为关闭或开启,插入性能都很糟糕,但更新和删除的效率还可以,并且不支持truncate 表操作。

主流列式数据库评测:InfiniDB第12张

  InfiniDBInI的事务处理实现与Oracle的类似,但默认是自动提交的,可设置不自动提交事务,默认是在会话级的。设置不自动提交事务以后,本会话可以脏读,其他会话则只能查询到最后一次提交时的内容。如果多个会话对同一个表执行dml操作,后发出的命令被挂起,等候前一个会话提交或回滚才能执行。大部分和Oracle的表现一致,就不一一举例了。

  InfiniDB支持中文,不过需要做一些设置。

主流列式数据库评测:InfiniDB第13张


  InfiniDB和原始MySQL的SQL解释、执行引擎不同,因此,不支持包含InfiniDB的表和其他数据引擎的表的关联操作,但其他原始MySQL的数据引擎支持从InfiniDB表查询数据并保存结果。

主流列式数据库评测:InfiniDB第14张

  下一步是批量插入数据,企业版数据加载仍支持mysql的load data infile命令。但对InfiniDB存储引擎,在大数据量的时候,这种方式的效率太低,不适用。InfiniDB专门开发了二个工具配合,可以达到高速加载的效果,参见下一节测试的结果。

  InfiniDB专门为InfiniDB存储引擎的表添加了系统数据库calpontsys和2个系统表systable、syscolumn记录一些系统信息,可供用户参考。

  三、数据加载和查询性能

  为了提供用户在做数据库选型的参考,下面沿用TPC-H 2.8 scale为1的大约1G字节数据来进行较大数据量的测试,先进行数据加载测试,MySQL原始加载工具在InfiniDB表的性能表现是不可接受的。区区100000行耗时24秒,和Infobright不在一个水平。

主流列式数据库评测:InfiniDB第15张

  下面我们来看专用工具cpimport。

主流列式数据库评测:InfiniDB第16张


  这里有一个陷阱,Infinidb的默认存储引擎是myisam,该存储引擎不被cpimport支持,所以在调用cpimport时报如下错误:

主流列式数据库评测之查询性能 

  修改ddl语句,重新设置存储引擎,又出现新的问题,原来infinidb不支持约束,包括主键约束和非空约束。

主流列式数据库评测之查询性能

  取消约束后再次生成表,这下工具可以成功执行了。

主流列式数据库评测之查询性能


  前面花了较大篇幅描述InfiniDB,下面简略介绍一下MonetDB, MonetDB是一个内存数据库原型系统,目前仍然是一个学术机构的开源项目,差不多每6个月出一个Release,目前版本号为v5.22.1,但文档比较陈旧,只有2008年的,并不推荐在生产环境中使用。除了SQL版本,还有XQuery版本,我使用的是2010年10月发布的SQL版,下载地址为http://dev.monetdb.org/downloads/Windows/Oct2010-SP1/MonetDB5-SQL-Installer-x86_64-20101215.msi,安装包大约8.9M,是目前所测试的几种数据库管理系统中最小的,因为它是个独立的软件,不用包含对MySQL的支持。安装后同样生成启动服务器和客户端的快捷方式。双击即可运行。在客户端执行ddl脚本和导入数据都非常顺利。 

主流列式数据库评测之InfiniDB查询结果

  下面是查询测试结果。InfiniDB对多种SQL语句的语法支持不太好,原始tpch查询脚 本有6个无法运行,经联系InfiniDB技术人员,使用了他们提供的修改后版本运行成功。

主流列式数据库评测之InfiniDB查询结果
表1 TPC-H 2.8 scale=1的测试对比,单位:秒

  *表示原始SQL语法不被支持,修改SQL为等价的方式后的结果。

  单纯从上面的结果看,似乎MonetDB比InfiniDB绝大多数时候都具有更好的性能,但是对于更大的数据量以后,二者的表现还有待进一步研究。

  MonetDB只是一个单机版的软件,并不支持网络访问,这限制了它的应用。


  四、结束语

  测试进行到这里,相信读者对InfiniDB已经有了初步的印象,查询性能某些方面已经超越了传统的行存储数据库(22个查询中的7个)。但它对SQL写法也是最挑剔的,需要开发人员非常熟悉InfiniDB的语法。MonetDB在scala为1的时候表现优异,除了第21个查询异常慢外,22个查询中的18个都超越了Oracle。而且它对SQL语法的支持上佳,不加修改全部通过,支持with语句查询,支持索引,另外还支持主键和外键约束,这在列存储数据库中是难能可贵的。

  本系列文章选择了一种国产列存储数据库和三种国外列存储数据库。我们看到,列存储数据库在它声称所擅长的数据仓库应用中还不能取代传统行存储数据库。只有两者结合,各发挥所长才能提供给用户较好的效果。原因有下面几点:

  1.由于先天的列存储限制,缺乏对索引的支持(MonetDB除外),降低了进一步优化的可能。而行存储数据库如果加上合适的索引,上述耗时较长的查询还可以大大降低。

  2.支持的查询语法限制。所有的4种数据库都不支持分析函数,查询类型大打折扣。

  3.不支持DML操作或者虽然支持,但效率很低。不能存储查询的结果就很难用了。

  4.多数数据库不支持大量用户连接,不能满足多用户分析需要。

  5.大多数不包含图形界面管理工具,用户需要另外购置第三方工具。

  6.如果已有系统是基于传统数据库,如果要往列存储数据库迁移,SQL语法不兼容和不同写法的效率大相径庭使迁移难度很大。

  另一种商业列存储数据库Sybase IQ也在其文档中明确说明,其需要和传统的Sybase ASE配合使用,方能发挥出更大的作用。这也从另一侧面反映了列存储数据库在当今的处境,还没有达到大规模真正成熟应用的程度。

免责声明:文章转载自《主流列式数据库评测:InfiniDB》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCV学习(13) 细化算法(1)Redis系列九 Redis集群下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORACLE 11G 闪回技术(闪回数据库、表、回收站)

ORACLE 11G 闪回技术(闪回数据库、表、回收站) weixin_45389319分类专栏: 数据库 文章标签: 数据库版权闪回数据库就是将数据库回退到过去的一个时间点或scn上,从而实现数据库的恢复,这种恢复不需要通过备份,所以更方便、更快速。该功能不基于撤销数据,而是基于闪回日志。 语法flashback 【standby】 database d...

pentaho之kettle篇---kettle基本操作

今天先来做一个简单的kettle的例子。 打开输入,选择CSV文件输入。 双击CSV文件输入图标,可以看见如下: 步骤名称:就是你这一步的名字,可以任意取,原则就是要明白,清楚这一步是做了什么操作。 文件名:是你要选取的这个.CSV结尾的文件的名称。 列分隔符:每个CSV文件都是有一定的规则的,要么是分号是分隔符,要么是逗号是分隔符等等。 包含列头行:...

python中常用的文件和目录操作(二)

一. os模块概述 python os模块提供了非常丰富的方法用来处理文件和目录 二. 导入os模块: import os 三. 常用方法 1. os.name 输出字符串表示正在使用的平台,如果是windows则用"nt"表示,如果是Linux/Unix,是"posix" import os print(os.name) 结果: nt...

linux系统常用运维命令

目录/文件处理命令 mkdir dirname 创建文件夹 mkdir -p /tmp/a/b 递归创建目录 rm -rf dirname 删除目录及内部文件 -r:表示递归删除文件及文件夹;-f:表示强制删除,不提示 touch filename 创建文件 mv ins.war ins_new.war 重命名 mv ins.war webapps/ 移动...

IOS沙盒(SandBox)

IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。 1.每个应用程序都在自己的沙盒内 2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容 3.应用程序向外请求或接收数据都需要经过权限认证 查看模拟器的...

centos7 arm mysql 安装

arm 系列必须用arm的mysql安装包 在安装之前,先删除mariadb  通过 rpm -qa | grep mariadb 命令查看 mariadb 的安装包 如果存在 通过 rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps 命令装卸 mariadb 还需要安装 libaio 先查看有没有 rpm -...