最受開發者歡迎的HTAP資料庫PostgreSQL10特性
標籤
PostgreSQL , 10 , 特性 , 開發者
背景
作為一款HTAP資料庫(同時支援 “OLTP高併發線上事務處理” 與 “OLAP線上分析” 業務場景),PostgreSQL 10的哪些特性是開發人員、DBA、架構師都喜歡的呢?
多核並行增強
9.6的版本支援如下並行:
Sequential scans
Aggregates
Hash and loop joins
10 並行增強:
1、通過 max_parallel_workers 控制最大並行度,
可以避免分析型SQL把資源全部耗光。從而支援HTAP混合型業務。
2、新增的並行索引掃描
Regular index scans (btree)
Index Only scans (btree)
Bitmap Heap Scan
Index still scanned serially
3、並行的合併JOIN
Merge joins
4、多表掃描(append scan)支援並行排序
Merge Sort
fdw 聚合下推
FDW聚合下推,使得PostgreSQL 10可以作為一個任意資料庫的sharding管理節點,用於分發路由SQL,支援where, sort, join, select-clause, agg等下推。
邏輯訂閱
邏輯訂閱有很多用途:
1、遷移、大版本升級
2、數倉聚合
3、拆庫
4、多個業務系統共享、分發資料
5、多master架構
分割槽
內建的分割槽功能,不需要依賴外掛。
《PostgreSQL 10 內建分割槽 vs pg_pathman perf profiling》
《PostgreSQL 10.0 preview 功能增強 – 內建分割槽表》
libpq支援failover和load balance
libpq支援配置多個連線地址,同時支援failover和負載均衡。
《PostgreSQL 10.0 preview 功能增強 – libpq支援多主機連線(failover,LB)讓資料庫HA和應用配合更緊密》
事務狀態可查詢
使用者可以根據事務號,查詢事務的狀態。實現業務層的控制,包括閃回等功能。
《PostgreSQL flashback(閃回) 功能實現與介紹》
《PostgreSQL 10.0 preview 功能增強 – 更強可靠性, 過去式事務狀態可查(杜絕unknown事務)》
任意多副本同步 – 金融級可靠性
使用者可以根據事務的重要性,選擇需要落幾個副本(WAL),從而實現多副本持久化。
《PG多節點(quorum based), 0丟失 HA(failover,switchover)方案》
自定義多列混合統計資訊
統計資訊可以用於評估SQL的執行成本、檢視資料分佈、估算唯一值、估算記錄數、檢視資料儲存的相關性 等。預設情況下,資料庫的柱狀圖是單列的,當輸入多列條件時,使用多列統計資訊,可以估算更加精確的成本。實現更精準的執行計劃。
hash index增強(持久化、效能)
PostgreSQL 10 hash index支援持久化(寫WAL),同時在vacuum, 查詢效能等方面都有巨大的優化。如果是等值查詢,或者超長列,使用hash index可以獲得比btree更好的效能。
重新命名列舉值
是的,列舉值可以rename了。
JSON,JSONB全文檢索
JSON, JSONB型別,支援全文檢索。
The functions ts_headline() and to_tsvector() can now be used on these data types.
file_fdw支援命令列返回值作為源
file_fdw是一個檔案外部表介面,用於將檔案作為外部表資料來源來使用,現在,file_fdw支援command的輸出結果作為外部表的輸入源了。
CREATE FOREIGN TABLE
test(a int, b text)
SERVER csv
OPTIONS (program `gunzip -c /tmp/data.csv.gz`);
不依賴OS層的通用全球化支援 – ICU庫
編譯時,使用ICU
–with-icu
Build with support for the ICU library.
This requires the ICU4C package to be installed.
The minimum required version of ICU4C is currently 4.2.
By default, pkg-config will be used to find the required compilation options.
This is supported for ICU4C version 4.6 and later.
For older versions, or if pkg-config is not available,
the variables ICU_CFLAGS and ICU_LIBS can be specified to configure, like in this example:
./configure … –with-icu ICU_CFLAGS=`-I/some/where/include` ICU_LIBS=`-L/some/where/lib -licui18n -licuuc -licudata`
(If ICU4C is in the default search path for the compiler,
then you still need to specify a nonempty string in order to avoid use of pkg-config,
for example, ICU_CFLAGS=` `.)
例子
SELECT * FROM t ORDER BY a COLLATE "sv-SE-x-icu";
valle
vera
walle
wera
SELECT * FROM t ORDER BY a COLLATE "sv-SE-u-co-standard-x-icu";
valle
walle
vera
wera
scram-sha-256 安全認證
《PostgreSQL 10.0 preview 安全增強 – SASL認證方法 之 scram-sha-256 安全認證機制》
監控角色
新增了一些內建的監控角色,不需要使用SUPERUSER,只要給了這些角色,就可以獲得讀一些系統表的許可權,或者獲得殺會話的許可權。
便於管理,提高了安全性。
postgres=# select * from pg_roles ;
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid
----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200
pg_read_all_stats | f | t | f | f | f | f | -1 | ******** | | f | | 3375
pg_monitor | f | t | f | f | f | f | -1 | ******** | | f | | 3373
pg_read_all_settings | f | t | f | f | f | f | -1 | ******** | | f | | 3374
pg_stat_scan_tables | f | t | f | f | f | f | -1 | ******** | | f | | 3377
動態檢視增強 – 新增系統程式的狀態監控
postgres=# select pid,backend_type,wait_event_type,wait_event from pg_stat_activity ;
pid | backend_type | wait_event_type | wait_event
-------+---------------------+-----------------+---------------------
2077 | background worker | Activity | LogicalLauncherMain
2074 | autovacuum launcher | Activity | AutoVacuumMain
15397 | client backend | |
2072 | background writer | Activity | BgWriterMain
2071 | checkpointer | Activity | CheckpointerMain
2073 | walwriter | Activity | WalWriterMain
(6 rows)
等待事件
https://www.postgresql.org/docs/10/static/monitoring-stats.html#monitoring-stats-views
新增了一些等待事件。
Latches
Extensions
Client/socket
Timeout
...
I/O events
Reads
Writes
Individually identified
IDENTITY列
實際上就是自增列,相容SQL Server。PG原有的serial, default sequence都可以實現類似的功能。
《PostgreSQL 10 新特性 – identity column (serial, 自增)》
XMLTABLE
https://www.postgresql.org/docs/current/static/functions-xml.html#functions-xml-processing-xmltable
xml的支援更加強大了。xmltable可以將XML解析為一張表輸出。
CREATE TABLE xmldata AS SELECT
xml $$
<ROWS>
<ROW id="1">
<COUNTRY_ID>AU</COUNTRY_ID>
<COUNTRY_NAME>Australia</COUNTRY_NAME>
</ROW>
<ROW id="5">
<COUNTRY_ID>JP</COUNTRY_ID>
<COUNTRY_NAME>Japan</COUNTRY_NAME>
<PREMIER_NAME>Shinzo Abe</PREMIER_NAME>
<SIZE unit="sq_mi">145935</SIZE>
</ROW>
<ROW id="6">
<COUNTRY_ID>SG</COUNTRY_ID>
<COUNTRY_NAME>Singapore</COUNTRY_NAME>
<SIZE unit="sq_km">697</SIZE>
</ROW>
</ROWS>
$$ AS data;
SELECT xmltable.*
FROM xmldata,
XMLTABLE(`//ROWS/ROW`
PASSING data
COLUMNS id int PATH `@id`,
ordinality FOR ORDINALITY,
"COUNTRY_NAME" text,
country_id text PATH `COUNTRY_ID`,
size_sq_km float PATH `SIZE[@unit = "sq_km"]`,
size_other text PATH
`concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)`,
premier_name text PATH `PREMIER_NAME` DEFAULT `not specified`) ;
id | ordinality | COUNTRY_NAME | country_id | size_sq_km | size_other | premier_name
----+------------+--------------+------------+------------+--------------+---------------
1 | 1 | Australia | AU | | | not specified
5 | 2 | Japan | JP | | 145935 sq_mi | Shinzo Abe
6 | 3 | Singapore | SG | 697 | | not specified
流式物理備庫支援snapshot
備庫支援快照,意味著可以在備庫建立一致性的並行任務,比如pg_dump在備庫可以支援並行備份。
排序效能優化
語句級觸發器支援transition tables
支援transition tables,在AFTER語句級觸發器中,通過這個transition tables,可以得到語句中觸及的所有行。
方便批處理,提高效能。
AFTER trigger transition tables
《PostgreSQL 10.0 preview 功能增強 – 觸發器函式內建中間表》
參考
1、PostgreSQL 特性全矩陣
https://www.postgresql.org/about/featurematrix/
2、PostgreSQL 特性矩陣
http://www.cybertec.at/best-of-postgresql-10-for-the-developer/
5、A look at the Elephants Trunk – PostgreSQL 10
6、PostgreSQL 10 New Features With Examples
7、https://www.postgresql.org/about/press/presskit10/
8、https://wiki.postgresql.org/wiki/New_in_postgres_10
相關文章
- 最受歡迎的 NoSQL 和關係型資料庫SQL資料庫
- D3,最受歡迎的前端資料視覺化庫前端視覺化
- 恆訊科技分析:哪些是跨境電商最受歡迎的資料庫?資料庫
- HackerRank 開發者調查報告:Python 最受歡迎Python
- 10款最受Python開發者歡迎的Python IDEPythonIDE
- 墨天輪最受DBA歡迎的資料庫技術文件-監控篇資料庫
- 墨天輪最受DBA歡迎的資料庫技術文件-巡檢篇資料庫
- GitHub 十個最受歡迎的 React 相關庫GithubReact
- 最受歡迎PHP框架Laravel 5.5 新特性 提前體驗PHP框架Laravel
- 墨天輪最受DBA歡迎的資料庫技術文件-SQL優化篇資料庫SQL優化
- 墨天輪最受DBA歡迎的資料庫技術文件-容災備份篇資料庫
- 墨天輪最受DBA歡迎的資料庫技術文件-故障處理案例篇資料庫
- 美國最受歡迎的臺式電腦品牌(附原資料表)
- 15 種最受歡迎的資料視覺化流程圖及模板視覺化流程圖
- 推薦10個最受歡迎的 Vue.js UI 庫Vue.jsUI
- DB-Engines:2019年全球最受歡迎資料庫 MySQL奪冠資料庫MySql
- 最受DevOps歡迎的五種工具dev
- 全球最受歡迎的8位Java大牛Java
- Docker Hub 最受歡迎的10大映象Docker
- 2019年10個最受歡迎的JavaScript動畫庫!JavaScript動畫
- 2016年度最受歡迎的100個 Java 庫Java
- 2018 年最受歡迎的15個Python 庫,成都大資料分析培訓Python大資料
- 權威釋出丨2021 中國最受開發者歡迎的技術活動
- 年度最受歡迎的開源CHROME外掛Chrome
- 最知名的遊戲公司就最受歡迎嗎?遊戲
- 2017年最受歡迎的UI框架UI框架
- 20個最受歡迎的Linux命令(轉)Linux
- 最受歡迎的5個Android ORM框架AndroidORM框架
- 最受歡迎的App開發工具推薦APP
- 誰是原神中最受歡迎的女性角色?資料說明一切
- 想成為高階程式設計師?最受歡迎的十大資料庫,全給你了!程式設計師大資料資料庫
- 虛擬現實頭盔哪款最受歡迎?看看開發者怎麼說
- GDC:16%遊戲開發者正在開發VR遊戲 Oculus平臺最受歡迎遊戲開發VR
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- 盤點|2021最受開發者歡迎和最具行業影響力的文章行業
- 權威釋出丨2022 中國最受開發者歡迎的技術活動
- 2021年英國小吃最受歡迎比例(附原資料表)
- 連續 3 年最受歡迎:Rust,香!Rust