自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

數(shù)據(jù)庫 MySQL MariaDB PostgreSQL
多年來,MySQL和PostgreSQL是相互競爭的數(shù)據(jù)庫,但這些數(shù)據(jù)庫是針對(duì)不同的用戶。在我看來PostgreSQL服務(wù)于專業(yè)用戶,而MySQL在Web開發(fā)人員中很受歡迎。但是,在Oracle接手MySQL之后,我覺得MySQL的明星色彩已經(jīng)有點(diǎn)褪色了。

譯者注:作者將PostgreSQL與MariaDB和MySQL進(jìn)行對(duì)比,在數(shù)據(jù)類型處理,數(shù)據(jù)結(jié)構(gòu)和NULL處理三方面體現(xiàn)出PostgreSQL的優(yōu)勢(shì),同時(shí)幫助開發(fā)者更好地選擇適合自己的數(shù)據(jù)庫。

以下為譯文:

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

多年來,MySQL和PostgreSQL是相互競爭的數(shù)據(jù)庫,但這些數(shù)據(jù)庫是針對(duì)不同的用戶。在我看來PostgreSQL服務(wù)于專業(yè)用戶,而MySQL在Web開發(fā)人員中很受歡迎。但是,在Oracle接手MySQL之后,我覺得MySQL的明星色彩已經(jīng)有點(diǎn)褪色了。

自從MariaDB推出以來,我個(gè)人覺得這項(xiàng)技術(shù)還沒有真正完成,但用戶依舊會(huì)使用MySQL/MariaDB,并且很有興趣地將PostgreSQL與這些技術(shù)進(jìn)行比較。許多人對(duì)“PostgreSQL is just better”(PostgreSQL更勝一籌)這樣的話表示不同意。這樣的爭論往往是不明智的,但PostgreSQL社區(qū)確實(shí)能夠做得更好。所以應(yīng)該提出一些想法,為什么使用PostgreSQL比MySQL/MariaDB更合適。

這篇文章的目的是列舉一些例子,來說明在技術(shù)層面上為什么你可能更應(yīng)該使用PostgreSQL。但要注意:這個(gè)帖子只是說明一些“最好的”特點(diǎn),并不是一個(gè)完整的列表,然而,這些應(yīng)該足以讓人們做出決策。

PostgreSQL與MySQL / MariaDB:數(shù)據(jù)類型處理

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

在這里看到的是PostgreSQL錯(cuò)誤,因?yàn)樵噲D放入表中的數(shù)據(jù)并不符合列的數(shù)據(jù)類型,而MySQL / MariaDB則會(huì)悄悄地更改你的數(shù)據(jù)。是的,MySQL/MariaDB確實(shí)發(fā)出了警告,但過了一段時(shí)間后,表中的數(shù)據(jù)就不是最初的數(shù)據(jù)了。

為什么這很重要?假設(shè)你中了一百萬的彩票,但你最終只得到9999.99,只因?yàn)閿?shù)據(jù)變化極少,所以不幸的是根本沒有人注意到。你會(huì)生氣嗎?我會(huì)的。在這個(gè)例子中,PostgreSQL所顯示的操作是正確的,原因有很多:

  • 最可能的原因是定義了列的方式。
  • 警告不等同于錯(cuò)誤。
  • 存儲(chǔ)數(shù)據(jù)不是 “容忍”——它更關(guān)注正確性。
  • 如果你對(duì)著自己開槍,那也就沒有必要去警告你,因?yàn)?ldquo;你現(xiàn)在可能已經(jīng)死了”——所以最好是在一開始就阻止這種事情的發(fā)生。

經(jīng)驗(yàn)總結(jié):PostgreSQL非常重視數(shù)據(jù)結(jié)構(gòu)。

PostgreSQL vs MySQL / MariaDB:謹(jǐn)慎對(duì)待現(xiàn)有數(shù)據(jù)

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

 

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

 


再強(qiáng)調(diào)一遍,MySQL / MariaDB是會(huì)更改你的數(shù)據(jù)的。請(qǐng)注意,插入到表中的原始值為1234.5678,但現(xiàn)在得到9.99。所以以后你會(huì)開始關(guān)注細(xì)微的差別了嗎?如果這是你的銀行賬戶?你會(huì)在乎嗎?如果這個(gè)數(shù)據(jù)庫只是為了保持運(yùn)行而不解決問題——那么你還會(huì)繼續(xù)相信它嗎,也許是時(shí)候需要找到一個(gè)替代品了。如果你的生活依賴于數(shù)據(jù),你會(huì)接受一張數(shù)據(jù)表悄無聲音的改變嗎?也許我太保守了,所以我不會(huì)接受。

 

PostgreSQL達(dá)到了我個(gè)人對(duì)數(shù)據(jù)庫的期望。它會(huì)報(bào)出錯(cuò)誤,并告訴我們數(shù)據(jù)是不能被更改的,因?yàn)閿?shù)據(jù)是需要被保護(hù)的。如果你想要更改表中的數(shù)據(jù)(以防新規(guī)則被違反),你必須明確地告訴PostgreSQL你想要什么:

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

在這種情況下,我們會(huì)告知PostgreSQL如何進(jìn)行處理數(shù)據(jù)。PostgreSQL并沒有很智能(也不像MySQL / MariaDB這樣的失敗),它不會(huì)去嘗試做一些有趣的事情——它只是做你想做的事情,以及做一些對(duì)你的數(shù)據(jù)有好處的事情。

PostgreSQL與MySQL / MariaDB:NULL處理很重要

為什么我更喜歡PostgreSQL而不是MariaDB/MySQL

你還記得“id”列上有一個(gè)非空約束嗎?MySQL / MariaDB并不關(guān)心這個(gè),只是將值設(shè)為0。但是,0和NULL絕對(duì)不是一回事。NULL的意思是“未定義”或“我們不知道的值”。這其實(shí)很有道理:如果你不知道你口袋里有多少錢,那也不意味著你的口袋是空的。如果你不知道你喝了多少啤酒,這也并不意味著你的血液里有“零”酒精——你實(shí)際上可能剛剛從椅子上摔下來。

PostgreSQL仔細(xì)區(qū)分了0、空字符串和NULL。這些都是不一樣的,PostgreSQL總是會(huì)重視你的約束條件。

選擇數(shù)據(jù)庫

我在PostgreSQL和MySQL/MariaDB之間的選擇是毫無疑問的,對(duì)于我個(gè)人來說,MySQL不會(huì)是我的選擇。然而,這是一個(gè)自由的世界,人們可以自己做決定,希望你們能做出明智的決定。

責(zé)任編輯:未麗燕 來源: 程序師
相關(guān)推薦

2023-01-11 12:14:50

NeoVimVim開發(fā)

2023-09-14 08:00:00

基于主干的開發(fā)分支模型

2019-04-19 11:56:48

框架AI開發(fā)

2017-11-30 15:25:04

EclipseGo項(xiàng)目

2012-10-10 16:52:21

CentOSDebianUbuntu

2012-04-04 22:07:12

Android

2023-07-04 16:28:23

2021-03-26 11:50:28

Linuxexals

2019-10-23 15:53:16

JavaScript可選鏈對(duì)象

2009-06-04 17:33:08

EJB 3.1EJB 3.0

2019-08-28 10:53:35

JavaScriptOptional Ch代碼

2012-05-18 10:21:30

程序員CC++

2013-03-25 10:14:18

NginxApache

2021-02-25 07:24:35

pnpm包管理器前端

2021-04-18 18:12:07

Linux開發(fā)操作系統(tǒng)

2012-03-06 20:51:04

iOS

2025-03-04 00:25:55

Go開發(fā)者切片

2021-03-16 07:56:12

開發(fā)

2025-01-15 09:06:58

CSSRegEx前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)