中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

建一個公司網(wǎng)站網(wǎng)站營銷策劃

建一個公司網(wǎng)站,網(wǎng)站營銷策劃,中國建設(shè)教育協(xié)會報名網(wǎng)站,工作內(nèi)容如何創(chuàng)造價值引言 關(guān)系數(shù)據(jù)模型以行和列的表格形式組織數(shù)據(jù),在數(shù)據(jù)庫管理工具中占主導(dǎo)地位。今天還有其他數(shù)據(jù)模型,包括NoSQL和NewSQL,但是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)仍然占主導(dǎo)地位用于存儲和管理全球數(shù)據(jù)。 本文比較了三種實(shí)現(xiàn)最…

引言

關(guān)系數(shù)據(jù)模型以行和列的表格形式組織數(shù)據(jù),在數(shù)據(jù)庫管理工具中占主導(dǎo)地位。今天還有其他數(shù)據(jù)模型,包括NoSQL和NewSQL,但是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)仍然占主導(dǎo)地位用于存儲和管理全球數(shù)據(jù)。
本文比較了三種實(shí)現(xiàn)最廣泛的開源RDBMS:SQLite、MySQL和PostgreSQL。具體來說,本章將探討每種RDBMS使用的數(shù)據(jù)類型、它們的優(yōu)缺點(diǎn),以及它們最適合優(yōu)化的情況。

數(shù)據(jù)庫管理系統(tǒng)簡介

數(shù)據(jù)庫是對信息或數(shù)據(jù)進(jìn)行邏輯建模的集群。另一方面,數(shù)據(jù)庫管理系統(tǒng) (DBMS)是與數(shù)據(jù)庫交互的計算機(jī)程序。DBMS允許你控制對數(shù)據(jù)庫的訪問、寫入數(shù)據(jù)、執(zhí)行查詢以及執(zhí)行與數(shù)據(jù)庫管理相關(guān)的任何其他任務(wù)。
雖然數(shù)據(jù)庫管理系統(tǒng)通常被稱為“數(shù)據(jù)庫”,但這兩個術(shù)語是不可互換的。數(shù)據(jù)庫可以是任何數(shù)據(jù)集合,而不僅僅是存儲在計算機(jī)上的數(shù)據(jù)。相比之下,DBMS特指允許您與數(shù)據(jù)庫交互的軟件。

所有數(shù)據(jù)庫管理系統(tǒng)都有一個底層模型,該模型對數(shù)據(jù)的存儲和訪問方式進(jìn)行結(jié)構(gòu)化。關(guān)系數(shù)據(jù)庫管理系統(tǒng)是一種采用關(guān)系數(shù)據(jù)模型的DBMS。在這種關(guān)系模型中,數(shù)據(jù)被組織成表。表,在RDBMS的上下文中,更正式的叫法是關(guān)系(relations。關(guān)系是一組元組(tuples 的集合,它們是表中的行,每個元組共享一組屬性(attributes,這些屬性是表中的列:

Diagram example showing how relations, tuples, and attributes relate to one another

大多數(shù)關(guān)系型數(shù)據(jù)庫使用結(jié)構(gòu)化查詢語言 (SQL)來管理和查詢數(shù)據(jù)。然而,許多關(guān)系數(shù)據(jù)庫使用自己的SQL方言,這可能有一定的限制或擴(kuò)展。這些擴(kuò)展通常包含額外的特性,允許用戶執(zhí)行比標(biāo)準(zhǔn)SQL更復(fù)雜的操作。

注意: 術(shù)語“標(biāo)準(zhǔn)SQL”在本指南中出現(xiàn)多次。SQL標(biāo)準(zhǔn)由美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)、國際標(biāo)準(zhǔn)化組織(ISO)和國際電工委員會(IEC)共同維護(hù)。當(dāng)本文提到“標(biāo)準(zhǔn)SQL”或“SQL標(biāo)準(zhǔn)”時,它指的是這些機(jī)構(gòu)發(fā)布的SQL標(biāo)準(zhǔn)的當(dāng)前版本。

需要注意的是,完整的SQL標(biāo)準(zhǔn)既龐大又復(fù)雜:完整的核心SQL:2011要求179個功能。正因?yàn)槿绱?#xff0c;大多數(shù)RDBMS并不支持整個標(biāo)準(zhǔn),盡管有些RDBMS確實(shí)比其他RDBMS更接近于完全遵從標(biāo)準(zhǔn)。

數(shù)據(jù)類型和約束

每一列都有一個數(shù)據(jù)類型,它規(guī)定了該列中允許哪些類型的項(xiàng)。不同的RDBMS實(shí)現(xiàn)不同的數(shù)據(jù)類型,這些類型并不總是可以直接互換。一些常見的數(shù)據(jù)類型包括日期、字符串、整數(shù)和布爾值。

在數(shù)據(jù)庫中存儲整數(shù)比在表中存儲數(shù)字要微妙得多。數(shù)值數(shù)據(jù)類型可以是有符號signed),這意味著它們可以表示正數(shù)和負(fù)數(shù),也可以是無符號unsigned),這意味著它們只能表示正數(shù)。例如,MySQL的tinyint數(shù)據(jù)類型可以保存8位數(shù)據(jù),相當(dāng)于256個可能的值。這個數(shù)據(jù)類型的有符號范圍是-128 ~ 127,無符號范圍是0 ~ 255。

能夠控制哪些數(shù)據(jù)可以進(jìn)入數(shù)據(jù)庫是很重要的。有時,數(shù)據(jù)庫管理員會對表施加約束constraint),以限制可以輸入的值。一個約束通常應(yīng)用于一個特定的列,但一些約束也可以應(yīng)用于整個表。下面是一些SQL中常用的約束:

  • UNIQUE:將此約束應(yīng)用于列,確保該列中沒有兩個元素是相同的。
  • NOT NULL:這個約束確保列不包含任何NULL元素。
  • PRIMARY KEYUNIQUENOT NULL的組合,PRIMARY KEY約束確保列中沒有NULL條目,并且每個條目都是不同的。
  • FOREIGN KEYFOREIGN KEY是一張表中的一列,指向另一張表的PRIMARY KEY。此約束用于將兩個表鏈接在一起。FOREIGN KEY列的條目必須已經(jīng)存在于父PRIMARY KEY列中,這樣寫進(jìn)程才能成功。
  • CHECK:這個約束限制了列可以輸入的值的范圍。例如,如果這一列是手機(jī)號碼,則可以在郵政編碼列上添加一個CHECK約束,使條目只允許在13位數(shù)。

現(xiàn)在我們已經(jīng)大體上介紹了關(guān)系數(shù)據(jù)庫管理系統(tǒng),讓我們轉(zhuǎn)到本文將介紹的三個開源關(guān)系數(shù)據(jù)庫中的第一個:SQLite。

SQLite

SQLite是一個自包含的、基于文件的、完全開源的RDBMS,以其可移植性、可靠性和即使在低內(nèi)存環(huán)境中也具有強(qiáng)大的性能而聞名。其交易符合ACID標(biāo)準(zhǔn),即使在系統(tǒng)崩潰或經(jīng)歷停電的情況下也是如此。
SQLite項(xiàng)目的網(wǎng)站將其描述為無服務(wù)器數(shù)據(jù)庫。大多數(shù)關(guān)系型數(shù)據(jù)庫引擎都實(shí)現(xiàn)為服務(wù)器進(jìn)程,程序通過中繼請求的進(jìn)程間通信與主機(jī)服務(wù)器進(jìn)行通信。相比之下,SQLite允許任何訪問數(shù)據(jù)庫的進(jìn)程直接讀寫數(shù)據(jù)庫磁盤文件。這簡化了SQLite的設(shè)置過程,因?yàn)樗巳魏闻渲梅?wù)器進(jìn)程的需要。同樣,使用SQLite數(shù)據(jù)庫的程序也不需要配置:它們只需要訪問磁盤。
SQLite是免費(fèi)開源軟件,使用它不需要特殊的許可證。然而,該項(xiàng)目確實(shí)提供了幾個擴(kuò)展-每個都需要一次性付費(fèi)-以幫助壓縮和加密。此外,該項(xiàng)目還提供各種商業(yè)支持包,每個包都需要支付年費(fèi)。

SQLite支持的數(shù)據(jù)類型

SQLite允許多種數(shù)據(jù)類型,數(shù)據(jù)類型如下:

數(shù)據(jù)類型說明
null包括任何NULL
integer有符號整數(shù),存儲在1、2、3、4、6或8個字節(jié)中,具體取決于值的大小。
real真實(shí)的或浮點(diǎn)值,存儲為8字節(jié)浮點(diǎn)數(shù)。
text使用數(shù)據(jù)庫編碼存儲的文本字符串,可以是UTF-8、UTF-16 BE或UTF-16 LE。
blob任何數(shù)據(jù)blob,每個blob完全按照輸入的方式存儲。
在SQLite的上下文中,術(shù)語“存儲類”和“數(shù)據(jù)類型”是可以互換的。如果您想了解有關(guān)SQLite的數(shù)據(jù)類型和SQLite類型關(guān)聯(lián)的更多信息,請查看SQLite的官方文檔。

SQLite的優(yōu)點(diǎn)

  • 占用空間小:SQLite庫是非常輕量級的。盡管它使用的空間因安裝它的系統(tǒng)而異,但它可以占用不到600KiB的空間。此外,它是完全自包含的,這意味著你不需要在系統(tǒng)上安裝任何外部依賴即可使SQLite工作。
  • 用戶友好:SQLite有時被描述為“零配置”數(shù)據(jù)庫,可以開箱即用。SQLite不作為服務(wù)器進(jìn)程運(yùn)行,這意味著它永遠(yuǎn)不需要停止、啟動或重啟,也不帶任何需要管理的配置文件。這些特性有助于簡化從安裝SQLite到將其與應(yīng)用程序集成的過程。
  • 可移植性:不像其他數(shù)據(jù)庫管理系統(tǒng)通常將數(shù)據(jù)存儲為大量獨(dú)立文件,整個SQLite數(shù)據(jù)庫存儲在單個文件中。該文件可以位于目錄層次結(jié)構(gòu)中的任何位置,并可以通過可移動媒體或文件傳輸協(xié)議共享。

SQLite的缺點(diǎn)

  • 有限的并發(fā)性:盡管多個進(jìn)程可以同時訪問和查詢SQLite數(shù)據(jù)庫,但在任何給定的時間內(nèi),只有一個進(jìn)程可以對數(shù)據(jù)庫進(jìn)行更改。這意味著雖然SQLite比大多數(shù)其他嵌入式數(shù)據(jù)庫管理系統(tǒng)支持更大的并發(fā)性,但它不能像MySQL或PostgreSQL這樣的客戶端/服務(wù)器RDBMS那樣支持那么多。
  • 無用戶管理:數(shù)據(jù)庫系統(tǒng)通常支持用戶,或者通過預(yù)定義的對數(shù)據(jù)庫和表的訪問權(quán)限來管理連接。因?yàn)镾QLite直接讀寫普通磁盤文件,所以唯一適用的訪問權(quán)限是底層操作系統(tǒng)的典型訪問權(quán)限。這使得SQLite對于需要多個具有特殊訪問權(quán)限的用戶的應(yīng)用程序來說是一個糟糕的選擇。
  • 安全性:在某些情況下,使用服務(wù)器的數(shù)據(jù)庫引擎可以提供比無服務(wù)器數(shù)據(jù)庫(如SQLite)更好的保護(hù),避免客戶端應(yīng)用程序中的bug。例如,客戶端中的游離指針不會破壞服務(wù)器上的內(nèi)存。另外,由于服務(wù)器是單一持久進(jìn)程,因此客戶機(jī)-服務(wù)器數(shù)據(jù)庫可以比無服務(wù)器數(shù)據(jù)庫更精確地控制數(shù)據(jù)訪問。這允許更細(xì)粒度的鎖和更好的并發(fā)。

什么時候可以用SQLite?

  • 嵌入式應(yīng)用程序:對于需要可移植性且不需要未來擴(kuò)展的應(yīng)用程序,SQLite是一個很好的數(shù)據(jù)庫選擇。例如單用戶本地應(yīng)用程序、移動應(yīng)用程序或游戲。
  • 單機(jī)程序:在應(yīng)用程序需要直接讀寫文件到磁盤的情況下,使用SQLite可以獲得SQL帶來的額外功能和簡單性。
  • 測試:對于許多應(yīng)用來說,使用使用額外服務(wù)器進(jìn)程的DBMS來測試它們的功能可能是多余的。SQLite具有內(nèi)存模式,可以用于快速運(yùn)行測試,而無需實(shí)際數(shù)據(jù)庫操作的開銷,這使它成為測試的理想選擇。

什么時候不能使用SQLite?

  • 處理大量數(shù)據(jù):只要磁盤驅(qū)動器和文件系統(tǒng)也支持?jǐn)?shù)據(jù)庫的大小要求,SQLite在技術(shù)上可以支持最大140TB的數(shù)據(jù)庫。然而,SQLite網(wǎng)站建議任何接近1TB的數(shù)據(jù)庫都應(yīng)該放在一個集中式的客戶機(jī)-服務(wù)器數(shù)據(jù)庫中,因?yàn)檫@種大小或更大的SQLite數(shù)據(jù)庫將很難管理。
  • 高寫容量:SQLite在任何給定的時間只允許一個寫操作發(fā)生,這極大地限制了它的吞吐量。如果您的應(yīng)用程序需要大量寫操作或多個并發(fā)寫入器,那么SQLite可能無法滿足您的需求。
  • 需要網(wǎng)絡(luò)訪問:因?yàn)镾QLite是一個無服務(wù)器數(shù)據(jù)庫,它不提供對其數(shù)據(jù)的直接網(wǎng)絡(luò)訪問。這種訪問內(nèi)置在應(yīng)用程序中。如果SQLite中的數(shù)據(jù)位于與應(yīng)用程序不同的機(jī)器上,它將需要一個高帶寬的引擎到磁盤的網(wǎng)絡(luò)連接。這是一種昂貴且低效的解決方案,在這種情況下,客戶端-服務(wù)器DBMS可能是更好的選擇。

MySQL數(shù)據(jù)庫

根據(jù)DB-Engines排名,從2012年開始跟蹤數(shù)據(jù)庫流行程度以來,MySQL一直是最受歡迎的開源RDBMS。它是一個功能豐富的產(chǎn)品,為世界上許多最大的網(wǎng)站和應(yīng)用程序提供支持,包括阿里巴巴、騰訊、Facebook、Netflix和Spotify。開始使用MySQL是相對簡單的,這在很大程度上要感謝它的詳盡的文檔和大型的開發(fā)者社區(qū),以及豐富的MySQL相關(guān)在線資源。
MySQL的設(shè)計追求的是速度和可靠性,但代價是完全遵循標(biāo)準(zhǔn)SQL。MySQL開發(fā)人員不斷地朝著遵循標(biāo)準(zhǔn)SQL的方向努力,但它仍然落后于其他SQL實(shí)現(xiàn)。然而,它確實(shí)提供了各種SQL模式和擴(kuò)展,使其更接近合規(guī)性。
與使用SQLite的應(yīng)用程序不同,使用MySQL數(shù)據(jù)庫的應(yīng)用程序通過一個單獨(dú)的守護(hù)進(jìn)程訪問它。因?yàn)榉?wù)器進(jìn)程位于數(shù)據(jù)庫和其他應(yīng)用程序之間,所以它可以更好地控制誰有權(quán)訪問數(shù)據(jù)庫。
MySQL激發(fā)了大量的第三方應(yīng)用程序、工具和集成庫,這些應(yīng)用程序、工具和庫擴(kuò)展了MySQL的功能,使其更易于使用。這些更廣泛使用的第三方工具有phpMyAdmin, DBeaver和HeidiSQL。

MySQL支持的數(shù)據(jù)類型

MySQL的數(shù)據(jù)類型可以分為三類:數(shù)值類型、日期和時間類型以及字符串類型。

數(shù)值類型

數(shù)據(jù)類型說明
tinyint非常小的整數(shù)。這個數(shù)值類型的有符號范圍是-128到127,而無符號范圍是0到255。
smallint小整數(shù)。此數(shù)值類型的有符號范圍為-32768到32767,而無符號范圍為0到65535。
mediumint中等大小的整數(shù)。此數(shù)值數(shù)據(jù)類型的有符號范圍為-8388608到8388607,而無符號范圍為0到16777215。
int、integer正常大小的整數(shù)。此數(shù)字?jǐn)?shù)據(jù)類型的有符號范圍是-2147483648到2147483647,而無符號范圍是0到4294967295。
bigint大整數(shù)。此數(shù)字?jǐn)?shù)據(jù)類型的有符號范圍是-9223372036854775808到9223372036854775807,而無符號范圍是0到18446744073709551615。
float小(單精度)浮點(diǎn)數(shù)。
doubledouble precision、real正常大小(雙精度)浮點(diǎn)數(shù)。
dec、decimalfixed、numeric一個壓縮的定點(diǎn)數(shù)。此數(shù)據(jù)類型的條目的顯示長度在創(chuàng)建列時定義,并且每個條目都遵循該長度。
boolboolean布爾值是一種只有兩個可能值的數(shù)據(jù)類型,通常是?true?或?false?。
bit一種位值類型,您可以為其指定每個值的位數(shù),從1到64。

日期和時間類型

數(shù)據(jù)類型說明
date日期,表示為?YYYY-MM-DD?。
datetime顯示日期和時間的時間戳,顯示為?YYYY-MM-DD HH:MM:SS?。
timestamp時間戳,表示自Unix紀(jì)元(1970年1月1日00:00:00)以來的時間量。
time一天中的時間,顯示為?HH:MM:SS?。
year以2位或4位數(shù)格式表示的年份,默認(rèn)為4位數(shù)。

字符串類型

數(shù)據(jù)類型說明
char固定長度的字符串;這種類型的條目在右邊用空格填充,以在存儲時滿足指定的長度。
varchar可變長度的字符串。
binary類似于?char?類型,但它是指定長度的二進(jìn)制字節(jié)串,而不是非二進(jìn)制字符串。
varbinary類似于?varchar?類型,但它是長度可變的二進(jìn)制字節(jié)串,而不是非二進(jìn)制字符串。
blob最大數(shù)據(jù)長度為65535(2^16 - 1)字節(jié)的二進(jìn)制字符串。
tinyblob最大數(shù)據(jù)長度為255(2^8 - 1)字節(jié)的?blob?列。
mediumblob最大數(shù)據(jù)長度為16777215(2^24 - 1)字節(jié)的?blob?列。
longblob最大數(shù)據(jù)長度為4294967295(2^32 - 1)字節(jié)的?blob?列。
text最大長度為65535(2^16 - 1)個字符的字符串。
tinytext最大長度為255(2^8 - 1)個字符的?text?列。
mediumtext最大長度為16777215(2^24 - 1)個字符的?text?列。
longtext最大長度為4294967295(2^32 - 1)個字符的?text?列。
enum枚舉,它是一個字符串對象,從創(chuàng)建表時聲明的值列表中獲取單個值。
set與枚舉類似,一個字符串對象,可以有零個或多個值,每個值必須從創(chuàng)建表時指定的允許值列表中選擇。

MySQL的優(yōu)勢

  • 受歡迎程度和易用性:作為世界上最受歡迎的數(shù)據(jù)庫系統(tǒng)之一,不乏有使用MySQL經(jīng)驗(yàn)的數(shù)據(jù)庫管理員。同樣,關(guān)于如何安裝和管理MySQL數(shù)據(jù)庫,有大量的紙質(zhì)文檔和在線文檔。這包括許多第三方工具——如phpMyAdmin——旨在簡化使用數(shù)據(jù)庫的過程。
  • 安全性:MySQL安裝了一個腳本,通過設(shè)置安裝的密碼安全級別,定義root用戶的密碼,刪除匿名帳戶,以及刪除默認(rèn)情況下所有用戶都可以訪問的測試數(shù)據(jù)庫,來幫助您提高數(shù)據(jù)庫的安全性。另外,與SQLite不同的是,MySQL支持用戶管理,并允許您在每個用戶的基礎(chǔ)上授予訪問權(quán)限。
  • 速度:通過選擇不實(shí)現(xiàn)SQL的某些特性,MySQL開發(fā)人員可以優(yōu)先考慮速度。雖然最近的基準(zhǔn)測試表明,PostgreSQL等其他rdbms在速度方面可以與MySQL相媲美,或者至少接近MySQL,但MySQL仍然被認(rèn)為是一種非??斓臄?shù)據(jù)庫解決方案。
  • 復(fù)制:MySQL支持多種不同類型的復(fù)制,通過在兩個或多個主機(jī)之間共享信息來提高可靠性、可用性和容錯性。這對于建立數(shù)據(jù)庫備份解決方案或水平擴(kuò)展數(shù)據(jù)庫很有幫助。

MySQL的缺點(diǎn)

  • 已知的限制:因?yàn)镸ySQL的設(shè)計目標(biāo)是速度和易用性,而不是完全符合SQL規(guī)范,所以它在功能上有一定的限制。例如,它缺乏對FULL JOIN子句的支持。
  • 許可和專有特性:MySQL是一個雙許可的軟件,它有一個免費(fèi)和開源的社區(qū)版本,在GPLv2許可下發(fā)布,還有幾個付費(fèi)的商業(yè)版本,在專有許可下發(fā)布。因此,一些功能和插件只能在專有版本中使用。
  • 開發(fā)速度慢:自從MySQL項(xiàng)目在2008年被Sun公司收購,2009年又被Oracle公司收購以來,用戶一直抱怨數(shù)據(jù)庫管理系統(tǒng)的開發(fā)進(jìn)程明顯慢了下來,因?yàn)樯鐓^(qū)不再有機(jī)構(gòu)來快速應(yīng)對問題和實(shí)施更改。

什么時候可以使用MySQL

  • 分布式操作:MySQL的復(fù)制支持使其成為分布式數(shù)據(jù)庫設(shè)置的一個很好的選擇,例如primary-secondary或primary-primary架構(gòu)。
  • 網(wǎng)站和web應(yīng)用程序:MySQL支持互聯(lián)網(wǎng)上的許多網(wǎng)站和應(yīng)用程序。這在很大程度上要?dú)w功于MySQL數(shù)據(jù)庫的安裝和設(shè)置非常容易,以及從長遠(yuǎn)來看它的整體速度和可擴(kuò)展性。
  • 預(yù)期未來增長:MySQL的復(fù)制支持有助于促進(jìn)橫向擴(kuò)展。此外,升級到商業(yè)MySQL產(chǎn)品是一個相對簡單的過程,比如MySQL集群,它支持自動分片(另一種水平擴(kuò)展過程)。

什么時候不能使用MySQL

  • 必須符合SQL規(guī)范:因?yàn)镸ySQL沒有嘗試實(shí)現(xiàn)完整的SQL標(biāo)準(zhǔn),所以這個工具不是完全符合SQL規(guī)范的。如果你的用例必須完全遵從甚至接近完全遵從SQL,那么你可能希望使用更完全遵從SQL的DBMS。
  • 并發(fā)和大數(shù)據(jù)量:雖然MySQL通常在繁重的讀操作上表現(xiàn)良好,但并發(fā)的讀寫可能會帶來問題。如果你的應(yīng)用程序有很多用戶同時寫入數(shù)據(jù),那么像PostgreSQL這樣的RDBMS可能是更好的選擇。

PostgreSQL

PostgreSQL,也被稱為Postgres,自稱是“世界上最先進(jìn)的開源關(guān)系型數(shù)據(jù)庫”。它的創(chuàng)建目標(biāo)是高度可擴(kuò)展和符合標(biāo)準(zhǔn)。PostgreSQL是一個對象關(guān)系型數(shù)據(jù)庫,這意味著盡管它主要是一個關(guān)系型數(shù)據(jù)庫,但它也包括一些特性,如表繼承和函數(shù)重載,這些特性通常與對象數(shù)據(jù)庫相關(guān)。
Postgres能夠同時高效地處理多個任務(wù),這種特性被稱為并發(fā)。由于它實(shí)現(xiàn)了多版本并發(fā)控制(MVCC,它無需讀鎖就能實(shí)現(xiàn)這一點(diǎn),該實(shí)現(xiàn)確保了事務(wù)的原子性、一致性、隔離性和持久性,也稱為ACID一致性。
PostgreSQL不像MySQL那樣被廣泛使用,但是仍然有一些第三方工具和庫旨在簡化PostgreSQL的使用,包括pgAdmin和Postbird。

PostgreSQL支持的數(shù)據(jù)類型

PostgreSQL支持?jǐn)?shù)字、字符串、日期和時間數(shù)據(jù)類型,如MySQL。此外,它還支持幾何形狀、網(wǎng)絡(luò)地址、Bit串、文本搜索和JSON條目等數(shù)據(jù)類型。

數(shù)字類型

數(shù)據(jù)類型說明
bigint有符號的8字節(jié)整數(shù)。
bigserial自動遞增的8字節(jié)整數(shù)。
double precision8字節(jié)雙精度浮點(diǎn)數(shù)。
integer有符號的4字節(jié)整數(shù)。
numeric、decimal許多可選擇的精度,建議在精確性至關(guān)重要的情況下使用,例如貨幣金額。
real4字節(jié)單精度浮點(diǎn)數(shù)。
smallint有符號的2字節(jié)整數(shù)。
smallserial自動遞增的2字節(jié)整數(shù)。
serial自動遞增的4字節(jié)整數(shù)。

字符類型

數(shù)據(jù)類型說明
character具有指定的固定長度的字符串。
character varyingvarchar一種長度可變但有限的字符串。
text一種長度不受限制的可變字符串。

日期和時間類型

數(shù)據(jù)類型說明
date由日、月和年組成的日歷日期。
interval時間跨度。
time、time without time zone一天中的時間,不包括時區(qū)。
time with time zone一天中的時間,包括時區(qū)。
timestamp、timestamp without time zone日期和時間,不包括時區(qū)。
timestamp with time zone日期和時間,包括時區(qū)。

Geometric types

數(shù)據(jù)類型說明
box平面上的長方形盒子。
circle平面上的圓。
line平面上的無限長線。
lseg平面上的線段。
path平面上的幾何路徑。
point平面上的幾何點(diǎn)
polygon平面上的封閉幾何路徑。

網(wǎng)絡(luò)地址類型

數(shù)據(jù)類型說明
cidrIPv4或IPv6網(wǎng)絡(luò)地址。
inetIPv4或IPv6主機(jī)地址。
macaddr介質(zhì)訪問控制(MAC)地址。

位串類型

數(shù)據(jù)類型說明
bit固定長度的位串。
bit varying一種可變長度的位串。

文本搜索類型

數(shù)據(jù)類型說明
tsquery文本搜索查詢。
tsvector文本搜索文檔。

JSON類型

數(shù)據(jù)類型說明
json文本JSON數(shù)據(jù)。
jsonb分解的二進(jìn)制JSON數(shù)據(jù)。

其他數(shù)據(jù)類型

數(shù)據(jù)類型說明
boolean邏輯布爾值,表示?true?或?false?。
bytea是“byte array”的縮寫,這種類型用于二進(jìn)制數(shù)據(jù)。
money貨幣數(shù)量
pg_lsnPostgreSQL日志序列號。
txid_snapshot用戶級事務(wù)ID快照。
uuid通用唯一標(biāo)識符。
xmlXML數(shù)據(jù)。

PostgreSQL的優(yōu)勢

  • 符合SQL標(biāo)準(zhǔn):與SQLite或MySQL相比,PostgreSQL的目標(biāo)是嚴(yán)格遵循SQL標(biāo)準(zhǔn)。根據(jù)PostgreSQL官方文檔, PostgreSQL支持full core SQL:2011合規(guī)所需的179個特性中的160個,此外還有一長列可選特性。
  • 開源和社區(qū)驅(qū)動:PostgreSQL是一個完全開源的項(xiàng)目,它的源代碼是由一個大型的社區(qū)開發(fā)的。類似地,Postgres社區(qū)維護(hù)并貢獻(xiàn)了大量描述如何使用DBMS的在線資源,包括官方文檔、PostgreSQL wiki和各種在線論壇。
  • 可擴(kuò)展性:用戶可以通過目錄驅(qū)動操作和動態(tài)加載以編程方式擴(kuò)展PostgreSQL。你可以指定一個目標(biāo)代碼文件,比如一個共享庫,PostgreSQL會根據(jù)需要加載它。

PostgreSQL的缺點(diǎn)

  • 內(nèi)存性能:對于每個新的客戶端連接,PostgreSQL都會fork一個新的進(jìn)程。每個新進(jìn)程會分配大約10MB的內(nèi)存,對于有大量連接的數(shù)據(jù)庫來說,內(nèi)存會迅速增加。因此,對于簡單的重讀操作,PostgreSQL的性能通常不如MySQL等其他rdbms。
  • 流行度:盡管PostgreSQL近年來被廣泛使用,但在流行度方面一直落后于MySQL。這樣做的一個后果是,可以幫助管理PostgreSQL數(shù)據(jù)庫的第三方工具仍然較少。類似地,與具有MySQL經(jīng)驗(yàn)的數(shù)據(jù)庫管理員相比,具有管理Postgres數(shù)據(jù)庫經(jīng)驗(yàn)的數(shù)據(jù)庫管理員并不多。

什么時候可以使用PostgreSQL

  • 數(shù)據(jù)完整性很重要:PostgreSQL自2001年以來就完全遵循ACID規(guī)范,并實(shí)現(xiàn)了多版本貨幣控制以確保數(shù)據(jù)保持一致,這使得它成為數(shù)據(jù)完整性至關(guān)重要的RDBMS的首選。
  • 與其他工具的集成:PostgreSQL兼容各種編程語言和平臺。這意味著,如果需要將數(shù)據(jù)庫遷移到另一個操作系統(tǒng)或與特定工具集成,使用PostgreSQL數(shù)據(jù)庫可能比使用其他DBMS更容易。
  • 復(fù)雜的操作:Postgres支持利用多個cpu來以更快的速度回答查詢的查詢計劃。這一點(diǎn),再加上它對多個并發(fā)寫入器的強(qiáng)大支持,使它成為數(shù)據(jù)倉庫和在線事務(wù)處理等復(fù)雜操作的絕佳選擇。

什么時候不能使用PostgreSQL

  • 速度至關(guān)重要:PostgreSQL在設(shè)計時考慮了可擴(kuò)展性和兼容性,這是以速度為代價的。如果你的項(xiàng)目需要盡可能快的讀取操作,PostgreSQL可能不是最佳的DBMS選擇。
  • 簡單設(shè)置:由于Postgres的功能集很大,并且嚴(yán)格遵循標(biāo)準(zhǔn)SQL,因此對于簡單的數(shù)據(jù)庫設(shè)置來說,Postgres可能是多余的。對于讀取量大且要求速度快的操作,MySQL通常是更實(shí)用的選擇。
  • 復(fù)雜復(fù)制:盡管PostgreSQL提供了強(qiáng)大的復(fù)制支持,但它仍然是一個相對較新的功能。有些配置——比如primary-primary架構(gòu)——只能通過擴(kuò)展實(shí)現(xiàn)。復(fù)制是MySQL上一個比較成熟的功能,許多用戶認(rèn)為MySQL的復(fù)制更容易實(shí)現(xiàn),特別是那些缺乏必要的數(shù)據(jù)庫和系統(tǒng)管理經(jīng)驗(yàn)的用戶。

總結(jié)

如今,SQLite、MySQL和PostgreSQL是世界上最流行的三個開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。每個都有自己獨(dú)特的功能和限制,并在特定場景中表現(xiàn)出色。在決定使用哪種RDBMS時,有很多變量在起作用,選擇最快的或功能最多的RDBMS很少像選擇那么簡單。下次需要關(guān)系型數(shù)據(jù)庫解決方案時,請務(wù)必深入研究這些工具和其他工具,以找到最適合您需求的工具。

http://www.risenshineclean.com/news/3944.html

相關(guān)文章:

  • 分析一個網(wǎng)站湖南網(wǎng)絡(luò)推廣機(jī)構(gòu)
  • 公司做網(wǎng)站的費(fèi)用記到哪個科目推廣引流網(wǎng)站
  • 深圳做公司網(wǎng)站他達(dá)拉非片
  • ninety wordpress插件湖南網(wǎng)站seo地址
  • 幫一個企業(yè)做網(wǎng)站流程網(wǎng)絡(luò)整合營銷是什么意思
  • 電影網(wǎng)站域名seo營銷推廣
  • 沒有網(wǎng)站可以做seo排名嗎個人對網(wǎng)絡(luò)營銷的看法
  • 安徽做網(wǎng)站的公司專門做推廣的公司
  • 創(chuàng)業(yè)網(wǎng)站怎么做如何推廣自己的微信公眾號
  • 山西網(wǎng)站建設(shè)設(shè)計百度seo
  • 做調(diào)查問卷用的網(wǎng)站或軟件今日百度搜索風(fēng)云榜
  • 用php做網(wǎng)站難嗎南昌seo全網(wǎng)營銷
  • 重慶市工程建設(shè)信息網(wǎng)新網(wǎng)站網(wǎng)頁設(shè)計圖
  • wordpress 反應(yīng)慢seo網(wǎng)站優(yōu)化推廣教程
  • 網(wǎng)站建設(shè)畢業(yè)論文5000字國內(nèi)廣告投放平臺
  • 官方查企業(yè)信息的網(wǎng)站廣州網(wǎng)站快速排名
  • 怎么把做的頁面放到網(wǎng)站上站長工具seo綜合查詢權(quán)重
  • 網(wǎng)站公司建設(shè) 中山分類達(dá)人介紹
  • 什么顏色做網(wǎng)站好看企點(diǎn)qq
  • 赤峰建設(shè)淘寶網(wǎng)站全國新增確診病例
  • 上海網(wǎng)站建設(shè)覺策動力軟文投放平臺有哪些
  • 上海做企業(yè)網(wǎng)站什么是搜索關(guān)鍵詞
  • 大連建設(shè)工程集團(tuán)有限公司電話seo中文全稱是什么
  • 濟(jì)南網(wǎng)站建設(shè)公司百度搜索頁
  • 小說網(wǎng)站得廣告怎么做淘寶推廣方式
  • 品牌廠家網(wǎng)站建設(shè)貴州seo技術(shù)查詢
  • 網(wǎng)站新聞審核怎么做百度商城
  • 數(shù)據(jù)庫網(wǎng)站制作新app推廣去哪里找
  • 做中文網(wǎng)站的公司2022最近熱點(diǎn)事件及評述
  • jeecg 做網(wǎng)站系統(tǒng)優(yōu)化工具