收藏 分享(赏)

MonetDB快速入门.doc

上传人:精品资料 文档编号:11194812 上传时间:2020-02-15 格式:DOC 页数:12 大小:94KB
下载 相关 举报
MonetDB快速入门.doc_第1页
第1页 / 共12页
MonetDB快速入门.doc_第2页
第2页 / 共12页
MonetDB快速入门.doc_第3页
第3页 / 共12页
MonetDB快速入门.doc_第4页
第4页 / 共12页
MonetDB快速入门.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、作者:王治国MonetDB 快速入门特性:列式存储模型:在内存中数据都是以 BAT(Binary Association Table) (OID,value) pairs 形式存放,数据超过了内存和虚拟内存,使用磁盘存放文件,磁盘和内存通过内存映射实现。基于 CPU 优化的查询架构,自动索引,实时查询优化。1 架构:三层软件架构:SQL front-end:前端 SQL 解析,数据模型优化,降低数据中间结果的总量,最后将 SQL 语句解析为 MAL(MonetDB Assembly Language) 。Tactical-optimizers:一系列优化模块的集合,组成优化管道,这个模块提供功

2、能从符号处理到实时数据分发和执行。Columnar abstract-machine kernel:列式内核2 MAL MonetDB Assembly Language(MAL)MAL 是 SQL 和 XQuery 前端查询的目标语言。SQL 语句通过语法解析解析成 MAL,MAL 在经过优化器优化,重写成优化后的 MAL,提供给内核执行。3 内核 执行内核是一个运行 MAL 语言的虚拟机。复杂的查询被拆分成多个步骤,每个步骤操作一个列,叫 bulk processing。所有的 BAT 操作被映射成简单的数组操作,一个并行处理引擎。内核运行过程中会根据输入属性和系统状态选择合适的优化算法和

3、实现来执行 MAL 语言。运行过程中操作优化:会根据输入属性和系统状态选择合适的优化算法和实现。第一章、安装第一节、编译安装rpm -ivh pcre-devel-6.6-6.el5_6.1.x86_64.rpm./configure -prefix=/opt/pub/MonetDB作者:王治国makemake installexport PATH=$PATH:/opt/pub/MonetDB/bin第二节、启动在 Linux 上快速安装,启动 MonetDB 守护进程 Monetdbd。这个守护进程负责管理后台、本地、远程服务器,由monetdb 控制。在这里,我们展示了一个简单的过程,涉及

4、建立一个数据库,将数据加载和查询。shell monetdbd create /path/to/mydbfarmshell monetdbd start /path/to/mydbfarmshell monetdb create vocshell monetdb release vocshell mclient -u monetdb -d vocpassword:第三节、实用程序mclient: 客户端连接命令monetdb: 数据库操作命令mondetdbd: 守护进程操作命令mserver5: mserver5 是当前 MonetDB 服务器提供所有固定请求的,调整 mserver5 内核

5、使用的参数。mysqldump:dump 数据库1、守护进程一个机器上一个数据库实例,多个数据库实例可以同时在一个机器上,但是每个实例所使用的资源会受影响。监控所有实例,作为客户端代理提供每个实例的访问,另外处理故障恢复和数据并发引擎。作者:王治国Monetdb:守护进程,一台机器上只能有一个实例,一个实例有多个进程。(1)创建守护进程目录% monetdbd create /my-dbfarm(2 )查看守护进程设置% monetdbd get all /my-dbfarm(3 )修改参数% monetdbd set port=54321 /my-dbfarm(4 )启动守护进程% mone

6、tdbd start /my-dbfarm(5 )创建一个数据库% monetdb create my-first-db(6 )查看数据库状态,指定端口号,指定对应的数据库% monetdb -p54321 status(7 )启动和解锁数据库启动数据库% monetdb start my-first-db解锁数据库,否则数据库是锁定状态% monetdb release my-first-db2、连接% mclient -dmy-first-db-d 参数指定数据库名,默认用户名和密码是 monetdb/monetdb连接不上,可以带上端口号% mclient -p54321 -dmy-fi

7、rst-db作者:王治国%mclient -u monetdb -d dbtest3、停止% monetdbd stop /my-dbfarm4、 SQL 导入三种方式1:shell mclient -u voc -d voc voc_dump.sqlpassword:2:shell mclient -u voc -d voc 3:shell mclient -u voc -d vocpassword:sql CREATE USER “tpc“ WITH PASSWORD tpc NAME TPC Explorer SCHEMA “sys“;sqlCREATE SCHEMA “tpc“ AUT

8、HORIZATION “tpc“;sqlALTER USER “tpc“ SET SCHEMA “tpc“;作者:王治国第二节、数据类型和表1、原始数据类型2、建表示例sqlCREATE TABLE test (more id int,more data varchar(30)more );sqld testCREATE TABLE “voc“.“test“ (“id“ int,“data“ varchar(30);第三节、函数基本与 Postgresql 兼容,只是类型转换不一样。1、类型转换函数str_to_date(s string ,format string)作者:王治国date_t

9、o_str(d date, format string)第四节、加载数据1、普通装载方式一:直接使用 Insert into ,可以通过 START TRANSACTION 和 COMMIT 减少事物提交。这种方式因为每次查询都是独立的,所以每次只能使用到一个 CPU 核。方式二:COPY INTOCOPY INTO TABLE FROM FILE;大量数据插入式,server 不知道需要分配多少内存,因此只会分配很少,也就是在插入过程中,需要不停的分配内存,这个开销会非常大。因此,最好能给定一个值多少条记录会被插入。COPY n RECORDS INTO table FROM fileN 必

10、须比实际插入的数字要大,如果文件实际的值大于 N,只会有 N 条记录会被插入。在同一表同时有多个 COPY INTO 查询,给一个更大的值会非常有效。offset 值指定数据加载开始位置,第一条记录 offset 为 1完整性约束最好在文件被加载完了之后再添加,因为 ALTER 命令是批检查和处理,性能会更好。2、导出 COPY INTO 命令把表 dump 成一个 ASCII 文件。导入导出可以指定 gz 和 bz2 的压缩算法。3、二进制批加载 COPY 命令,性能主要消耗在将 ASCII 值转化为二进制,MONETDB 针对多核进行了高度优化,多个线程会并行处理。用户直接根据 BAT 模

11、型,生成二进制文件。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) b

12、igint(64bit)Real 和 double 映射 C 语言的 float 和 double 类型。可变字符串,文件中存放的对应的 C 语言的字符串,每行通过分割符分割,并且没有转义字符。所有文件需要对其,有多个值在文件中,表中就有多少条记录。其他的类型(包括 UTF-8 和转义字符)必须要用 COYP INTO 加载。第五节、JDBC1、驱动JDBC 下载:http:/dev.monetdb.org/downloads/Java/Latest/2、加载驱动/ make sure the ClassLoader has the MonetDB JDBC driver loadedClas

13、s.forName(“nl.cwi.monetdb.jdbc.MonetDriver“);/ request a Connection to a MonetDB server running on localhostConnection con = DriverManager.getConnection(“jdbc:monetdb:/localhost/database“, “monetdb“, “monetdb“);3、示例import java.sql.*;public class MJDBCTest public static void main(String args) throws

14、Exception / make sure the driver is loadedClass.forName(“nl.cwi.monetdb.jdbc.MonetDriver“);Connection con = DriverManager.getConnection(“jdbc:monetdb:/localhost/database“, “monetdb“, “monetdb“);Statement st = con.createStatement();ResultSet rs;rs = st.executeQuery(“SELECT a.var1, COUNT(b.id) as tota

15、l FROM a, b WHERE a.var1 = b.id AND a.var1 = andb GROUP BY a.var1 ORDER BY a.var1, total;“);/ get meta data and print columns with their type作者:王治国ResultSetMetaData md = rs.getMetaData();for (int i = 1; i select count(*) from tables;sqlexplain select count(*) from tables;+-+| mal |+=+| function user

16、.s3_2autoCommit=true():void; | _2 := sql.mvc(); | barrier _143 := language.dataflow(); | _23:bat:oid,:sht := sql.bind(_2,“sys“,“_tables“,“type“,1); | _24 := algebra.thetauselect(_23,2:sht,“第二节、数据字典参见:http:/www.monetdb.org/Documentation/SQLcatalog/TablesColumns第三节、监控数据库活动1、正在执行的任务select * from sys.qu

17、eue();第四节、监控存储使用磁盘空间可以通过 du 命令查看 dbfarm 目录或者数据库中执行 select * from storage();作者:王治国第五节、备份还原1、 SQL 转储SQL 转储是对数据库镜像或者迁移的常用的方法。如在两个版本之间。 SQLdump 是 ASCII 编码的 SQL 的集合。执行这些脚本,可以重新创建一样的数据库。MonetDB 不提供全局锁,并发情况下这个转储可能无效。shell mclient -lsql -database=voc -dump /tmp/voc.sql可以检察/tmp/voc.sql,确认它是可读的。如果空间是问题,可以用管道把

18、输出给一个压缩工具,或者使用 linux 工具直接发送到另外一台机器,移动数据文件到新机器。MonetDB 可以用于创建数据库。shell mclient -lsql -database=voc /tmp/voc.sql2、快速备份shell monetdb stop demoshell monetdb lock demoshell monetdb release demo第四章、技巧第一节、单步调试执行SQL 语句被翻译成为 Mal 程序,优化存储为用户模块。代码可以用 MAL_debugger 跟踪,以下是一个调试的例子。debug select count(*) from tables;

19、# mdb.start()mdbnext# user.s1_0()mdbnext# _2:bat:oid,:int := sql.bind(_3=“sys“, _4=“ptables“, _5=“id“, _6=0)mdbnext# _8:bat:oid,:int := sql.bind(_3=“sys“, _4=“ptables“, _5=“id“, _9=1)mdb .第二节、集群http:/ SQL 的索引创建,但是不起作用,MonetDB 会自动创建和维护索引。外键约束会内部自动创建索引。尽量创建外键约束,外联结时有 1 倍以上性能提高。第四节、事务显示事物:START TRANSACTIONCOMMITROOLBACK。也可以将 session 参数设置为 auto_commit 为 true,这样单 SQL 会是一个独立的事物。一行被删除,只是标记一下,不会降低表的大小,需要通过回收算法回收。事物使用的是乐观并发控制:Optimistic concurrency control,提交前,每个事物检测没有其他事物修改数据,如果检查到了冲突修改,提交的事物就被回滚。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报