在今天,幾乎每個軟體或網路應用都需要一個後臺資料庫。每秒發生的交易量的增加和儲存的TB級資料需要一個穩定和靈活的框架來容納和提供這些資料。
當然,對於初創企業來說,成本問題也是一個問題。但是,如果我們告訴你,你可以免費訪問甚至建立這個資料庫,沒有任何附加條件呢?
是的,你沒聽錯–PostgreSQL資料庫保證了我們上面提到的一切,包括一些額外的好處 在這篇文章中,我們將介紹PostgreSQL的各個方面,這些方面使它能夠在快速發展的領域中站穩腳跟。
什麼是PostgreSQL?
PostgreSQL標識 (圖片來源: Uberconf))
PostgreSQL是一個開源的、高度穩定的資料庫系統,為SQL的不同功能提供支援,如外來鍵、子查詢、觸發器和不同的使用者定義的型別和功能。它進一步增強了SQL語言的功能,提供了一些細緻地擴充套件和儲備資料工作負載的功能。它主要用於為許多移動、網路、地理空間和分析應用程式儲存資料。
我們將在本文中深入研究PostgreSQL的各個方面,在下一節中從它的關鍵功能開始。讓我們開始工作吧。
PostgreSQL的主要特徵
與其他資料庫相比,PostgreSQL資料庫有幾個關鍵特徵,使其獨特並廣受青睞。目前,它是使用量第二大的資料庫,僅次於MySQL。
讓我們更詳細地瞭解一下這些特點。
可靠性和符合標準
PostgreSQL為交易提供了真正的ACID語義,並且完全支援外來鍵、連線、檢視、觸發器和儲存過程,有許多不同的語言。它包括大多數SQL的資料型別,如INTEGER、VARCHAR、TIMESTAMP和BOOLEAN。它還支援二進位制大型物件的儲存,包括圖片、視訊或聲音。它是可靠的,因為它有一個大型的內建社羣支援網路。PostgreSQL是一個容錯的資料庫,這要歸功於它的寫前日誌。
擴充套件功能
PostgreSQL擁有幾個強大的功能集,包括時間點恢復、多版本併發控制(MVCC)、表空間、細粒度訪問控制、非同步複製、精緻的查詢計劃器/優化器和寫前日誌。多版本併發控制允許對錶進行併發讀寫,只對同一行的併發更新進行阻塞。這樣就可以避免衝突。
可擴充套件性
PostgreSQL支援Unicode、國際字符集、多位元組字元編碼,並且它對排序、大小寫敏感度和格式化有本地意識。PostgreSQL是高度可擴充套件的–在併發使用者的數量上,它可以容納以及它可以管理的資料量。此外,PostgreSQL是跨平臺的,可以在許多作業系統上執行,包括Linux、Microsoft Windows、OS X、FreeBSD和Solaris。
動態載入
PostgreSQL伺服器也可以通過動態載入將使用者編寫的程式碼納入自身。使用者可以指定一個物件程式碼檔案;例如,一個實現新功能或型別的共享庫,PostgreSQL將根據需要載入它。即時修改其操作的能力使其獨特地適合於快速實現新的儲存結構和應用。
PostgreSQL的結構
PostgreSQL伺服器有一個簡單的結構,由共享記憶體、後臺程序和資料目錄結構組成。在這一節中,我們將討論每個元件,以及它們如何相互作用。下面給出了一個PostgreSQL結構的圖示。最初,客戶端向伺服器傳送一個請求。然後,PostgreSQL伺服器使用共享緩衝區和後臺程序處理資料。PostgreSQL資料庫伺服器的物理檔案被儲存在資料目錄中。
PostgreSQL架構圖解(圖片來源:維基共享資源)
共享記憶體
共享記憶體是為交易日誌快取和資料庫快取保留的。它還包括共享緩衝區、WAL緩衝區、工作記憶體和維護工作記憶體等元素。讓我們深入瞭解以下每個主題。
(1)共享緩衝區
這些緩衝區的作用是儘量減少伺服器的DISK IO。為了實現這個目標,如果我們有一個專用於PostgreSQL的伺服器,將共享緩衝區的值設定為總記憶體的25%是公平的。從9.3版本開始,共享緩衝區的預設值是128MB。當幾個使用者同時訪問時,必須儘量減少爭奪。經常使用的區塊應該在緩衝區內停留儘可能長的時間。這允許它儘可能快地訪問資料。
(2)WAL緩衝區
WAL緩衝區臨時儲存對資料庫的更改。WAL檔案由WAL緩衝區在預定的時間點寫入的內容組成。WAL檔案和WAL緩衝區對於在備份和恢復過程中恢復資料具有重要意義。
(3)工作記憶體
這個記憶體空間用於點陣圖操作、排序、合併連線和雜湊連線,將資料寫入臨時磁碟檔案。從9.3版本開始的預設設定是4MB。
(4)維護工作記憶體
這個記憶體槽用於資料庫操作,如分析、真空、修改表和建立索引。從9.4版本開始的預設設定是64MB。
後臺程序
每個後臺程序都是不可分割的,並執行著管理伺服器的獨特功能。下面將進一步闡述幾個重要的後臺程序:
(1)檢查點程序
當一個檢查點發生時,髒緩衝區被寫入檔案。Checkpointer本質上是將所有髒頁從記憶體中寫入磁碟,並清理共享緩衝區。如果資料庫崩潰,資料損失可以通過獲得最後一個檢查點時間和PostgreSQL停止時間之間的差異來衡量。
(2)後臺寫程式
它更新日誌和備份資訊。直到9.1版,這個過程是與定期進行的檢查點過程一起整合的。然而,從 9.2 版開始,檢查指標程序與後臺寫入程序分開。
(3)WAL寫入器
這個程序定期將WAL緩衝區中的WAL資料寫入並重新整理到永續性儲存中。
(4)歸檔
如果啟用,這個程序有責任將WAL日誌檔案複製到指定的目錄中。
(5)Logger/Logging Collector
這個程序將WAL緩衝區寫到WAL檔案中。
資料檔案/資料目錄結構
PostgreSQL有幾個資料庫,共同組成一個資料庫叢集。當初始化時,模板0、模板1和Postgres資料庫被建立。使用者的新資料庫建立是通過模板資料庫完成的,模板資料庫由系統目錄表組成。儘管初始化後template0和template1中的表的列表是一樣的,但只有template1資料庫可以建立使用者需要的物件,因此使用者資料庫是通過克隆template1資料庫來建立。
叢集所需的資料儲存在叢集的資料目錄中,該目錄也被稱為 “PGDATA”。它由幾個子目錄組成。下面提到幾個重要的子目錄:
- Global: 全域性子目錄包括叢集的表,如使用者資料庫。
- Base: Base子目錄是預設表空間的物理位置。它包含幾個每個資料庫的子目錄,系統目錄就儲存在這些子目錄中。
- PID: PID檔案由當前的postmaster程序ID(PID)組成。
- PG_VERSION: 這個子目錄由資料庫的版本資訊組成。
- PG_NOTIFY: 這個子目錄包含LISTEN/NOTIFY狀態資料。這些檔案對排除故障很有用。
為什麼使用PostgreSQL?
除了提供一系列的功能,如索引、檢視和儲存過程外,PostgreSQL還有很多功能,即:
- 語言支援
- 開放原始碼
- 物件關係型資料庫
- 效能
- 可擴充套件性
- 負載平衡能力
- 可靠性
- 國際化
讓我們更詳細地研究這些問題。
語言支援
PL/PGSQL是PostgreSQL提供的一種本地程式性語言,具有不同的現代功能。它支援JSON資料型別,該資料型別是輕量級的,並確保包含在一個單一的包中的靈活性。因此,PostgreSQL支援幾種程式語言和協議,包括Perl, Ruby, Python, .Net, C/C++, Java, ODBC和Go。
開放原始碼
它是免費和開源的–這是迄今為止PostgreSQL最重要的好處。它得到了超過20年的社羣發展的支援,這反過來又促進了它的高水平的完整性。它的原始碼在開源許可下可用,允許你以你認為合適的方式使用、修改和實現它–不需要額外費用。
物件關係型資料庫
物件、類和函式過載在PostgreSQL中被直接支援。由於其物件導向的特性,有可能擴充套件資料型別以建立自定義資料型別。這保證了開發人員在操作需要資料庫整合的複雜資料模型時的高度靈活性。
表的繼承是PostgreSQL由於其物件導向的特性而支援的另一個特性。子表可以繼承其父表的列,除了子表擁有的其他列,使其與自身不同。
效能
PostgreSQL中的寫操作可以併發進行,而不需要讀寫鎖。在處理大量資料時,索引被用來加快查詢速度,這使得資料庫可以找到特定的行,而不需要在所有的資料中迴圈。
在PostgreSQL中,你甚至可以建立一個表示式索引,它對錶達式或函式的結果起作用,而不僅僅是一個列的值。也支援部分索引,即只對表的一部分進行索引。它還支援讀取查詢的並行化,表示式的即時編譯(JIT),以及巢狀事務(通過儲存點),以確保良好的效能和效率。
可擴充套件性
PostgreSQL是高度可擴充套件的,因為它的操作是目錄驅動的,也就是說,資訊儲存在資料庫、列、表等。PostgreSQL不僅在其目錄中儲存了更多的資訊,而且還儲存了資料型別、訪問方法、函式等細節。你甚至可以從不同的程式語言編寫你的程式碼,而不需要重新編譯你的資料庫,並定義你的資料型別。
負載均衡能力
它通過備用伺服器的執行、連續規劃、為備用伺服器準備主伺服器、設定備用伺服器、流式複製、複製槽、級聯複製以及在備用伺服器中連續存檔來保證高可用性和負載平衡。此外,PostgreSQL支援同步複製,兩個資料庫例項可以同時執行,主資料庫與從資料庫同時同步,進一步確保高可用性。
可靠性
除了安全地儲存資料並允許使用者在處理請求時檢索資料外,它還得到了一個由貢獻者組成的社羣的支援,這些貢獻者定期發現錯誤並試圖改進軟體,使PostgreSQL變得可靠。
國際化
設計軟體使其可以在一系列地區使用的過程被稱為國際化。它通過多位元組字元編碼、ICU校對、Unicode來支援國際字符集,並且在排序、格式化和大小寫敏感性方面具有本地意識。用你選擇的語言檢視PostgreSQL生成的資訊是國際化的一個例子。
什麼時候使用PostgreSQL?
你是否需要建立複雜的查詢和關係,需要以最經濟的方式經常更新和持續維護?PostgreSQL可能是一個合適的選擇。PostgreSQL不僅是免費的,而且它是跨平臺的,不僅僅限於Windows作業系統。如果你想分析資料,PostgreSQL提供了大量的正規表示式作為分析工作的基礎。
在支援CSV方面,它也是最好的資料庫之一。簡單的命令如 “copy from” 和 “copy to” 有助於快速處理資料。如果有匯入問題,它將丟擲一個錯誤並立即停止匯入。下面的章節將介紹PostgreSQL在現代世界中的一些最常見的應用。讓我們開始吧。
政府地理空間資料
PostGIS地理空間資料庫擴充套件外掛對PostgreSQL來說無疑是有益的。當與PostGIS擴充套件一起使用時,PostgreSQL支援地理物件,可以作為地理資訊系統(GIS)和基於位置的服務的地理空間資料儲存來使用。
金融業
PostgreSQL是金融業的一個理想的DBMS系統。由於它完全符合ACID標準,它是OLTP(線上事務處理)的理想選擇,因為這些資料庫需要頻繁地寫入、讀取和更新,同時強調快速處理。它在執行資料庫分析方面也很合適。它可以與任何進行數學運算的軟體整合,如Matlab和R。
科學資料
科學資料需要數兆位元組的資料。以最有效的方式處理資料是非常必要的。PostgreSQL提供了精彩的分析方法和強大的SQL引擎。這有助於輕鬆地管理大量的資料。
網路技術
網站經常處理每秒數百或數千的請求。如果開發人員正在尋找一個具有成本效益和可擴充套件的解決方案,PostgreSQL將是最合適的。PostgreSQL可以執行動態網站和應用程式,作為LAMP棧的強大替代方案的一部分,即LAPP棧。(Linux, Apache, PostgreSQL, PHP, Python, and Perl)
製造業
許多初創公司和大型企業使用PostgreSQL作為產品、解決方案和網際網路規模應用的主要資料儲存解決方案。通過使用這個開源的DBMS作為儲存後端,可以優化供應鏈的效能。因此,這使得企業可以減少業務的運營成本。
PostgreSQL的操作挑戰
到目前為止,我們在這篇文章中只對PostgreSQL進行了讚美,因此,我們向你展示一些你在涉足PostgreSQL時可能會遇到的缺點,這才是公平的。下面是你在採用PostgreSQL過程中可能遇到的一些操作上的挑戰。
- 缺少一個成熟的資料庫生態系統: PostgreSQL擁有發展最快的社羣之一,但與傳統的資料庫供應商相比,PostgreSQL社羣並沒有發達的資料庫生態系統。
- 專業知識的匱乏: PostgreSQL經常與各種資料庫結合在一起,例如MongoDB。現在,每個資料庫都需要專門的能力,僱用具有理想的PostgreSQL熟練程度的技術人員可能是一個很高的要求。除了PostgreSQL的管理工具外,資料庫專家和DevOps團隊還需要處理來自多個供應商的各種資料庫。當你不能在現有的流程之間切換時,這可能很難管理。
- 不連貫性: 由於PostgreSQL是一個開源工具,一個組織內不同的IT開發團隊可以開始有機地利用它。這可能會導致另一個路障–在IT環境中缺乏對PostgreSQL所有例項的單一知識點。另一個可能來自不同團隊試圖解決同一問題的問題是工作的重複和冗餘。
PostgreSQL主要替代品
下面是PostgreSQL的幾個關鍵的替代品,你可以為你的WordPress網站利用。
MySQL
MySQL標誌 (圖片來源: Mecdata)
當你想到資料庫的時候,你的腦海中馬上就會浮現出MySQL。在可行的替代方案開始湧現之前,它在很長一段時間內是開發者的一個相當普遍的選擇。早在2019年,就有超過39%的開發者使用它。即使它缺乏PostgreSQL的多功能性,它仍然可以在各種使用情況下派上用場,如可擴充套件的網路應用程式。
自1995年成立以來,MySQL一直由甲骨文公司維護。甲骨文公司還提供具有專有外掛、補充服務、擴充套件和強大使用者支援的MySQL精英版本。為了更好地理解MySQL,你需要對客戶-伺服器模型和關係型資料庫有更好的理解。簡單地說,你的資料被分割成各種獨立的儲存區域,也被稱為表,而不是把所有東西都卸在一個單獨的大儲存單元中。這就是關係型資料庫的本質。
除了是一個可靠和堅實的資料庫平臺外,它還相當容易掌握。學習曲線並不像同時代的一些資料庫那樣陡峭,因為你不需要完全掌握SQL來開始使用MySQL。
如果你的網站利用WordPress,並想了解如何使MySQL執行得更快,你最好的選擇是改進你的資料庫,使之與你使用WordPress的方式相一致。在技術術語中,這被稱為 “MySQL效能調整“。優化MySQL的明顯優勢是縮短載入時間,同時使網站整體更快。除此之外,如果你正確地維護你的資料庫,你應該看到你的增長有一個穩定的改善,甚至隨著它的擴大。
MariaDB
MariaDB標誌 (圖片來源: Docker Hub)
MariaDB是MySQL關係型資料庫管理系統的一個商業支援分叉,它擁有一個根本性的獨特方法來滿足現代世界的需求。MariaDB的目的性和可插拔的儲存引擎為以前需要大量專門資料庫的工作負載提供支援。這使得它可以成為企業的一站式服務,無論是在雲端還是在他們喜歡的商品硬體上。
你可以在幾分鐘內部署MariaDB,用於分析、交易或混合用例,在不放棄關鍵企業功能的情況下提供無與倫比的操作靈活性。這包括完全的SQL和真正的ACID相容。
MariaDB為其使用者提供了以下產品:
- MariaDB企業版: MariaDB企業版是一個絕對的、生產級的開源資料庫解決方案,可以優雅地處理分析、交易或混合分析/交易工作負載。MariaDB企業版還擁有從柱狀和獨立資料庫擴充套件到每秒可執行數百萬次交易的全分散式SQL資料庫的能力。它還允許你對數十億行進行互動式的臨時分析。
- MariaDB社羣伺服器: MariaDB社羣伺服器是當今絕大多數開發者利用的開源關係型資料庫。MariaDB社羣伺服器不僅與Oracle、MySQL和其他各種資料庫相容,而且還能保證永遠保持開源。突出的特點包括用於分析的列式儲存、現代SQL、可插拔儲存引擎和高可用性。
- MariaDB SkySQL: SkySQL被稱為資料庫即服務(DBaaS)產品,它將MariaDB企業的全部功能以及對分析、交易和混合工作負載的支援帶到雲端。SkySQL建立在Kubernetes上,並針對雲服務和基礎設施進行了改造。SkySQL通過將自助服務和易用性與一流的支援能力和企業可靠性相結合,在這一領域聲名鵲起。從最後一句話可以看出,這包括在雲中安全執行關鍵資料庫所需的一切,再加上企業治理。
由於其與MySQL的相容性,你可以利用MariaDB作為MySQL的 “替身”,而幾乎沒有任何後果。
你的資料庫的最佳實踐
當你想到對第一次做網站的人友好的平臺時,你可能會想到WordPress。WordPress讓你在沒有任何編碼經驗的情況下實現很多東西。然而,為了從WordPress中提取最大的價值,你仍然需要對它的一些基本元素的功能有一個清楚的瞭解。例如,如果你已經在你的網站上利用WordPress有一段時間了,現在可能是瞭解WordPress資料庫如何運作的好時機。
這就立即引發了一個常見的問題,為什麼WordPress畢竟需要一個資料庫?它可能看起來不像,但是WordPress的內容比看上去的要多。在幕後有很多工作要做,以使它有效地運作,不管你的網站大小如何。
要深入研究,你需要知道,一個WordPress網站是由許多不同型別的資料組成的。現在,所有這些資訊都被儲存在一個綜合的WordPress資料庫中,這是一個不爭的事實。這個資料庫對你的WordPress網站來說是不可或缺的,它可以儲存你或你的訪問者所做的所有改變,並使你的網站能夠無縫執行。以下是整理在你的WordPress資料庫中的一些資料:
- 組織資訊,如標籤和類別。
- 全站設定。
- 頁面、帖子和相關內容。
- 主題和外掛相關的資料。
- 使用者評論和資料。
當你安裝一個WordPress網站時,這個過程的一部分是為它建立一個資料庫。通常情況下,這是自動發生的。然而,如果你想手動建立一個資料庫,或者甚至利用一個新網站的現有資料庫,也有一個規定。
下一節將談談對WordPress資料庫的建議做法。
使用資料庫管理工具
資料庫管理工具的基本功能是讓你檢視你的資料庫的內容。為了使資料庫順利運作,利用資料庫管理工具可能是你最好的選擇。一般來說,資料庫管理工具整合了滿足三種不同資料庫專業人員需求的功能:
- 資料庫分析員可以從多個來源提取資料。隨後是清理、整合和準備分析的資料。對於資料庫分析師來說,擁有在資料集和查詢方面的協作能力,而不必依賴IT部門的訪問,是一個不可或缺的要求。
- 資料庫開發人員需要一些工具,使他們能夠在第一時間編寫高質量的程式碼,並對其進行無縫維護。資料庫開發人員重視程式設計的協作和自動化工具。這使他們能夠在不增加風險的情況下縮短開發週期。
- 資料庫管理員利用設計的工具來跟蹤資料庫的效能和健康。他們處理從解開和診斷效能障礙到執行資料庫模式變化的任務。
當在市場上尋找符合你的業務要求的資料庫管理工具時,你應該尋找能夠將測試、資料庫開發和部署任務帶入持續交付和持續整合過程的工具,使其更容易跟上應用開發。
一個有效的資料庫管理工具還應該允許將資料從表格結果視覺化為圖表、柱狀圖和圖形,並能輕鬆分發給決策者。它還應該幫助管理員在生產中出現問題之前定位問題,通過鎖定那些在交易量增加時不能很好擴充套件的SQL語句和應用程式。
Adminer(以前稱為phpMinAdmin)是一個免費的開源資料庫管理工具,它提供了大量有用的功能和一個更優雅的UI(使用者介面)。你可以很容易地在你的伺服器上部署這個方便的資料庫管理工具,你所需要做的就是上傳其單一的PHP檔案,將你的瀏覽器指向它,然後登入。
使用資料庫外掛
如果你想評估一個網站的質量,可以看看它的資料庫。與你的網站有關的每一粒資訊都會進入你的WordPress資料庫。其中有些是至關重要的,而有些只是在阻礙你。這將包括壞的表格、舊的草稿、垃圾郵件的評論。為了防止它們阻礙你的網站,你需要引入WordPress資料庫外掛。
資料庫外掛可以有各種形式。有些外掛可以用來每月或每週清理資料庫中的垃圾檔案。其他外掛可以用來在做修改之前備份你的資料庫,例如,在遷移期間。除了提高你的網站速度,你可以使用資料庫外掛來提供一個更有效的使用者體驗,同時提高你在搜尋引擎上排名的機會。
診斷和修復你的資料庫
作為一個WordPress使用者,你可能已經遇到了一些令人討厭的WordPress錯誤。下面是你可能遇到過的最常見的錯誤資訊之一:
建立資料庫連線的錯誤
修復你的資料庫的重要性應該是相當明顯的。WordPress錯誤不僅會妨礙你的網站的正常運作,而且會對消費者的體驗產生不利的影響。安裝和更新失敗、停機和資源缺失會給你的賺錢潛力留下凹痕,並傷害你的信譽。
小結
PostgreSQL是一個開源和免費的關係型資料庫管理系統,專注於SQL相容性和可擴充套件性。依靠30多年的積極開發,PostgreSQL是全球最廣泛使用的開源資料庫工具之一。
在這篇文章中,我們介紹了PostgreSQL的一些突出特點、PostgreSQL的架構、它的使用案例、好處、操作挑戰和關鍵的替代方案。我們用一些推薦的做法來結束這篇文章,以保持你的WordPress資料庫處於高峰狀態,同時你繼續擴大規模。
評論留言