Monet DB学习笔记

时间:14-12-30 栏目:大数据技术文章 作者:爱说云网 评论:0 点击: 2,745 次

架构:

三层软件架构:

SQL front-end:前端SQL解析,数据模型优化,降低数据中间结果的总量,最后将SQL语句解析为MALMonetDB Assembly Language)。

Tactical-optimizers:一系列优化模块的集合,组成优化管道,这个模块提供功能从符号处理到实时数据分发和执行。

Columnar abstract-machine kernel:列式内核

MAL

MonetDB Assembly Language(MAL)

MALSQLXQuery前端查询的目标语言。

SQL语句通过语法解析解析成MALMAL在经过优化器优化,重写成优化后的MAL,提供给内核执行。

内核

执行内核是一个运行MAL语言的虚拟机。

复杂的查询被拆分成多个步骤,每个步骤操作一个列,叫bulk processing。所有的BAT操作被映射成简单的数组操作,一个并行处理引擎。

内核运行过程中会根据输入属性和系统状态选择合适的优化算法和实现来执行MAL语言。

    运行过程中操作优化:会根据输入属性和系统状态选择合适的优化算法和实现。 

特性:

列式存储模型:

在内存中数据都是以BAT(Binary Association Table) (OID,value) pairs形式存放,数据超过了内存和虚拟内存,使用磁盘存放文件,磁盘和内存通过内存映射实现。

基于CPU优化的查询架构

自动索引

实时查询优化

发布周期:

大概每4个月发布一个版本,每个月一个补丁包。

编译安装

rpm -ivh pcre-devel-6.6-6.el5_6.1.x86_64.rpm

./configure --prefix=/opt/pub/MonetDB

make

make install

export PATH=$PATH:/opt/pub/MonetDB/bin

实用程序:

mclient: 客户端连接命令

monetdb: 数据库操作命令

mondetdbd: 守护进程操作命令

mserver5: mserver5是当前MonetDB服务器提供所有固定请求的,调整mserver5内核使用的参数。

mysqldump:dump数据库

守护进程

一个机器上一个数据库实例,多个数据库实例可以同时在一个机器上,但是每个实例所使用的资源会受影响。

监控所有实例,作为客户端代理提供每个实例的访问,另外处理故障恢复和数据并发引擎。

Monetdb:守护进程,一台机器上只能有一个实例,一个实例有多个进程。

 (1)创建守护进程目录

% monetdbd create ~/my-dbfarm

2)查看守护进程设置

% monetdbd get all ~/my-dbfarm

3)修改参数

% monetdbd set port=54321 ~/my-dbfarm

4)启动守护进程

% monetdbd start ~/my-dbfarm

5)创建一个数据库

% monetdb create my-first-db

6)查看数据库状态,指定端口号,指定对应的数据库

% monetdb -p54321 status

7)启动和解锁数据库

启动数据库

% monetdb start my-first-db

解锁数据库,否则数据库是锁定状态

% monetdb release my-first-db

8)连接数据库

% mclient -dmy-first-db

-d参数指定数据库名,默认用户名和密码是monetdb/monetdb

连接不上,可以带上端口号

% mclient -p54321 -dmy-first-db

%mclient -u monetdb -d dbtest

9)停止demon进程:

% monetdbd stop ~/my-dbfarm

10)从SQL脚本中导入数据,三种方法:

1:
shell> mclient -u voc -d voc voc_dump.sql
password:<voc>

2:
shell> mclient -u voc -d voc < voc_dump.sql
password:<voc>

3:
shell> mclient -u voc -d voc
password:<voc>
sql> < voc_dump.sql

资源利用:

Monetdb是内存数据库,但是并不要求所有的数据都放在物理内存中,数据超过了可用的物理内存,Monetdb把数据放在swap分区和内存映射文件上。

批加载数据时(尤其是通过COPY INTO方式加载CSV文件),MonetDB需要整张表所有列都是active,就是可以在地址空间可以访问。如果是普通加载,部分数据会被写到磁盘上,不需要把整个表放到内存中,比如加载100G的表,大概8G的内存,16G的交换空间和足够的磁盘空间。

查询阶段,每个MAL操作,MonetDB需要所有的输入,输出,中间过程数据都在内存中,MonetDB会自动组织数据到虚拟内存和内存映射文件(大的中间结果和表)。

运行过程中,mserver5进程的实际大小可能会超过,物理内存和交换空间,通常情况下,这个不会是问题,因为通常是大表(或者中间结果)通过内存映射的方式把文件写到磁盘上,这些数据当前并不访问,所以也不消耗实际的物理内存。

如果一个表的单独列或者中间结果超过了物理内存的大小,就需要到硬盘交换数据,MonetDB性能会下降。

磁盘默认无压缩(除了字符串使用字典编码),原因是磁盘空间和IO带宽的消耗要比CPU解压更划算。不压缩,因此所以列可以通过内存映射方式访问。如果磁盘比较贵,而内存可以存放很长时间,压缩优化才会有用。

磁盘空间可以通过du命令查看dbfarm目录或者数据库中执行select * from storage();

10 压缩:

列存储是高度优化的,底层的存储是一个密集数组,中间没有空闲空间用来将来插入和数据结构本身的消耗。密集数组是数据库文件可以直接映射到内存中。存储宽度从1 byte8 byte

NULL为指定大小空间,从而不需要用辅助的BIT掩码来代替。

字符串存储使用的是字典编码,这个会显著降低存储空间,但是大字段会导致大的代价。因此,真正大的字典表,MonetDB会重新组织为非压缩方式。

查询优化时,一个密集结果实际上市用列视图代表,必满了拷贝结果和存储私有的列结构。

11 只读数据库:

可以使用下面命令将数据库设置为只读,只读数据库使查询变快。

shell> monetdb set readonly=yes

设置为只读之后,所有表都不能修改,只能查询,甚至不能创建临时表。

修改数据库为只读是使用了SQL schemal和用户权限。

12 事物:

显示事物:

START TRANSACTION

COMMIT

ROOLBACK

也可以将session参数设置为auto_commit true,这样单SQL会是一个独立的事物。

一行被删除,只是标记一下,不会降低表的大小,需要通过回收算法回收。

事物使用的是乐观并发控制:Optimistic concurrency control,提交前,每个事物检测没有其他事物修改数据,如果检查到了冲突修改,提交的事物就被回滚。这种算法只适合在低冲突中使用,事物的实现可以不需要使用锁和等待其他锁释放,如果冲突经常发生,重复执行事物的消耗会非常大。所以非常不适合在线交易类型的业务。

13 运行时功能:

SQL语句提供查询计划,性能和调试功能。

EXPLAIN SQL

TRACE SQL

DEBUG SQL

14 加载数据:

方式一:直接使用Insert into ,可以通过START TRANSACTION COMMIT减少事物提交。这种方式因为每次查询都是独立的,所以每次只能使用到一个CPU核。

方式二:COPY INTO

COPY INTO TABLE FROM FILE;

大量数据插入式,server不知道需要分配多少内存,因此只会分配很少,也就是在插入过程中,需要不停的分配内存,这个开销会非常大。因此,最好能给定一个值多少条记录会被插入。

COPY n RECORDS INTO table FROM file

N必须比实际插入的数字要大,如果文件实际的值大于N,只会有N条记录会被插入。在同一表同时有多个COPY INTO查询,给一个更大的值会非常有效。

offset 值指定数据加载开始位置,第一条记录offset1

完整性约束最好在文件被加载完了之后再添加,因为ALTER命令是批检查和处理,性能会更好。

15 导出

COPY INTO命令把表dump成一个ASCII文件。

导入导出可以指定gzbz2的压缩算法。

16 用户定义函数:

参考例子sql/backends/monet5/UDF

MonetDB实例之间迁移表,可以使用二进制的COPY INTO/FROM格式。

17 数据库优化:

每个SQL查询经过了一系列的优化步骤达到最优的执行计划,这些步骤用取名‘optimizer pipe

两张表记录了所有SQL语句的查询定义和他们的执行时间。

表一:queryHistory:

系统变量‘history’限制,如果该限制打开,每个查询只要编译进cache就会被存储过程keepQuery记录到这个表中,这个表记录的是SQL语句分析解析性能。

 set history=true;

create table queryHistory(

    id wrd primary key,

    defined timestamp,  -- when entered into the cache

    name string,        -- database user name

    query string,       -- original text

    parse bigint,       -- time in usec

    optimize bigint     -- time in usec

);

表二:callHistory:

记录查询性能

create table callHistory(

    id wrd references queryHistory(id), -- references query plan

    ctime timestamp,    -- time the first statement was executed

    arguments string,

    exec bigint,        -- time from the first statement until result export

    result bigint,      -- time to ship the result set to the client

    foot bigint,        -- footprint for all bats in the plan in bytes

    memory bigint,      -- storage size of intermediates created in bytes

    tuples wrd,         -- number of tuples in the result set

    inblock bigint,     -- number of physical blocks read

    oublock bigint      -- number of physical blocks written

);

18 优化管道:

每个管道包含一系列MAL函数 检测和传输执行计划。优化器可以修改名字和MAL function系列。

sql>set optimizer='minimal_pipe'; 修改名字
sql>select optimizer;

sql> set optimizer='optimizer.inline();optimizer.remap();optimizer.deadcode();optimizer.multiplex();optimizer.garbageCollector();'; 修改MAL function函数顺序

sql>select * from optimizers();

16数据类型:

1、 内置类型: 

integer:长度有2,4,8 bytes,可以为空。系统不检测溢出,所以把转换为一个大值时可能导致副作用。

Numeric:固定的长度

Floatdouble:和系统一致

2、 支持时间类型:

date

daytime

timestamp

timezone

3、 sequeue

4、 URL

5、 网络地址

6、 用户自定义类型

19  唯一列 

使用sequeue支持唯一列

20 Constraints

支持not nll ,unique primary,foreign keys

21 索引:

支持标准SQL的索引创建,但是不起作用,MonetDB会自动创建和维护索引。

22 视图:

支持基本视图,不支持嵌套视图和引用视图

23 数据操作

不支持通过视图删除数据

24 自定义类型

 NUMERIC(p,s) p最大支持18

‘’ 和NULL不等价,两个分割符号之间要写上NULL,才能被识别。

COPY INTO 把两个分割符之间认为是空字符串

COPY INTO不支持通配,文件必须指定绝对路径

COPY INTO CPU消耗不高

25 .linux OOM  Killer

Linux 内核有一个OOM的功能,当系统到大一个临界点,快要超过内存是,OOM会杀掉进程。通常情况下,重启就能恢复,但是当在一个负责的更新的事物中,可能导致数据库不一致。

26 类型转换:

select sum(cast (sid as integer)) from "detail_ufdr_other_temp" ;

27 存储模型:

通过下面语句可以查出表的存储模型

select * from storage() where "table" = 'detail_ufdr_other_temp';

28 查询正在运行的任务(还不支持 ,2013/6才支持)

select * from sys.queue();

29 二进制批加载

COPY 命令,性能主要消耗在将ASCII值转化为二进制,MONETDB针对多核进行了高度优化,多个线程会并行处理。

用户直接根据BAT模型,生成二进制文件。

create table Tmp( i integer, f real, s string); 
copy binary into Tmp from ('path_to_file_i', 'path_to_file_f', 'path_to_file_s');

文件名是列明的绝对路径,这个路径需要和farm同样的文件系统。他们会直接替换TMP的内容。文件被拷贝完了之后,原来的空间就可以被回收利用。

每个文件直接用二进制表示,是一个C语言数组的DUMP

Char(1byte) tinyint(8-bits) smallint(16bits) int(32bits) bigint(64bit)

Real double映射C语言的float double类型。

可变字符串,文件中存放的对应的C语言的字符串,每行通过分割符分割,并且没有转义字符。所有文件需要对其,有多个值在文件中,表中就有多少条记录。

其他的类型(包括UTF-8和转义字符)必须要用COYP INTO加载

相关文章

试读《大数据时代的IT架构设计》
views 1416
大数据”的概念是在最早经历信息爆炸的学科--天文学和基因学中提出来的,而今已经渗透到了各行各业和生活中的方方面面。牛津大学教授维克托曾在《大数据时代》一书中指出,通过对海量数据进行分析,能够获得有巨大价值的产品和服务,或深刻的洞见。大数据引起了商业变革,管理变革,以致思维变革。调整信息系统的架构,使...
2014中关村大数据日,数据资产驱动产业创新...
views 1419
大数据作为价值万亿的可再生之矿,作为社会资产和生产要素,影响国计民生、产业再造和民族复兴。如何对数据资产的管理、变现和驱动产业创新,决定企业的竞争能力,产业的未来和国家竞争力。 围绕这个话题,政府领导、行业领袖、技术专家怎么看?产业联盟,领军企业和产业代表怎么想,又怎么做?2014中关村大数据日,我...
了解用于大数据解决方案的逻辑层-技术方案...
views 1328
文中介绍的模式有助于定义大数据解决方案的参数。本文将介绍最常见的和经常发生的大数据问题以及它们的解决方案。原子模式描述了使用、处理、访问和存储大数据的典型方法。复合模式由原子模式组成,并根据大数据解决方案的范围进行分类。由于每个复合模式都有若干个维度,所以每个模式都有许多变化。复合模式使得业务和技术...
如何结合大数据与云计算
views 2561
你如何在大数据的海洋寻宝?对于那些拥有庞大信息需要处理的企业,在数据分析之前要克服的第一个障碍就是--不能够定位到相关并且有意义的信息。这也是HGST遇到的问题,HGST(日立环球存储科技公司)是一个计算机硬件的主要生产厂商,他们现在迫切需要追踪在生产设施上收集到的数据。据HGST的云计算与高性能解...
互联网思维下该如何研究用户,哪里寻求大数据资源?...
views 1438
互联网时代,都倡导以客户需求为导向设计产品,但到底该如何研究用户?哪里寻求到用户资源?大家都在说大数据营销,但该如何利用大数据?哪里寻求这些资源呢?        易卓数据问:现在互联网的时代,都倡导以客户需求为导向设计产品,但是我却不知道该如何研究用户,哪里寻求到我的用户资源,简单的做问卷调查...
专访携程大数据平台高级经理李亚锋:大数据技术融合下的Spark更具魅力...
views 1466
随着移动互联时代的到来,人们的双手得到解放,因为通过智能手机APP和触摸屏就可以彻底解决交互性和易用性的问题,这也使用户行为数据呈现爆炸性增长。大数据技术可以帮助我们对海量的数据进行加工分析,了解用户的行为特征,以及他们对服务的期待,从而使用户得到更好的服务体验。 Hadoop 和Spark都是大家...
如何应对云计算大数据带来的法律问题...
views 1838
云计算给人们带来的一个最直观的感觉就是,大量的数据集中在“云”里,抬头观天,“我”在哪里?   物联网给人们最直观的感觉是,任何一个结点的传感器都在收集数据,低头看路,“陷阱”在哪里。   当一个人如此多的信息被陌生的机构掌握时,产生恐惧和不安全感一定是很正常的事情,于是自然会想到一个问题,如何...
大数据时代的危害性与局限性
views 2731
2月3日消息,白宫去年曾发表书面声明称,“大数据将作为历史性的驱动因素,帮助美国持久性地促进社会与经济活力”,其创造的社会价值与经济价值得以遵从该国提倡的“隐私、公正、平等、自主”。然而事实真的如此吗?大数据时代的危害性与局限性又是否会赶超其效益性? 某知名评论人表示,白宫这一努力平衡大数据成...

声明: 本文由( 爱说云网 )原创编译,转载请保留链接: Monet DB学习笔记

Monet DB学习笔记:等您坐沙发呢!

发表评论


读者排行