1. 程式人生 > >MySQL 8.0即將GA

MySQL 8.0即將GA

作者:洪斌
文章來源:愛可生資料庫

MySQL 5.x版本在時間跨度之長,僅次於Linux kernel 2.x的釋出了,中間經歷了兩次收購,並沒有影響讓他它的發展勢頭。這個有著20多年曆史的資料庫產品,正重煥新生,變得越來越強大,越來越現代,依然穩坐最流行的開源資料庫的寶座。MySQL 8.0 GA的腳步已經離我們越來越近。

MySQL 版本號一下子從5.x系列跳到了8.0,有人可能會疑惑 6.0和7.0 去哪了。現實情況是6.x沒正式釋出,它一部分特性合併進了5.6 5.7,而MySQL 7.x是MySQL cluster一直沿用的版本號,所以這次主版本號直接跳到了8.0。

MySQL 8.0重要改進

------------------------------
1. MySQL Document Store

2. Default to utf8mb4

3. JSON enhancements

4. CTEs

5. Window Functions

6. Descending Indexes

7. Better Optimizer Cost Model

8. MySQL Server Components

9. Improvement in GIS

10. InnoDB NO WAIT & SKIP LOCKED

11. Temporary Tables Improvements

12. Persistent global variables

13. No more MyISAM System Tables

14. Reclaim UNDO space from large transactions

15. UTF8 performance

16. Removing Query Cache

17. Atomic DDLs

18. Faster & More Complete Performance Schema (Histograms, Indexes, …) and Information Schema

19. ROLES

20. REDO & UNDO logs encrypted if tablespace is encrypted

-------------------------------

C++11

8.0更多的使用C++11標準庫資料結構和函式改進程式碼質量和效率。

* std::atomic — fixed lots of bugs for us over the old use of volatile, replaced home-grown compiler-specific atomic

* thread_local — gave us nice speedups over our old code

* Initializers in structs/classes — simplified construction/destruction

* std::snprintf — replaced the old my_snprintf

* std::unordered_map/std::unordered_set — much faster than the old HASH

* std::call_once — replaced our home-grown my_thread_once

* std::unique_ptr — makes cleanup significantly safer (RAII pattern)

* constexpr functions — enabled some speedups in InnoDB

編譯選項優化

利用現代編譯器的特性提高程式碼質量,增加warning-free編譯選項,使用AddressSanitizer和UndefinedBehaviorSanitizer減少程式碼bug風險。

* C: -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Wwrite-strings -Werror

* CC+: -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Woverloaded-virtual -Wno-missing-field-initializers -Wimplicit-fallthrough=2 -Wlogical-op -Werror

Google C++編碼風格

8.0中拋棄了MySQL Server和InnoDB原有的程式碼風格,採用Google C++編碼風格,更便於閱讀和貢獻程式碼。

原始碼文件管理

從8.0開始使用Doxygen管理原始碼文件,這樣能保證程式碼更新和文件保持同步。

MySQL Source Code Documentationhttps://dev.mysql.com/doc/dev/mysql-server/latest

MySQL 程式碼歷史悠久,官方願意花這麼大力氣的重構程式碼,為MySQL注入新的活力,也預示著MySQL未來會越來越好。

不知道小夥伴們是否留意之前GA的版本號和釋出間隔,MySQL 5.6.9(GA),MySQL 5.7.10(GA),MySQL 8.0.11,GA即將到來。

引用

https://mysqlserverteam.com/mysql-8-0-source-code-improvements/

http://lefred.be/content/top-10-mysql-8-0-features-for-developers/

http://lefred.be/content/top-10-mysql-8-0-features-for-dbas-ops/