摘要:
每个数据库对于db,schema以及user,role都有一套自己的设计, 不同数据库间对于相同名字的东西例如database和schema可以说南辕北辙, 例如mysql中schema其实是database的同义词.
本文分析monetdb的database的概念和作用
database的概念和作用:
- 和mysql的database完全不同, mysql的database和schema是同义词, 但是mdb的database完全不同
- mdb的database可以当作实例来理解, 一个db包含mserver运行的一切, 以下逐个解释
- mdb的db在物理文件上, 包含最顶层的目录结构, mserver是以db为单元启动
- 用户每指定一个不同的db做连接, 就启动一个新的mserver进程
- db与db之间, 从物理文件目录结构上就彻底隔离, 除了预定义的对象, 两个db之间没有任何相同的地方
- 无论用户定义的schema,user,role,UDF等等, 两个不同的db, 都是互相不能使用也不能访问
- 换个简单的说法, user是db的一部分, 一个db可以创建多个user, 但是一个user却只能位于一个db
- 这里有个漏洞, 如果两个不同的db里创建两个相同名字的user, 能说这个user是同一个?
- 显然不能, 因为这两个名字一样的user, 无论是password, 还是赋予的role, 还是创建的schema, 以及默认的schema, 都是独立的, 位于不同的db中
- 所以很明显, 就算是在两个不同的db中创建两个名字一样的user, 这两个user也是完全不同的, 仅仅只是user名字一样. 但是这两个user却位于两个不独立的db实例中!
- 那么该如何理解mdb中的database与mysql中的database的区别呢?
- mysql的database是schema的同义词
- 也就是说mysql的database对应的是mdb中的schema
- 而mdb的schema是mdb的database的一部分
- 那么mdb的database的作用就是mysql的整个实例
- 从运行的角度, mdb的一个实例是一个mserver进程, mysql的一个实例是一个mysqld进程.
- 一个mserver进程管理一个mdb的db, 也只能管理一个db. 而这个db包含运行时所有对象, 且与其他的mdb的db互相独立
- 一个mysqld进程管理所有的mysql对象, 即包含运行时的一切对象, 等价于mdb的一个mserver
mclient打开两个mdb的database分析:
节点架构图:
节点图说明:
- mserver对应的可以理解成mysqld
- 客户端每连接一个不同的database,就会启动一个新的mserver进程
- 如果两个客户端连接同一个database,那么就不会启动新的mserer进程
两个客户端分别连接两个不同的database的例子分析:
一. 创建两个database
# mytest
monetdb create mytest
monetdb release mytest# mycrack
monetdb create mycrack
monetdb release mycrack
二. 分别查看两个database下的目录结构
[root@dev-stonedb-zhangshilong1 mytest]# pwd
/dbfarm/mytest
[root@dev-stonedb-zhangshilong1 mytest]# ll
total 4
-rw------- 1 root root 0 Sep 28 02:46 6a292eb5-8a55-4861-af04-1e48573199f2
drwx------ 9 root root 4096 Sep 28 02:46 bat
-rw------- 1 root root 0 Sep 22 06:27 mdbtrace.log
drwx------ 3 root root 17 Sep 22 06:27 sql_logs
[root@dev-stonedb-zhangshilong1 mycrack]# pwd
/dbfarm/mycrack
[root@dev-stonedb-zhangshilong1 mycrack]# ll
total 0
-rw------- 1 root root 0 Sep 28 02:45 b2bc7dd0-a500-496e-9fee-d58cacbd7ddd
drwx------ 4 root root 30 Sep 28 02:45 bat
-rw------- 1 root root 0 Sep 28 02:45 mdbtrace.log
drwx------ 3 root root 17 Sep 28 02:45 sql_logs
分析:
- 可以看出都是作为顶层目录结构