特性 MySQL PostgreSQL
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的海南網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
實例 通過執(zhí)行 MySQL 命令(mysqld)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫。一臺服務(wù)器可以運行多個 mysqld 實例。一個實例管理器可以監(jiān)視 mysqld 的各個實例。
通過執(zhí)行 Postmaster 進程(pg_ctl)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫,這些數(shù)據(jù)庫組成一個集群。集群是磁盤上的一個區(qū)域,這個區(qū)域在安裝時初始化并由一個目錄組成,所有數(shù)據(jù)都存儲在這個目錄中。使用 initdb 創(chuàng)建第一個數(shù)據(jù)庫。一臺機器上可以啟動多個實例。
數(shù)據(jù)庫 數(shù)據(jù)庫是命名的對象集合,是與實例中的其他數(shù)據(jù)庫分離的實體。一個 MySQL 實例中的所有數(shù)據(jù)庫共享同一個系統(tǒng)編目。 數(shù)據(jù)庫是命名的對象集合,每個數(shù)據(jù)庫是與其他數(shù)據(jù)庫分離的實體。每個數(shù)據(jù)庫有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫共享 pg_databases。
數(shù)據(jù)緩沖區(qū) 通過 innodb_buffer_pool_size 配置參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。這個參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個緩沖區(qū)來緩存表的數(shù)據(jù)和索引。在專用的數(shù)據(jù)庫服務(wù)器上,這個參數(shù)最高可以設(shè)置為機器物理內(nèi)存量的 80%。 Shared_buffers 緩存。在默認情況下分配 64 個緩沖區(qū)。默認的塊大小是 8K??梢酝ㄟ^設(shè)置 postgresql.conf 文件中的 shared_buffers 參數(shù)來更新緩沖區(qū)緩存。
數(shù)據(jù)庫連接 客戶機使用 CONNECT 或 USE 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 客戶機使用 connect 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。
身份驗證 MySQL 在數(shù)據(jù)庫級管理身份驗證。 基本只支持密碼認證。 PostgreSQL 支持豐富的認證方法:信任認證、口令認證、Kerberos 認證、基于 Ident 的認證、LDAP 認證、PAM 認證
加密 可以在表級指定密碼來對數(shù)據(jù)進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對列數(shù)據(jù)進行加密和解密??梢酝ㄟ^ SSL 連接實現(xiàn)網(wǎng)絡(luò)加密。 可以使用 pgcrypto 庫中的函數(shù)對列進行加密/解密??梢酝ㄟ^ SSL 連接實現(xiàn)網(wǎng)絡(luò)加密。
審計 可以對 querylog 執(zhí)行 grep。 可以在表上使用 PL/pgSQL 觸發(fā)器來進行審計。
查詢解釋 使用 EXPLAIN 命令查看查詢的解釋計劃。 使用 EXPLAIN 命令查看查詢的解釋計劃。
備份、恢復和日志 InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務(wù)恢復。需要第三方軟件才能支持熱備份。 在數(shù)據(jù)目錄的一個子目錄中維護寫前日志。支持在線和離線完全備份以及崩潰、時間點和事務(wù)恢復。 可以支持熱備份。
JDBC 驅(qū)動程序 可以從 參考資料 下載 JDBC 驅(qū)動程序。 可以從 參考資料 下載 JDBC 驅(qū)動程序。
表類型 取決于存儲引擎。例如,NDB 存儲引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 支持臨時表、常規(guī)表以及范圍和列表類型的分區(qū)表。不支持哈希分區(qū)表。 由于PostgreSQL的表分區(qū)是通過表繼承和規(guī)則系統(tǒng)完成了,所以可以實現(xiàn)更復雜的分區(qū)方式。
索引類型 取決于存儲引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-樹、哈希、R-樹和 Gist 索引。
約束 支持主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。 支持主鍵、外鍵、惟一、非空和檢查約束。
存儲過程和用戶定義函數(shù) 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲過程可以用 SQL 和 C++ 編寫。用戶定義函數(shù)可以用 SQL、C 和 C++ 編寫。 沒有單獨的存儲過程,都是通過函數(shù)實現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。
觸發(fā)器 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器語句用過程語言復合語句編寫。 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器過程用 C 編寫。
系統(tǒng)配置文件 my.conf Postgresql.conf
數(shù)據(jù)庫配置 my.conf Postgresql.conf
客戶機連接文件 my.conf pg_hba.conf
XML 支持 有限的 XML 支持。 有限的 XML 支持。
數(shù)據(jù)訪問和管理服務(wù)器 OPTIMIZE TABLE —— 回收未使用的空間并消除數(shù)據(jù)文件的碎片
myisamchk -analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù)(MyISAM 存儲引擎)
mysql —— 命令行工具
MySQL Administrator —— 客戶機 GUI 工具 Vacuum —— 回收未使用的空間
Analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù)
psql —— 命令行工具
pgAdmin —— 客戶機 GUI 工具
并發(fā)控制 支持表級和行級鎖。InnoDB 存儲引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務(wù)級設(shè)置隔離級別。 支持表級和行級鎖。支持的 ANSI 隔離級別是 Read Committed(默認 —— 能看到查詢啟動時數(shù)據(jù)庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務(wù)啟動之前提交的結(jié)果)。使用 SET TRANSACTION 語句在事務(wù)級設(shè)置隔離級別。使用 SET SESSION 在會話級進行設(shè)置。
MySQL相對于PostgreSQL的劣勢:
MySQL
PostgreSQL
最重要的引擎InnoDB很早就由Oracle公司控制。目前整個MySQL數(shù)據(jù)庫都由Oracle控制。
BSD協(xié)議,沒有被大公司壟斷。
對復雜查詢的處理較弱,查詢優(yōu)化器不夠成熟
很強大的查詢優(yōu)化器,支持很復雜的查詢處理。
只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。
都支持
David Bolton是一名獨立開發(fā)者,他使用PostgreSQL和MySQL都已有超過十年的時間。近日,他撰文闡述了選擇PostgreSQL而不是MySQL的理由。他認為,MySQL之所以仍然如此流行是因為每個Linux Web托管軟件包中都包含它。但隨著Oracle將其收購,MySQL的開源程度大不如前。而PostgreSQL不僅發(fā)展更快,還加入了JSON支持,成為少數(shù)幾個支持NoSQL的關(guān)系型數(shù)據(jù)庫之一。
MySQL/MariaDB的當前版本是5.7.6(MariaDB為MySQL創(chuàng)建者Monty Widenius創(chuàng)建的一個MySQL分支),PostgreSQL的版本是9.4.1。Bolton從以下幾個方面對比了兩者的最新版本:
ANSI標準兼容性:與先前的版本相比,MySQL已經(jīng)有了長足的進步,但MySQL背后的哲學是,如果客戶喜歡,他們就會支持非標準擴展,而PostgreSQL從開始就將標準構(gòu)建到平臺里。不過,二者殊途同歸,差別不大;
ACID遵從性:PostgreSQL有一個存儲引擎,而MySQL有9個,但只有MyIsam和InnoDB與大部分用戶有關(guān),其中,后者為默認存儲引擎。InnoDB和PostgreSQL都完全遵循ACID,差別不大;
無鎖表修改:MyIsam使用表級鎖來提升速度,這會導致寫互斥。但PostgreSQL和InnoDB均使用行級鎖,差別不大;
子查詢:長期以來,這一直是MySQL的一個弱點,雖然5.6.5作了重大改進,但PostgreSQL對表連接支持得更好,尤其是MySQL不支持全外連接,因此,這方面PostgreSQL勝過MySQL;
JSON支持和NoSQL:PostgreSQL最近增加了JSON支持,與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比,它提供了更大的數(shù)據(jù)存儲靈活性,因此,這方面PostgreSQL勝過MySQL。
此外,Bolton指出,選擇PostgreSQL還有如下理由:
更好的許可:PostgreSQL采用類似MIT的許可協(xié)議,允許開發(fā)人員做任何事情,包括在開源或閉源產(chǎn)品中商用,而MySQL的客戶端遵循GPL許可協(xié)議,所以開發(fā)人員必須向Oracle付費或者將自己的應用程序開源;
更好的數(shù)據(jù)一致性: PostgreSQL會在數(shù)據(jù)插入和更新之前進行嚴格的驗證,確保數(shù)據(jù)合法才會進行相應的操作,但在MySQL中,開發(fā)人員需要將服務(wù)器設(shè)定為嚴格SQL模式才能達到同樣的目的,否則可能會產(chǎn)生不規(guī)范數(shù)據(jù);
服務(wù)器擴展:MySQL提供了插件程序API,
支持C/C++或任何兼容C的語言,而且從5.7.3版本開始支持全文搜索,PostgreSQL有一個類似的系統(tǒng)但支持的語言更多,包括C/C++、
Java、.Net、Perl、
Python、Ruby、Tcl、ODBC等,它甚至可以在單獨的進程中運行用戶提供的代碼;除了所有關(guān)系型數(shù)據(jù)庫都包含的有關(guān)數(shù)據(jù)庫、表和列的一般信息
外,PostgreSQL系統(tǒng)目錄中還可以包含關(guān)于數(shù)據(jù)類型、函數(shù)和存取方法的信息,開發(fā)人員可以通過修改這些信息實現(xiàn)擴展。
了存儲、查詢和修改空間關(guān)系的能力。本文中 ‘PostgreSQL’ 指代基本的關(guān)系數(shù)據(jù)庫功能,而 ‘PostGIS’ 指代擴展的空間操作特性。
客戶端-服務(wù)器構(gòu)架
PostgreSQL 同眾多數(shù)據(jù)庫產(chǎn)品一樣,采用客戶端-服務(wù)器構(gòu)架??蛻舳讼蚍?wù)器發(fā)出請求并得到響應。這種機制同瀏覽器從網(wǎng)絡(luò)服務(wù)器獲取網(wǎng)頁類似。在 PostgreSQL 中,請求以 SQL 語言發(fā)出,而響應多為從數(shù)據(jù)庫提取的表單。
客戶端與服務(wù)器可以部署在同一臺設(shè)備上,即 PostgreSQL 可以在單一的計算機上使用。借由系統(tǒng)內(nèi)部的 ‘loopback’ 通信機制,數(shù)據(jù)庫系統(tǒng)可以進行私密通訊。除非專門配置,外界是不能訪問這些信息的。
本位介紹三種客戶端:命令行, Quantum GIS , pgAdmin 圖形化數(shù)據(jù)庫客戶端。
創(chuàng)造具有空間信息處理能力的數(shù)據(jù)庫
命令行客戶端在終端模擬器(Terminal Emulator)中運行。在 Applications 菜單的 Accessories 中打開一個終端模擬器,將顯示一個 Unix 風格的命令行界面。輸入:
psql -V
回車確認,將顯示 PostgreSQL 版本號。
一個 PostgreSQL 服務(wù)器中,可以將不同的任務(wù)組織到不同的數(shù)據(jù)庫。每個數(shù)據(jù)庫獨立運作,擁有專門的表單、顯示、用戶等。訪問 PostgreSQL 數(shù)據(jù)庫時將指定一個數(shù)據(jù)庫。
服務(wù)器上數(shù)據(jù)庫列表通過以下命令查詢:
psql -l
輸出將羅列 Live 上配置的幾個數(shù)據(jù)庫。這里演示新建一個。
PostgreSQL 使用 createdb 工具創(chuàng)建數(shù)據(jù)庫。這里建立的數(shù)據(jù)庫應帶有 PostGIS 的擴展功能,因此需要指定相應的模板。這里將新建數(shù)據(jù)庫稱為 demo 。命令為:
createdb-Ttemplate_postgisdemo
現(xiàn)在執(zhí)行 psql-l 應當可以看到 demo 數(shù)據(jù)庫。
也可以使用 SQL 語言創(chuàng)建 PostGIS 數(shù)據(jù)庫。首先使用 dropdb 命令刪除之前創(chuàng)建的數(shù)據(jù)庫,然后使用 psql 命令開啟 SQL 命令解析器:
dropdbdemopsql-dpostgres
這樣就連接到了一個通用的系統(tǒng)數(shù)據(jù)庫 postgres 。輸入 SQL 命令建立新數(shù)據(jù)庫:
postgres=# CREATE DATABASE demo TEMPLATE=template_postgis;
現(xiàn)在可以轉(zhuǎn)換連接到新建的數(shù)據(jù)庫。若重新連接時可以使用 psql-ddemo 命令。但在 psql 系統(tǒng)內(nèi)部也可以使用以下命令:
postgres=# \c demo
一個信息頁面將顯示當前已連接 demo 數(shù)據(jù)庫。輸入 \dt 列出當前數(shù)據(jù)庫內(nèi)的表單,輸出如下:
demo=# \dtListofrelationsSchema|Name|Type|Owner--------+------------------+-------+-------public|geometry_columns|table|userpublic|spatial_ref_sys|table|user(2rows)
這兩個表格是 PostGIS 默認的。其中 spatial_ref_sys 存儲著合法的空間坐標系統(tǒng)。利用 SQL 查詢查看:
demo=# SELECT srid,auth_name,proj4text FROM spatial_ref_sys LIMIT 10;srid|auth_name|proj4text------+-----------+--------------------------------------3819|EPSG|+proj=longlat+ellps=bessel+towgs...3821|EPSG|+proj=longlat+ellps=aust_SA+no_d...3824|EPSG|+proj=longlat+ellps=GRS80+towgs8...3889|EPSG|+proj=longlat+ellps=GRS80+towgs8...3906|EPSG|+proj=longlat+ellps=bessel+no_de...4001|EPSG|+proj=longlat+ellps=airy+no_defs...4002|EPSG|+proj=longlat+a=6377340.189+b=63...4003|EPSG|+proj=longlat+ellps=aust_SA+no_d...4004|EPSG|+proj=longlat+ellps=bessel+no_de...4005|EPSG|+proj=longlat+a=6377492.018+b=63...(10rows)
以上顯示確認了該數(shù)據(jù)庫已經(jīng)建立空間操作功能。數(shù)據(jù)庫中的 geometry_columns 用于記錄那些表格是有空間信息的。
手工建立空間數(shù)據(jù)表格
空間數(shù)據(jù)庫已經(jīng)建立,現(xiàn)在可以建立具有空間信息的表格。
首先建立一個常規(guī)的表格存儲有關(guān)城市(cities)的信息。這個表格有兩欄,一個是 ID 編號,一個是城市名:
demo=# CREATE TABLE cities ( id int4, name varchar(50) );
現(xiàn)在添加一個空間欄用于存儲城市的位置。習慣上這個欄目叫做 the_geom 。它記錄了數(shù)據(jù)為什么類型(點、線、面)、有幾維(這里是二維)以及空間坐標系統(tǒng)。此處使用 EPSG:4326 坐標系統(tǒng):
demo=# SELECT AddGeometryColumn ('cities', 'the_geom', 4326, 'POINT', 2);
完成后,查詢 cities 表單應當顯示這個新欄目。同時頁面將顯示當前表達沒有記錄(0 rows)。
demo=# SELECT * from cities;id|name|the_geom----+------+----------(0rows)
為添加記錄,需要使用 SQL 命令。對于空間欄,使用 PostGIS 的 ST_GeomFromText 可以將文本轉(zhuǎn)化為坐標與參考系號的記錄:
demo=# INSERT INTO cities (id, the_geom, name) VALUES (1,ST_GeomFromText('POINT(-0.1257 51.508)',4326),'London, England');demo=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London, Ontario');demo=# INSERT INTO cities (id, the_geom, name) VALUES (3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');
當然,這樣的輸入方式難以操作。其它方式可以更快的輸入數(shù)據(jù)。就目前來說,表格內(nèi)已經(jīng)有了一些城市數(shù)據(jù),可以先進行查詢等操作。
簡單查詢
標準的 SQL 操作都可以用于 PostGIS 表單:
demo=# SELECT * FROM cities;id|name|the_geom----+-----------------+----------------------------------------------------1|London,England|0101000020E6100000BBB88D06F016C0BF1B2FDD2406C149402|London,Ontario|0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D45403|EastLondon,SA|0101000020E610000040AB064060E93B4059FAD005F58140C0(3rows)
這里的坐標是無法閱讀的 16 進制格式。要以 WKT 文本顯示,使用 ST_AsText(the_geom) 或 ST_AsEwkt(the_geom) 函數(shù)。也可以使用 ST_X(the_geom) 和 ST_Y(the_geom) 顯示一個維度的坐標:
demo=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities;id|st_astext|st_asewkt|st_x|st_y----+------------------------------+----------------------------------------+-------------+-----------1|POINT(-0.125751.508)|SRID=4326;POINT(-0.125751.508)|-0.1257|51.5082|POINT(-81.23342.983)|SRID=4326;POINT(-81.23342.983)|-81.233|42.9833|POINT(27.91162491-33.01529)|SRID=4326;POINT(27.91162491-33.01529)|27.91162491|-33.01529(3rows)
空間查詢:
PostGIS 為 PostgreSQL 擴展了許多空間操作功能。以上已經(jīng)涉及了轉(zhuǎn)換空間坐標格式的 ST_GeomFromText 。多數(shù)空間操作以 ST(spatial type)開頭,在 PostGIS 文檔相應章節(jié)有羅列。這里回答一個具體的問題:以米為單位并假設(shè)地球是完美橢球,上面三個城市相互的距離是多少?
demo=# SELECT p1.name,p2.name,ST_Distance_Sphere(p1.the_geom,p2.the_geom) FROM cities AS p1, cities AS p2 WHERE p1.id p2.id;name|name|st_distance_sphere-----------------+-----------------+--------------------London,Ontario|London,England|5875766.85191657EastLondon,SA|London,England|9789646.96784908EastLondon,SA|London,Ontario|13892160.9525778(3rows)
輸出顯示了距離數(shù)據(jù)。注意 ‘WHERE’ 部分防止了輸出城市到自身的距離(0)或者兩個城市不同排列的距離數(shù)據(jù)(London, England 到 London, Ontario 和 London, Ontario 到 London, England 的距離是一樣的)。嘗試取消 ‘WHERE’ 并查看結(jié)果。
這里采取不同的橢球參數(shù)(橢球體名、半主軸長、扁率)計算:
demo=# SELECT p1.name,p2.name,ST_Distance_Spheroid(p1.the_geom,p2.the_geom,'SPHEROID["GRS_1980",6378137,298.257222]')FROMcitiesASp1,citiesASp2WHEREp1.idp2.id;name|name|st_distance_spheroid-----------------+-----------------+----------------------London,Ontario|London,England|5892413.63776489EastLondon,SA|London,England|9756842.65711931EastLondon,SA|London,Ontario|13884149.4140698(3rows)
制圖
以 PostGIS 數(shù)據(jù)制圖需要相應的客戶端支持。包括 Quantum GIS、gvSIG、uDig 在內(nèi)的多種客戶端均可以。以下使用 Quantum GIS:
從 Desktop GIS 菜單啟動 Quantum GIS 并在其 layer 菜單選擇 AddPostGISlayers 。連接到 Natural Earth PostGIS 數(shù)據(jù)庫的參數(shù)在 Connections 下拉菜單中有。這里可以定義和儲存其它的配置。點擊 Edit 可以查看具體參數(shù)。點擊 Connect 連接:
?
系統(tǒng)將顯示所有空間信息表供選擇:
?
選擇 lakes 湖泊表單并點擊底部的 Add 添加。頂部的 Load 可以載入新的數(shù)據(jù)庫連接配置。數(shù)據(jù)將被導入:
?
界面上顯示出湖泊的分布。QGIS 并不理解湖泊一詞的含義,也許不會自動使用藍色。請查看其手冊了解如何設(shè)置。這里縮放到加拿大一處著名的湖泊群。
自動創(chuàng)建空間數(shù)據(jù)表單
OSGeo Live 的多數(shù)桌面 GIS 系統(tǒng)都可以將 shp 等文件導入數(shù)據(jù)庫。這里依然使用 QGIS 演示。
QGIS 中導入 shp 可以使用 PostGIS Manager 插件。在 Plugins 菜單選擇 FetchPlugins 導入最新的官方插件列表(需要網(wǎng)絡(luò)連接)。找到 PostGISManager 點擊 Installplugin 安裝。
?
完成后,在 Plugin 菜單點擊 PostGIS Manager 啟動。也可以點擊工具欄上大象與地球的圖標。
該插件將連接 Natural Earth 數(shù)據(jù)庫。若提示輸入密碼,留空即可。在開啟的界面中,選擇表單可以顯示相應的信息。預覽(Preview)選項卡可以顯示地圖預覽。這里選擇了 populated places 圖層并縮放到一個小島:
?
接下來使用 PostGIS Manager 將 shp 導入數(shù)據(jù)庫。這里使用 R 統(tǒng)計擴展包含的 North Carolina sudden infant death syndrome (SIDS) 數(shù)據(jù):
在 Data 菜單選擇 Loaddatafromshapefile 選項。點擊 ... 選中 R maptools 中的 sids.shp 。
MySQL的主要優(yōu)點 (速度,流行,window,線程,事務(wù))
1、 首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣稱速度是他們追求的主要目標之一,基于這個原因,MySQL在以前的文檔中也曾經(jīng)說過并不準備支持事務(wù)和觸發(fā)器。
2、MySQL比PostgreSQL更流行,流行意味著更多的用戶,意味著經(jīng)受了更多的考驗,意味著更好的商業(yè)支持。而且MySQL提供了多個不同的社區(qū)版、商業(yè)版與企業(yè)版,而PG只提供了單個完整功能的版本。
3、 與PostgreSQL相比,MySQL更適宜在Windows環(huán)境下運行。PostgreSQL在Windows下運 行沒有MySQL穩(wěn)定。
4、MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環(huán)境轉(zhuǎn)換和訪問公用的存儲區(qū)域顯然要比在不同的進程之間要快得多。
5、由于MySQL 4.0.2-alpha開始支持事務(wù)的概念,因此事務(wù)對于MySQL不再成為劣勢。相反,因為MySQL保留無事務(wù)的表類型。這就為用戶提供了更多的選擇。
PostgreSQL的主要優(yōu)點: (協(xié)議,規(guī)范,可靠,進程,查詢)
1、PG遵循的是BSD協(xié)議,完全開源免費且不會被任何商業(yè)公司控制;而MySQL在Oracle手中,慢慢走向封閉。
2 、 PostgreSQL源代碼堪稱C語言的規(guī)范,易讀性比MySQL強很多。
3、可靠性是PostgreSQL的最高優(yōu)先級。它以堅如磐石的品質(zhì)和良好的工程化而聞名。PostgreSQL是完全支持ACID特性的,對于數(shù)據(jù)庫訪問提供了強大的安全性保證。
4、 PG是多進程的,而My是多線程的。雖然并發(fā)不高時,My處理速度快;但是當并發(fā)高時,對于現(xiàn)在的多核的單臺機器上,My的總體性能不如PG,原因是My的線程無法充分利用CPU的能力。
5、PG有很強大的查詢優(yōu)化器,支持很復雜的查詢處理,而My對復雜查詢處理較弱,查詢優(yōu)化器不夠成熟。
PostgreSQL 近幾年在全球的人氣不斷攀升,每年發(fā)布的版本都體現(xiàn)了社區(qū)的活力,9.6作為里程碑式的作品,更加有非常多的新特性加入。
例如
1. 多核并行計算
2. FDW 下推join, sort, where clause.
3. snapshot too old
4. 檢查點平滑fsync
5. vacuum freeze加速
6. sharding base on fdw
7. 分詞增強,支持相鄰phrases搜索,據(jù)說比ES用起來還爽。
8. scale-up 多核增強, 72HT的機器tpc-b select only達到了180萬的tps.
9. 推出等待事件統(tǒng)計信息
10. 支持多副本同步復制,滿足金融級可靠性要求
11. 聚合復用SFUNC,多個聚合如果INIT和SFUNC一致的話,可以節(jié)約非常多的運算開銷。
12. 事務(wù)idle超時機制
還有很多,可以在 release notes頁面查找
除此之外,社區(qū)開發(fā)的一些特性也很吸引人,例如
1. rum插件,支持文本相似度查詢,效率嘛10億級別TOKEN,毫秒級響應,比搜索引擎還好用,具體見云棲社區(qū)的測試文章。
2. LLVM版本的PostgreSQL,對大數(shù)據(jù)量的表達式處理性能提升非常明顯。也是大數(shù)據(jù)處理慣用的手法,例如Impala。雖然PostgreSQL的定位是OLTP,但不代表它不能處理OLAP的請求,而且Gartner去年就提出了HTAP的數(shù)據(jù)庫概念,指即能處理TP有能處理AP的數(shù)據(jù)庫產(chǎn)品,PostgreSQL的特性可見一斑。
3. 10.0版本已經(jīng)加入的聚合算子下推,你是不是開始浮想聯(lián)翩了呢?
更多的插件可以到github , pgxn.org , pgfoundry ,
PostgreSQL 和 MySQL 是將數(shù)據(jù)組織成表的關(guān)系數(shù)據(jù)庫。這些表可以根據(jù)每個表共有的數(shù)據(jù)鏈接或關(guān)聯(lián)。關(guān)系數(shù)據(jù)庫使您的企業(yè)能夠更好地了解可用數(shù)據(jù)之間的關(guān)系,并幫助獲得新的見解以做出更好的決策或發(fā)現(xiàn)新的機會。
PostgreSQL 和 MySQL 都依賴于 SQL(結(jié)構(gòu)化查詢語言),這是與管理系統(tǒng)交互的標準語言。SQL 允許使用具有簡單結(jié)構(gòu)的幾行源代碼連接表,大多數(shù)非技術(shù)員工可以快速學習。
使用 SQL,分析師不需要知道訂單表在磁盤上的位置、如何執(zhí)行查找以查找特定訂單或如何連接訂單表和客戶表。數(shù)據(jù)庫編譯查詢并計算出正確的數(shù)據(jù)點。
MySQL 和 PostgreSQL 都支持 JavaScript Object Notation (JSON) 存儲和傳輸數(shù)據(jù),盡管 PostgreSQL 也支持 JSONB,這是 JSON 的二進制版本,它消除了鍵的重復和無關(guān)的空格。
除了傳統(tǒng)的支持機制外,這兩個數(shù)據(jù)庫都提供強大的社區(qū)支持。
PostgreSQL,也稱為 Postgres,是一種開源關(guān)系數(shù)據(jù)庫,因其可靠性、靈活性和對開放技術(shù)標準的支持而享有盛譽。PostgreSQL 支持非關(guān)系和關(guān)系數(shù)據(jù)類型。它被稱為當今可用的最兼容、最穩(wěn)定和最成熟的關(guān)系數(shù)據(jù)庫之一,并且可以輕松處理復雜的查詢。
PostgreSQL 的特性包括:
PostgreSQL 這是一個“一刀切”的解決方案,適用于許多尋求經(jīng)濟高效的方法來改進其數(shù)據(jù)庫管理系統(tǒng) (DBMS) 的企業(yè)。它具有足夠的可擴展性和多功能性,可以通過強大的擴展生態(tài)系統(tǒng)快速支持各種專業(yè)用例,涵蓋時間序列數(shù)據(jù)類型和地理空間分析等工作。作為開源數(shù)據(jù)庫解決方案構(gòu)建的 PostgreSQL 完全不受許可限制、供應商鎖定的可能性或過度部署的風險。PostgreSQL 通過對象關(guān)系數(shù)據(jù)庫管理系統(tǒng) (ORDBMS) 進行管理。
PostgreSQL 負責管理業(yè)務(wù)活動的在線事務(wù)處理 (OLTP)協(xié)議的企業(yè)數(shù)據(jù)庫管理員提供了理想的解決方案,包括電子商務(wù)、客戶關(guān)系管理系統(tǒng) (CRM) 和財務(wù)分類帳。它也是管理接收、創(chuàng)建和生成的數(shù)據(jù)分析的理想選擇。
這些是 PostgreSQL 的一些主要優(yōu)點:
MySQL — 一種快速、可靠、可擴展且易于使用的開源關(guān)系數(shù)據(jù)庫系統(tǒng) — 旨在處理關(guān)鍵任務(wù)、高負載的生產(chǎn)應用程序。它是一種常見且易于啟動的數(shù)據(jù)庫,內(nèi)存、磁盤和 CPU 利用率較低,有關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDMS) 管理。MySQL Community Edition 是一個由活躍的在線社區(qū)支持的免費下載版本。
MySQL 功能包括所有 SQL 標準命令以及事務(wù)和 ACID 合規(guī)性(代表原子性、一致性、隔離性和持久性)。
兩個最常見的關(guān)系數(shù)據(jù)庫是什么 MySQL 和 Oracle。MySQL 不是 SQL Server 的同義詞,SQL Server 是 Microsoft 許可產(chǎn)品,與 MAC OS X 缺乏兼容性。
MariaDB 經(jīng)常與 MySQL 混淆,它是 MySQL 的一個開源分支,速度更快,提供更多存儲引擎 (12),但功能有限。MySQL 和 MariaDB 使用的存儲引擎都是 InnoDB。InnoDB 提供標準的 ACID 兼容特性。與 MySQL 不同,MariaDB 不支持數(shù)據(jù)屏蔽或動態(tài)列表。
MySQL 通常用作 Web 數(shù)據(jù)庫來存儲各種信息類型,從單個信息數(shù)據(jù)點到為組織提供的產(chǎn)品或服務(wù)的完整列表。它是LAMP(Linux 操作系統(tǒng)、Apache HTTP 服務(wù)器、MySQL RDBMS 和 PHP 編程語言)的基礎(chǔ)組件,這是一種有助于創(chuàng)建API、Web 應用程序和網(wǎng)站的軟件堆棧模型。
MySQL Workbench 是一個單一的、集成的可視化 SQL 平臺,用于 MySQL 數(shù)據(jù)庫的創(chuàng)建、開發(fā)、設(shè)計和管理。
MySQL 為市場提供了許多好處,包括:
PostgreSQL 和 MySQL 之間有很多不同之處。特性、功能和優(yōu)勢方面的一些差異如下:
總之,PostgreSQL 和 MySQL 都有不同的用途,它們之間的選擇取決于企業(yè)目標和資源。一般來說,PostgreSQL 是一個更強大、更高級的數(shù)據(jù)庫管理系統(tǒng),非常適合需要在大型環(huán)境中快速執(zhí)行復雜查詢的組織。但是,對于預算和空間更受限制的公司來說,MySQL 是一個理想的解決方案。