MonetDB usage

简介:
MonetDB的安装参考 : 
MonetDB的性能让我眼前一亮, 对比PostgreSQL, 某些查询远超PG.
下面看看MonetDB简单的使用.
首先是使用monetdbd初始化一个dbfarm. 生成配置文件.merovingian_properties
[root@176 ~]# monetdbd create /data01/mdb2
[root@176 ~]# ll -la /data01/mdb2
.merovingian_properties

现在目录中只有一个配置文件, 在启动monetdbd前, 需要设置一下监听, 因为本地如果启用了多个monetdbd的话, 端口会冲突的.
首先获得当前创建的dbfarm的配置文件内容, 注意配置文件只能通过monetdbd来set.
# cat .merovingian_properties
# DO NOT EDIT THIS FILE - use monetdb(1) and monetdbd(1) to set properties
# This file is used by monetdbd

control=false

获得配置文件 : 
[root@176 ~]# monetdbd get all /data01/mdb2
   property            value
hostname         176.sky-mobi.com
dbfarm           /data01/mdb2
status           no monetdbd is serving this dbfarm
mserver          unknown (monetdbd not running)
logfile          /data01/mdb2/merovingian.log
pidfile          /data01/mdb2/merovingian.pid
sockdir          /tmp
port             50000
exittimeout      60
forward          proxy
discovery        true
discoveryttl     600
control          no
passphrase       <unknown>
mapisock         /tmp/.s.monetdb.50000
controlsock      /tmp/.s.merovingian.50000

设置属性, 一般设置监听端口即可, unix socket视情况修改. 
[root@176 ~]# monetdbd set port=50001 /data01/mdb2
如果要通过monetdb远程控制它的话, 还需要设置passphrase和control, 注意测试一下passphrase, 好像超过4个字母会有问题
[root@176 ~]# monetdbd set passphrase=1Digo /data01/mdb2
[root@176 mdb2]# monetdbd set control=yes /data01/mdb2
[root@176 mdb2]# monetdbd get all /data01/mdb2
   property            value
hostname         176.sky-mobi.com
dbfarm           /data01/mdb2
status           monetdbd[23923] 1.7 (Jan2014-SP3) is serving this dbfarm
mserver          /opt/monetdb11.17.21/bin/mserver5
logfile          /data01/mdb2/merovingian.log
pidfile          /data01/mdb2/merovingian.pid
sockdir          /tmp
port             50001
exittimeout      60
forward          proxy
discovery        yes
discoveryttl     600
control          yes
passphrase       {SHA512}d9343d4c860655ac2e815666f08d50750c58c974c05debe205aa243c0654706fa60f858fbcbd239f878777ee25f6558cd9e2af917e73ae00760a3aa522c52725
mapisock         /tmp/.s.monetdb.50001
controlsock      /tmp/.s.merovingian.50001


启动monetdbd
[root@176 ~]# monetdbd start /data01/mdb2

现在可以看到监听了, 目录下多了日志和PID文件.
[root@176 ~]# netstat -anp|grep 50001
tcp        0      0 0.0.0.0:50001               0.0.0.0:*                   LISTEN      23923/monetdbd      
udp        0      0 0.0.0.0:50001               0.0.0.0:*                               23923/monetdbd      
unix  2      [ ACC ]     STREAM     LISTENING     1036931 23923/monetdbd      /tmp/.s.monetdb.50001
unix  2      [ ACC ]     STREAM     LISTENING     1036935 23923/monetdbd      /tmp/.s.merovingian.50001
[root@176 ~]# ll /data01/mdb2/
total 2
-rw------- 1 root root 666 Aug 13 17:13 merovingian.log
-rw-r--r-- 1 root root   6 Aug 13 17:13 merovingian.pid
[root@176 ~]# ps -efw|grep monet
root     24361     1  0 17:30 ?        00:00:00 monetdbd start /data01/mdb2
root     24436 24361  6 17:34 ?        00:00:46 /opt/monetdb11.17.21/bin/mserver5 --dbpath=/data01/mdb2/test --set merovingian_uri mapi:monetdb://176.sky-mobi.com:50001/test --set mapi_open false --set mapi_port 0 --set mapi_usock /data01/mdb2/test/.mapi.sock --set monet_vault_key /data01/mdb2/test/.vaultkey --set gdk_nr_threads 8 --set max_clients 64 --set sql_optimizer default_pipe --set monet_daemon yes


接下来要使用monetdb连接这个monetdbd来创建数据库.
测试passphrase是否正常.
[root@176 mdb2]# monetdb -h 127.0.0.1 -p 50001 -P 1Digo discover
discover: =OK

创建1个数据库, 数据库创建的时候处于维护状态, 也就是LOCK状态, 必须release后才可以读写.
[root@176 mdb2]# monetdb -p 50001 create test
created database in maintenance mode: test
[root@176 mdb2]# monetdb -p 50001 release test
taken database out of maintenance mode: test

获得当前集群的配置信息,例如允许的线程数, 客户端连接数等. 
[root@176 mdb2]# monetdb -p 50001 get all
     name          prop     source           value
test             name      -        test
test             type      default  database
test             shared    default  yes
test             nthreads  default  8
test             optpipe   default  default_pipe
test             readonly  default  no
test             nclients  default  64

查看monetdbd状态
[root@176 mdb2]# monetdb -p 50001 status -l
test:
  connection uri: mapi:monetdb://176.sky-mobi.com:50001/test
  database name: test
  state: crashed
  locked: no
  scenarios: (none)
  start count: 0
  stop count: 0
  crash count: 0
  average uptime: 0s
  maximum uptime: 0s
  minimum uptime: 0s
  last start with crash: (unknown)
  last start: 1970-01-01 08:00:00
  last stop: (unknown)
  average of crashes in the last start attempt: 0
  average of crashes in the last 10 start attempts: 0.00
  average of crashes in the last 30 start attempts: 0.00

[root@176 mdb2]# monetdb -p 50001 status -c
database test, crashed on 1970-01-01 07:59:59
  crash average: 0.00 0.00 0.00 (over 1, 15, 30 starts) in total 0 crashes
  uptime stats (min/avg/max): 0s/0s/0s over 0 runs


使用mclient连接到刚才创建的数据库, 现在需要用到默认的用户密码monetdb.
mclient的参数详见man mclient, 例如编码, 语言, 时区等.
[root@176 mdb2]# mclient -p 50001 test  
user(root):monetdb
password: 输入monetdb
Welcome to mclient, the MonetDB/SQL interactive terminal (Jan2014-SP3)
Database: MonetDB v11.17.21 (Jan2014-SP3), 'mapi:monetdb://176.sky-mobi.com:50001/test'
Type \q to quit, \? for a list of available commands
auto commit mode: on

查看帮助
sql>\?
\?      - show this message
\<file  - read input from file
\>file  - save response in file, or stdout if no file is given
\|cmd   - pipe result to process, or stop when no command is given
\h      - show the readline history
\D table- dumps the table, or the complete database if none given.
\d[Stvsfn]+ [obj] - list database objects, or describe if obj given
\A      - enable auto commit
\a      - disable auto commit
\e      - echo the query in sql formatting mode
\f      - format using a built-in renderer {csv,tab,raw,sql,xml}
\w#     - set maximal page width (-1=unlimited, 0=terminal width, >0=limit to num)
\r#     - set maximum rows per page (-1=raw)
\L file - save client/server interaction
\X      - trace mclient code
\q      - terminate session

查看系统表
sql>\dSt
SYSTEM TABLE  sys._columns
SYSTEM TABLE  sys._tables
SYSTEM TABLE  sys.args
SYSTEM TABLE  sys.auths
SYSTEM TABLE  sys.connections
SYSTEM TABLE  sys.db_user_info
SYSTEM TABLE  sys.dependencies
SYSTEM TABLE  sys.functions
SYSTEM TABLE  sys.idxs
SYSTEM TABLE  sys.keys
SYSTEM TABLE  sys.objects
SYSTEM TABLE  sys.privileges
SYSTEM TABLE  sys.schemas
SYSTEM TABLE  sys.sequences
SYSTEM TABLE  sys.statistics
SYSTEM TABLE  sys.storagemodelinput
SYSTEM TABLE  sys.systemfunctions
SYSTEM TABLE  sys.triggers
SYSTEM TABLE  sys.types
SYSTEM TABLE  sys.user_role

创建表, 插入测试数据
sql>create table a(id int auto_increment primary key, info varchar(32));
operation successful (16.583ms)
sql>insert into a (info) values ('test');
1 affected rows, last generated key: 1 (7.604ms)
sql>insert into a (info) select info from a;

多次执行, 再创建一个b表.
测试count和关联. 速度非常快.
sql>select count(*) from a;
+----------+
| L1       |
+==========+
| 33554432 |
+----------+
1 tuple (1.446ms)
sql>select count(*) from b;
+----------+
| L1       |
+==========+
| 33554432 |
+----------+
1 tuple (1.938ms)
sql>select count(*) from b,a where a.id=b.id;
+----------+
| L1       |
+==========+
| 33554432 |
+----------+
1 tuple (18.6s)

[参考]
3. man monetdbd mclient monetdb
目录
相关文章
|
SQL 自然语言处理 关系型数据库
MySQL · 源码分析 · 词法分析及其性能优化
Table of Contents 1. 简介 2. 背景知识 3. 查找树的实现 3.1. 树的查找 3.2. 树的产生 4. 试试折半查找 5. 总结 简介 MySQL 支持标准的 SQL 语言,具体实现的时候必然要涉及到词法分析和语法分析。早期的程序可能会优先考虑手工实现词法分析和语法分析,现在大多数场合下都会采用工具来简化实现。MySQL、PostgreSQL 等
9293 0
|
Java 开发工具
mac下解决intellij idea启动慢和debug卡死问题
mac下解决intellij idea启动慢和debug卡死问题
4594 0
mac下解决intellij idea启动慢和debug卡死问题
|
机器学习/深度学习 数据可视化 PyTorch
机器学习 | matplotlib超详细教程
机器学习 | matplotlib超详细教程
542 0
|
运维 Prometheus 监控
OceanBase 的运维与监控最佳实践
【8月更文第31天】随着分布式数据库解决方案的需求日益增长,OceanBase 作为一种高性能的分布式数据库系统,在众多场景下得到了广泛应用。为了确保 OceanBase 集群的稳定运行,合理的运维与监控是必不可少的。本文将探讨 OceanBase 的日常运维管理与监控策略,并提供相应的代码示例。
981 2
|
人工智能 自动驾驶 物联网
5G到底有多牛?一文看懂它的原理与优势!
5G到底有多牛?一文看懂它的原理与优势!
954 19
|
存储 缓存 弹性计算
重新审视 CXL 时代下的分布式内存
从以太网到 RDMA 再到 CXL,标志着互连技术的重大突破。
|
网络协议 数据处理 C++
LabVIEW与Simulink的通信及调用方式
LabVIEW与Simulink的通信及调用方式
631 1
|
机器人 数据库 Python
详解如何使用 Python 操作 Telegram(电报)机器人(二)
详解如何使用 Python 操作 Telegram(电报)机器人(二)
1790 2
|
计算机视觉 异构计算
目标检测实战(四):YOLOV4-Tiny 源码训练、测试、验证详细步骤
这篇文章详细介绍了使用YOLOv4-Tiny进行目标检测的实战步骤,包括下载源码和权重文件、配置编译环境、进行简单测试、训练VOC数据集、生成训练文件、准备训练、开始训练以及多GPU训练的步骤。文章还提供了相应的代码示例,帮助读者理解和实践YOLOv4-Tiny模型的训练和测试过程。
1594 0
|
存储 SQL IDE
OceanBase 架构和研发技巧 | 学习笔记
快速学习 OceanBase 架构和研发技巧
OceanBase 架构和研发技巧 | 学习笔记