两个数据库的问题(r11笔记第4天)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 下午一个偶然的机会听到了一首歌,让我一下子想起了在泰国出差的日子。这首歌曲让我我电脑前工作很长时间,在深夜,因为东南亚时差的原因,我感觉我好像多活了一个小时。有时候醒来是在沙发上,有时候醒来发现灯还没关,生活就是在这种随意而又忙碌的感觉下流逝。

下午一个偶然的机会听到了一首歌,让我一下子想起了在泰国出差的日子。这首歌曲让我我电脑前工作很长时间,在深夜,因为东南亚时差的原因,我感觉我好像多活了一个小时。有时候醒来是在沙发上,有时候醒来发现灯还没关,生活就是在这种随意而又忙碌的感觉下流逝。

歌曲(Long Lost Penpal)推荐给大家,如果你看了歌词,会发现内容还是蛮伤感的,时光一去不复返。

今天来和大家说两个话题,是关于多线程,多进程的,在数据库的技术架构中,这两方面总是核心中的核心。想想现在的开源数据库,商业数据库,都大抵如此。

为什么MySQL是单进程多线程,PostgreSQL,Oracle是多进程多线程?

我想大家在学习的时候都会有类似的问题,但是这类问题好像书本中是不会得到答案的,因为很多书的目标是告诉你结果而非告诉你更多的原因。

这类问题问起来估计很多人也难以回答,在知乎上我发现了这个问题,而且看到了很多非常赞的回答,所以借花献佛,拿来主义。

问题的回答来自于链接:https://www.zhihu.com/question/20303558

哼哈二匠:

诸如Oracle这种商业数据库,基本都支持多种Process Models, Oracle默认是多进程。
根据Understanding MySQL Internals所说, MySQL一开始是Solaris上的 :

Thus in May of 1996 MySQL version 1.0 was released to a limited group, followed by a public release in October 1996 of version 3.11.1. The initial public release provided only a binary distribution for Solaris. A month later, the source and the Linux binary were released.

这本书也提及了,为什么MySQL用多线程:

Just as a good rider becomes one with the horse, Monty(MySQL author) had become one with the computer. It pained him to see system resources wasted. He felt confident enough to be able to write virtually bug-free code, deal with the concurrency issues presented by threads, and even work with s small stack. What an exciting challenge! Needless to say, he chose threads.

Postgres的原因可以在The design of Postgres中找到:

However, this approach requires that a fairly complete special-purpose operating system be built. In contrast, the process-per-user model is simpler to implement but will not perform as well on most conventional operating systems. We decided after much soul searching to implement POSTGRES using a process-per-user model architecture because of our limited programming resources.

总而言之,最根本的原因就如方圆说的,主要是当年操作系统对线程支持不给力,而MySQL是特例,因为开发者喜欢挑战(不过事实上,那个时候的线程支持已经基本完善了。MySQL后于Oracle和POSTGRES)

至于如果要了解不同model间的优劣,强烈推荐Anatomy of a Database System第二章Process Models.

方圆

ORACLE在windows上也是多线程。
传统的unix系统,早期没有提供多线程,只有多进程。linux是最近的版本才加入多线程支持,以前一直都是多进程。windows很早就支持多线程,本地应用大部分也是多线程。因此oracle在windows上一直都是多线程,在unix上才是多进程。多进程的好处是,一个进程崩溃不会影响其他进程,多线程的好处是不需要共享内存这样的手段来访问数据库缓冲区。mysql很可能是从windows发站起来的,pg和oracle都是最早从unix发站起来的,因此前者是多线程,后两者是多进程。


其实这两个答案看完,可能会有模棱两可的答案,但是我们可以吸取里面的精华。

而由第一个问题衍生出第二个问题那就是

为什么Oracle在Windows上是多线程,而在Linux上是多进程的?

估计这个问题抛出来,会难到一大片数据库爱好者,这个改怎么解释呢,而且感觉也确实是无从说起,同一个数据库的两种看似截然不同的实现。

这个答案在知乎上没有看到满意的答案,我在asktom上看到了,因为有人在上面问了tom同样的问题,他的回答有两个,第一个很委婉,第二个很直接。

委婉的回答:
other then linux is a much cooler OS -- no differnce.
That is the key fundemental thing about Oracle -- we are the same on all platforms. Write to us and you are portable.
Write OS specific code and you are not.
Your client application, whatever it is, will not know if you are on linux or windows or a mainframe.
大体的意思是:两者没什么差别,平台的差异对应用是透明的,只是技术的实现差异。

当然不久还有网友问了类似的问题,tom就回答的更直白了。我喜欢这种直白。

直接的回答:

windoze is an os that prefers threads.
linux is not.
we do threads on windows.
we do processes on unix
we do whatever the underlying os "likes"

我再抛出一个问题,MySQL的存储引擎InnoDB是基于索引组织表(IOT),MyISAM基于heap。为什么?

而Oracle却几乎清一色都是基于heap,也支持IOT

PostgreSQL却清一色都是heap,却不不支持IOT.

我们后面找个机会来看看答案,searching...


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Go 数据库
数据库的实现【笔记】
数据库的实现【笔记】
12 0
|
1月前
|
数据库
数据库设计【笔记】
数据库设计【笔记】
12 0
|
2月前
|
SQL 存储 数据库
【数据库SQL server】自学终极笔记
【数据库SQL server】自学终极笔记
94 0
|
3月前
|
SQL Dart 数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
185 0
|
3月前
|
SQL Java 数据库连接
(数据库链接池)spring内容复习7月16日笔记
(数据库链接池)spring内容复习7月16日笔记
15 0
|
4月前
|
SQL 存储 数据库
Flask狼书笔记 | 05_数据库
5 数据库 这一章学习如何在Python中使用DBMS(数据库管理系统),来对数据库进行管理和操作。本书使用SQLite作为示例。 注:按下Ctrl+F5,或Shift+F5可以清除浏览器缓存。 5.1 数据库的分类
34 0
|
4月前
|
存储 小程序 前端开发
前端知识笔记(四十六)———什么是小程序,什么是数据库
前端知识笔记(四十六)———什么是小程序,什么是数据库
21 0
|
4月前
|
运维 关系型数据库 MySQL
阿里大牛的595页MySQL笔记,透彻即系数据库、架构与运维
数据库运维的变革,经历从手工造到脚本化、系统化、平台化、智能化的转变,逐步实现DBA对数据库的规范化、自动化、自助化、可视化、智能化、服务化管理,从而保障数据库的安全、稳定、高效运行。
|
6月前
|
机器学习/深度学习 存储 算法
系统分析师笔记-数据库
系统分析师笔记-数据库
|
6月前
|
SQL Java 数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库

热门文章

最新文章