真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL5.7中有哪些新特性

本篇內(nèi)容主要講解“MySQL5.7中有哪些新特性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL5.7中有哪些新特性”吧!

創(chuàng)新互聯(lián)專注于北海網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供北海營銷型網(wǎng)站建設(shè),北海網(wǎng)站制作、北海網(wǎng)頁設(shè)計、北海網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造北海網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供北海網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

1、介紹

mysql5.7中,innodb頁結(jié)構(gòu)增加了一個類型FIL_PAGE_COMPRESSED,用來完成Transparent page compression 特性

2、說明

1)壓縮內(nèi)容包括:除去FIL_PAGE_DATA外所有數(shù)據(jù),包括tail
2)壓縮后的內(nèi)容+FIL_PAGE_DATA會以block_size對齊,并將空洞清0。意味著將16K壓縮到9K,也需要12KB的數(shù)據(jù),因此將block_size設(shè)小點,這樣的場景將受益,可以
   減少空間浪費。
3)FIL_PAGE_VERSION內(nèi)容存1;FIL_PAGE_ALGORITHM_V1指哪個壓縮算法:ZLIB、LZ4
   FIL_PAGE_ORIGINAL_TYPE_V1:原始頁類型;
   FIL_PAGE_ORIGINAL_SIZE_V1:原始頁需要壓縮的內(nèi)容大小
   FIL_PAGE_COMPRESS_SIZE_V1:內(nèi)容壓縮后大小
4)目前支持2種壓縮算法:zlib和lz4,可以方便擴展新的算法
5)壓縮只是在持久化磁盤的時候壓縮,內(nèi)存中的頁仍然是原始的樣子

3、用法

表定義:
可以通過CREATE TABLE、ALTER TABLE來定義壓縮表:
  create table t1(i int,b blob) compression='zlib';
也可以選擇compression='lz4'來指定lz4壓縮算法,注意compression屬性的ALTER是立即生效,在做完ALTER COMPRESSION屬性操作后,需要做一次表的rebuild,例如optimize table操作,才能對已有的數(shù)據(jù)做punch hole。compression屬性存儲在frm文件中,以2個字節(jié)存儲字符串長度,隨后存儲compression屬性定義字符串,這也是一個操作系統(tǒng)降級的風險點。

4、代碼分析

點擊(此處)折疊或打開

  1. static

  2. byte*

  3. os_file_compress_page(

  4.     Compression    compression,

  5.     ulint        block_size,//文件系統(tǒng)block大小。通常4K

  6.     byte*        src,//需要壓縮頁的指針

  7.     ulint        src_len,//頁大小

  8.     byte*        dst,//壓縮后,存入目標

  9.     ulint*        dst_len)//壓縮內(nèi)存長度

  10. {

  11.     ulint        len = 0;

  12.     ulint        compression_level = page_zip_level;

  13.     ulint        page_type = mach_read_from_2(src + FIL_PAGE_TYPE);


  14.     //如果要節(jié)省空間,頁大小至少是文件系統(tǒng)block的2倍。壓縮的頁不包括R-tree頁

  15.     if (page_type == FIL_PAGE_RTREE

  16.      || block_size == ULINT_UNDEFINED

  17.      || compression.m_type == Compression::NONE

  18.      || src_len < block_size * 2) {


  19.         *dst_len = src_len;


  20.         return(src);

  21.     }


  22.     /* Must compress to <= N-1 FS blocks. */

  23.     ulint        out_len = src_len - (FIL_PAGE_DATA + block_size);


  24.     /* This is the original data page size - the page header. */

  25.     ulint        content_len = src_len - FIL_PAGE_DATA;


  26.     /* Only compress the data + trailer, leave the header alone */


  27.     switch (compression.m_type) {

  28.     case Compression::NONE:

  29.         ut_error;


  30.     case Compression::ZLIB: {


  31.         uLongf    zlen = static_cast(out_len);


  32.         if (compress2(

  33.             dst + FIL_PAGE_DATA,

  34.             &zlen,

  35.             src + FIL_PAGE_DATA,

  36.             static_cast(content_len),

  37.             static_cast(compression_level)) != Z_OK) {


  38.             *dst_len = src_len;


  39.             return(src);

  40.         }


  41.         len = static_cast(zlen);


  42.         break;

  43.     }


  44.     case Compression::LZ4:


  45.         len = LZ4_compress_default(

  46.             reinterpret_cast(src) + FIL_PAGE_DATA,

  47.             reinterpret_cast(dst) + FIL_PAGE_DATA,

  48.             static_cast(content_len),

  49.             static_cast(out_len));


  50.         if (len == 0 || len >= out_len) {


  51.             *dst_len = src_len;


  52.             return(src);

  53.         }


  54.         break;


  55.     default:

  56.         *dst_len = src_len;

  57.         return(src);

  58.     }


  59.     /* Copy the header as is. */

  60.     memmove(dst, src, FIL_PAGE_DATA);


  61.     /* Add compression control information. Required for decompressing. */

  62.     mach_write_to_2(dst + FIL_PAGE_TYPE, FIL_PAGE_COMPRESSED);


  63.     mach_write_to_1(dst + FIL_PAGE_VERSION, 1);


  64.     mach_write_to_1(dst + FIL_PAGE_ALGORITHM_V1, compression.m_type);


  65.     mach_write_to_2(dst + FIL_PAGE_ORIGINAL_TYPE_V1, page_type);


  66.     mach_write_to_2(dst + FIL_PAGE_ORIGINAL_SIZE_V1, content_len);


  67.     mach_write_to_2(dst + FIL_PAGE_COMPRESS_SIZE_V1, len);


  68.     /* Round to the next full block size */


  69.     len += FIL_PAGE_DATA;


  70.     *dst_len = ut_calc_align(len, block_size);


  71.     /* Clear out the unused portion of the page. */

  72.     if (len % block_size) {

  73.         memset(dst + len, 0x0, block_size - (len % block_size));

  74.     }


  75.     return(dst);

  76. }

到此,相信大家對“MySQL5.7中有哪些新特性”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!


當前名稱:MySQL5.7中有哪些新特性
標題來源:http://weahome.cn/article/goicpo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部