2023-09-28 monetdb-databae的概念和作用-分析

news2024/11/16 0:51:32

摘要:

每个数据库对于db,schema以及user,role都有一套自己的设计, 不同数据库间对于相同名字的东西例如database和schema可以说南辕北辙, 例如mysql中schema其实是database的同义词.

本文分析monetdb的database的概念和作用

备份: https://stoneatom.yuque.com/staff-ft8n1u/qfqtnb/gfqc62fozh0qsyqm

database的概念和作用:

  1. 和mysql的database完全不同, mysql的database和schema是同义词, 但是mdb的database完全不同
  2. mdb的database可以当作实例来理解, 一个db包含mserver运行的一切, 以下逐个解释
  3. mdb的db在物理文件上, 包含最顶层的目录结构, mserver是以db为单元启动
  4. 用户每指定一个不同的db做连接, 就启动一个新的mserver进程
  5. db与db之间, 从物理文件目录结构上就彻底隔离, 除了预定义的对象, 两个db之间没有任何相同的地方
  6. 无论用户定义的schema,user,role,UDF等等, 两个不同的db, 都是互相不能使用也不能访问
  7. 换个简单的说法, user是db的一部分, 一个db可以创建多个user, 但是一个user却只能位于一个db
    1. 这里有个漏洞, 如果两个不同的db里创建两个相同名字的user, 能说这个user是同一个?
    2. 显然不能, 因为这两个名字一样的user, 无论是password, 还是赋予的role, 还是创建的schema, 以及默认的schema, 都是独立的, 位于不同的db中
    3. 所以很明显, 就算是在两个不同的db中创建两个名字一样的user, 这两个user也是完全不同的, 仅仅只是user名字一样. 但是这两个user却位于两个不独立的db实例中!
  8. 那么该如何理解mdb中的database与mysql中的database的区别呢?
    1. mysql的database是schema的同义词
    2. 也就是说mysql的database对应的是mdb中的schema
    3. 而mdb的schema是mdb的database的一部分
    4. 那么mdb的database的作用就是mysql的整个实例
    5. 从运行的角度, mdb的一个实例是一个mserver进程, mysql的一个实例是一个mysqld进程.
    6. 一个mserver进程管理一个mdb的db, 也只能管理一个db. 而这个db包含运行时所有对象, 且与其他的mdb的db互相独立
    7. 一个mysqld进程管理所有的mysql对象, 即包含运行时的一切对象, 等价于mdb的一个mserver

mclient打开两个mdb的database分析:
 

节点架构图:

节点图说明:

  1. mserver对应的可以理解成mysqld
  2. 客户端每连接一个不同的database,就会启动一个新的mserver进程
  3. 如果两个客户端连接同一个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

分析:

  1. 可以看出都是作为顶层目录结构
  2. 两个database互相独立

三. 用两个客户端分别连接mytest库和mycrack库

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mytest -u crack
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mycrack
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mycrack'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

四. 查看打开两个不同的database时mserver与database的情况:

[root@dev-stonedb-zhangshilong1 ~]# ps -ef | grep mserver | grep -v grep

root     1372563 1372339  0 02:45 ?        00:00:11 /usr/local/bin/mserver5 --dbpath=/dbfarm/mycrack --set=merovingian_uri mapi:monetdb://dev-stonedb-zhangshilong1:50000/mycrack --set=mapi_listenaddr none --set=mapi_usock /dbfarm/mycrack/.mapi.sock --set=monet_vault_key /dbfarm/mycrack/.vaultkey --set=gdk_nr_threads 64 --set=max_clients 64 --set=sql_optimizer default_pipe

root     1373285 1372339  0 02:46 ?        00:00:10 /usr/local/bin/mserver5 --dbpath=/dbfarm/mytest --set=merovingian_uri mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest --set=mapi_listenaddr none --set=mapi_usock /dbfarm/mytest/.mapi.sock --set=monet_vault_key /dbfarm/mytest/.vaultkey --set=gdk_nr_threads 64 --set=max_clients 64 --set=sql_optimizer default_pipe

分析:

  1.  可以看出连接了两个database, 就启动了两个mserver
  2. 每个mserver管理一个不同的database

五. 对比用两个客户端连接同一个database, 查看mserver的情况

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mytest -u crack
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mytest
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>

[root@dev-stonedb-zhangshilong1 ~]# monetdbd stop /dbfarm
[root@dev-stonedb-zhangshilong1 ~]# 
[root@dev-stonedb-zhangshilong1 ~]# monetdbd start /dbfarm
[root@dev-stonedb-zhangshilong1 ~]# 
[root@dev-stonedb-zhangshilong1 ~]# ps -ef | grep mserver | grep -v grep
[root@dev-stonedb-zhangshilong1 ~]# 
[root@dev-stonedb-zhangshilong1 ~]# ps -ef | grep mserver | grep -v grep

root     1506323 1506096  0 05:47 ?        00:00:00 /usr/local/bin/mserver5 --dbpath=/dbfarm/mytest --set=merovingian_uri mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest --set=mapi_listenaddr none --set=mapi_usock /dbfarm/mytest/.mapi.sock --set=monet_vault_key /dbfarm/mytest/.vaultkey --set=gdk_nr_threads 64 --set=max_clients 64 --set=sql_optimizer default_pipe

分析:

  1. 可以看出用两个不同的客户端, 打开同一个database, 只有一个mserver来管理这个database
  2. 所以是一个mserver管理一个不同的database

六.两个客户端连接两个不同的database, 查看资源隔离情况

客户端一连接mycrack:

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mycrack
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mycrack'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>
sql>select * from sys.schemas;
+------+----------+---------------+-------+--------+
| id   | name     | authorization | owner | system |
+======+==========+===============+=======+========+
| 2000 | sys      |             2 |     3 | true   |
| 2114 | tmp      |             2 |     3 | true   |
| 6547 | json     |             3 |     3 | true   |
| 6643 | profiler |             3 |     3 | true   |
| 6832 | wlc      |             3 |     3 | true   |
| 6851 | wlr      |             3 |     3 | true   |
| 7302 | logging  |             3 |     3 | true   |
+------+----------+---------------+-------+--------+
7 tuples

sql>select * from sys.users;
+-----------+---------------+----------------+-------------+------------+-------------+--------------+--------------+
| name      | fullname      | default_schema | schema_path | max_memory | max_workers | optimizer    | default_role |
+===========+===============+================+=============+============+=============+==============+==============+
| monetdb   | MonetDB Admin |           2000 | "sys"       |          0 |           0 | default_pipe |            3 |
| .snapshot | Snapshot User |           2000 | "sys"       |          0 |           0 | default_pipe |         6831 |
+-----------+---------------+----------------+-------------+------------+-------------+--------------+--------------+
2 tuples

sql>select * from sys.roles;
+------+----------+---------+
| id   | name     | grantor |
+======+==========+=========+
|    1 | public   |       0 |
|    2 | sysadmin |       0 |
+------+----------+---------+
2 tuples

客户端二连接mytest:

[root@dev-stonedb-zhangshilong1 ~]# mclient  -d mytest -u crack
password:
Welcome to mclient, the MonetDB/SQL interactive terminal (unreleased)
Database: MonetDB v11.45.17, 'mapi:monetdb://dev-stonedb-zhangshilong1:50000/mytest'
FOLLOW US on https://twitter.com/MonetDB or https://github.com/MonetDB/MonetDB
Type \q to quit, \? for a list of available commands
auto commit mode: on
sql>
sql>select * from sys.schemas;
+------+-------------+---------------+-------+--------+
| id   | name        | authorization | owner | system |
+======+=============+===============+=======+========+
| 2000 | sys         |             2 |     3 | true   |
| 2114 | tmp         |             2 |     3 | true   |
| 6547 | json        |             3 |     3 | true   |
| 6643 | profiler    |             3 |     3 | true   |
| 6832 | wlc         |             3 |     3 | true   |
| 6851 | wlr         |             3 |     3 | true   |
| 7302 | logging     |             3 |     3 | true   |
| 7464 | mysch       |             3 |     3 | false  |
| 7465 | hack        |          7466 |     3 | false  |
| 7467 | crack       |          7468 |     3 | false  |
| 7470 | copy_schema |          7469 |     3 | false  |
| 7491 | sch_t2      |             3 |     3 | false  |
+------+-------------+---------------+-------+--------+
12 tuples

sql>select * from sys.users;
+-----------+---------------+----------------+-------------+------------+-------------+--------------+--------------+
| name      | fullname      | default_schema | schema_path | max_memory | max_workers | optimizer    | default_role |
+===========+===============+================+=============+============+=============+==============+==============+
| monetdb   | MonetDB Admin |           2000 | "sys"       |          0 |           0 | default_pipe |            3 |
| .snapshot | Snapshot User |           2000 | "sys"       |          0 |           0 | default_pipe |         6831 |
| hack      | hacker        |           7464 | "sys,mysch" |          0 |           0 | default_pipe |         7466 |
| crack     | cracker       |           7467 | "sys"       |          0 |           0 | default_pipe |         7468 |
| user1     | copy user     |           7470 | "sys"       |          0 |           0 | default_pipe |         7471 |
| user2     | copy user     |           7470 | "sys"       |          0 |           0 | default_pipe |         7472 |
+-----------+---------------+----------------+-------------+------------+-------------+--------------+--------------+
6 tuples

sql>select * from sys.roles;
+------+-----------+---------+
| id   | name      | grantor |
+======+===========+=========+
|    1 | public    |       0 |
|    2 | sysadmin  |       0 |
| 7469 | copy_role |       3 |
+------+-----------+---------+
3 tuples

分析:

  1.  可以看出除了预定义的对象外, 两个客户端连接两个database的数据完全隔离
  2. 所以mdb中的mserver和database, 其实就是一个独立的实例, 等同于一个mysqld

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1047948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android AMS——APP启动流程(三)

Android 应用启动方式主要有两种 , 冷启动和热启动。 冷启动:后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;热启动:后台有应用进程 , 不创建进程 , 直接启动 Activity ; 其实,还有一种温起动的方式,就是用户按了返回键退出应用,随后又从新启动,可是活…

JS三大运行时全面对比:Node.js vs Bun vs Deno

全文约 5100 字,预计阅读需要 15 分钟。 JavaScript 运行时是指执行 JavaScript 代码的环境。目前,JavaScript 生态中有三大运行时:Node.js、Bun、Deno。老牌运行时 Node.js 的霸主地位正受到 Deno 和 Bun 的挑战,下面就来看看这…

分析几道关于死锁的真题

以下四点是408中死锁这一节的内容,考频基本上为每年一道题,虽然一半以上的题目是关于银行家算法的不安全序列的送分题,但其中有几道题综合了这以下几个概念,如果现在不提前分析这几个概念之间的关系的话。可能考场上就是随便蒙一个…

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过命令行管理华为云云耀云服务器

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过命令行管理华为云云耀云服务器 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀云服务…

postgresql|数据库|数据库测试工具pgbench之使用

前言: 数据库是项目中的重要组件,也是一个基础的重要组件,其地位说是第一我想应该是没有什么太多问题的。 那么,数据库的设计这些方面是不用多说的,关键的第一步,主要是涉及数据库的部署方式,…

系统集成|第十章(笔记)

目录 第十章 质量管理10.1 项目质量管理概论10.2 主要过程10.2.1 规划质量管理10.2.2 实施质量保证10.2.3 质量控制 10.3 常见问题 上篇:第九章、成本管理 下篇:第十一章、人力资源管理 第十章 质量管理 10.1 项目质量管理概论 质量管理:指确…

探索古彝文AI识别技术:助力中国传统文化的传承与发扬

目录 ⭐️ 写在前面 ⭐️ 一、什么是古彝文 1.1 古彝文介绍 1.2 古彝文与其他古文字示例 1.3 古彝文的重要性 ⭐️二、AI识别技术的挑战与前景 2.1 挑战 2.2 前景 ⭐️三、合合信息AI识别技术 3.1 智能文字识别技术👍👍 3.2 古文识别应用 ⭐…

基于微信小程序的高校暑期社会实践小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

堆的原理以及实现O(lgn)

大家好,我是蓝胖子,我一直相信编程是一门实践性的技术,其中算法也不例外,初学者可能往往对它可望而不可及,觉得很难,学了又忘,忘其实是由于没有真正搞懂算法的应用场景,所以我准备出…

uCOSIII实时操作系统(重入函数,调度算法,嵌入式系统中断)

目录 可重入函数和不可重入函数: 基于优先级的调度算法: 嵌入式系统中断: 可重入函数和不可重入函数: 函数可重入是指一函数可以被多个任务调用,而不需要担心在任务切换的过程中,代码的执行会产生错误的…

实用网站合集

目录 1.工具网站合集2.技术类合集1.技术网站2.C3.计算机相关4.Java5.前端 收藏夹里有很多好用的网站,分类整理下,方便日后使用。 1.工具网站合集 阿里巴巴图标库:图标资源。pexels:壁纸、视频。unsplash:壁纸。pixabay…

基于cv2识别图像实现jd滑动块验证

这里写目录标题 出现条件:解决方案:获取滑动的距离滑动验证 本教程无任何意向,纯纯的技术娱乐 虽然小概率出现问题,加入重试机制后,基本没出现过问题 注意:这里获取的距离与实际的距离不相同,本…

mysql面试题1:MySQL有哪些常见存储引擎?MySQL默认是哪个存储引擎?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有哪些常见存储引擎? MySQL有以下几种常见的存储引擎&#xff1…

智慧公厕自动化保洁系统,让公共厕所实现7*24 持续整洁

随着科技的不断进步,越来越多的创新方案应用于各个领域,公共厕所的智慧化也不例外。本文重点介绍智慧公厕源头厂家广州中期科技有限公司,大量案例项目中所使用的智慧公厕自动化保洁系统,能有效地节省人力,并保持公共厕…

抽象轻松的java——简单的购物车系统

public class GoodsShop {public static void main(String[] args) {System.out.println("欢迎来到购物车管理系统");obj [] arr new obj[50];//obj[50]为购物车的数量上限obj obj new obj();//调用objScanner scanner new Scanner(System.in);//输入while (true)…

【C++14保姆级教程】数位分割符、函数返回值推导

文章目录 前言一、数位分割符(Digit Separators)1.1 数位分割符是什么?1.2 作用1.3 示例代码11.4 示例代码21.5 数位分隔符的优势 二、函数返回值推导(Function Return Type Deduction)2.1 函数返回值推导是什么&#…

[NOIP2011 提高组] 铺地毯

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n n n 张地毯,编号从 1 1 1 到 n n n。现在将这些地毯按照编号从小…

【LeetCode热题100】--142.环形链表II

142.环形链表II 使用哈希表: 遍历链表中的每个节点,并将它记录下来,一旦遇到了此前遍历过的节点,就可以判定链表中存在环 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* …

Unity Urp无线延申的网格效果

无线延申的网格 该项目必须是再Urp项目 shader代码实现 Shader "Unlit/infTutorial1" {Properties{_Alpha ("Alpha", Range(0, 0.5)) 0.5}SubShader{Tags{"RenderPipeline""UniversalRenderPipeline""RenderType""…

操作系统监控工具

在当今复杂、动态的网络环境中,服务器管理员根据其要求在各种操作系统上工作,操作系统是管理硬件和软件资源的基本系统软件,它是硬件与您运行的不同应用程序之间的接口,保持操作系统更新至关重要,最重要的是&#xff0…