成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL時間序列存儲引擎的設(shè)計與實現(xiàn)

運(yùn)維 數(shù)據(jù)庫運(yùn)維
功能層是存儲引擎的核心,由于設(shè)計目標(biāo)的不同,存儲引擎的功能層所提供的功能也是不同的。比如innobase引擎的功能層,提供了事務(wù)ACID/數(shù)據(jù)存儲/元信息管理/MVCC等一系列功能,提供完整的數(shù)據(jù)庫功能;再如CSV存儲引擎,僅提供字符類型的行存儲。這些不同功能的存儲引擎組件,在MySQL的框架下,提供多種多樣的服務(wù)。

作者簡介

姜宇翔,攜程技術(shù)保障中心高級研究員。具有十多年數(shù)據(jù)庫領(lǐng)域開發(fā)經(jīng)驗,曾參與國產(chǎn)自主品牌達(dá)夢數(shù)據(jù)庫版本4到版本7開發(fā)的全過程,具有豐富的數(shù)據(jù)庫知識和開發(fā)經(jīng)驗。

加入攜程后,主攻MySQL的源碼研究和改造,在MySQL的存儲引擎/主從復(fù)制/審計等領(lǐng)域皆有貢獻(xiàn),并對各種特性需求,進(jìn)行針對性的功能開發(fā)。

當(dāng)我們使用MySQL的時候,經(jīng)常感慨多引擎下數(shù)據(jù)管理的靈活。不論是innobase這樣帶有ACID特性的數(shù)據(jù)引擎后端,還是black hole這樣吃掉數(shù)據(jù)什么也不做的數(shù)據(jù)引擎后端,都在不同場合發(fā)揮著自己的作用。

享受著各種存儲引擎帶來的便利時,我們也注意到MySQL的存儲引擎開發(fā)在國內(nèi)還是一片藍(lán)海。畢竟這種以插件方式加載到MySQL的數(shù)據(jù)后端,是一個較深涉及到底層的領(lǐng)域,數(shù)據(jù)庫底層開發(fā)在國內(nèi)也只有一少部分開發(fā)者走在這條路上。這不能不說是一個遺憾的事情。

攜程技術(shù)保障中心的MySQL時間序列存儲引擎緣起于一次討論,討論的議題是關(guān)于哪個時間序列數(shù)據(jù)庫更適合攜程環(huán)境。在這次日常的自由討論中,有人突發(fā)奇想的提出,我們是否可以開發(fā)一個MySQL的時間序列存儲引擎?沒有已有的時間序列數(shù)據(jù)部署的繁瑣,沒有那些各具特色的接口調(diào)用,不需要熟悉新的系統(tǒng),還是以SQL的方式來進(jìn)行數(shù)據(jù)的訪問。

首先,讓我們看看OpenTSDB是什么樣的情況。下圖便是OpenTSDB的部署與運(yùn)行圖示。OpenTSDB的后端存儲是HBASE,需要在各個server上部署信息收集的前端,通過dashboard展示信息。對于現(xiàn)有的時間序列數(shù)據(jù)庫,每一個都有自己的部署與運(yùn)行方案。而這些方案并不具備架構(gòu)上的通用性。 

 

 

 

我們所期望的架構(gòu)是除了底層的存儲組件不同,對于MySQL的用戶來說沒有什么不同。已有的大部分運(yùn)維經(jīng)驗(HA、復(fù)制、備份等等)和已有的開發(fā)經(jīng)驗(插入、刪除和更新的操作)都可以繼承自之前的積累,這是任何一個使用MySQL的公司所希望的情況。就如下圖所展示的架構(gòu),對于上層用戶來說,感覺不到太多的變化。用戶可以通過標(biāo)準(zhǔn)的SQL編寫自己的應(yīng)用客戶端來完成數(shù)據(jù)的采集和展示,提高靈活性。

經(jīng)過以上的考量,產(chǎn)生了我們的試驗產(chǎn)品,存儲引擎CFL(ctrip fast log),該引擎能夠以快速的日志方式進(jìn)行數(shù)據(jù)的記錄。其完成后就如下圖所示,滿足之前所設(shè)想的種種情況。 

 

 

 

技術(shù)介紹

從層次結(jié)構(gòu)來看,MySQL的存儲引擎分為兩個部分。一是實現(xiàn)存儲功能相關(guān)的組件,該層提供存儲引擎的具體功能(增刪改查),我們稱之為功能層;一是和MySQL插件接口對接的組件,該層將MySQL的功能調(diào)用轉(zhuǎn)換為存儲引擎的功能調(diào)用,我們稱之為接口層。如下圖所示,數(shù)據(jù)庫的操作(諸如增刪改查等操作)將通過引擎管理層達(dá)到存儲引擎的接口層,再由接口層到達(dá)功能層。 

 

 

 

功能層

功能層是存儲引擎的核心,由于設(shè)計目標(biāo)的不同,存儲引擎的功能層所提供的功能也是不同的。比如innobase引擎的功能層,提供了事務(wù)ACID/數(shù)據(jù)存儲/元信息管理/MVCC等一系列功能,提供完整的數(shù)據(jù)庫功能;再如CSV存儲引擎,僅提供字符類型的行存儲。這些不同功能的存儲引擎組件,在MySQL的框架下,提供多種多樣的服務(wù)。

介紹攜程時間序列存儲引擎的功能層將從兩個主要方面介紹。一是功能層的架構(gòu),也就是運(yùn)行時涉及到的對象和這些對象的作用;一是進(jìn)行持久化的存儲,該部分將說明在文件層面,數(shù)據(jù)是如何存儲的。

架構(gòu)

CFL的架構(gòu)設(shè)計目標(biāo)是盡可能的提高數(shù)據(jù)的插入效率,因此并行處理的想法需要貫穿始終。其機(jī)制為,不同會話并行的將數(shù)據(jù)向表對象中插入;表對象通過緩沖區(qū)保存插入的數(shù)據(jù),當(dāng)緩沖區(qū)寫滿之后,緩沖區(qū)加入磁盤寫入隊列,通過專門的寫盤線程并發(fā)的寫入磁盤。

下圖為攜程時間序列存儲引擎的架構(gòu): 

 

 

 

存儲

在設(shè)計存儲的時候,根據(jù)時序數(shù)據(jù)庫的特點(diǎn),首先考慮的是插入的效率,然后是快速的故障恢復(fù)。針對插入效率,在設(shè)計數(shù)據(jù)結(jié)構(gòu)時,采用嚴(yán)格的順序?qū)懭氩呗裕源藖肀WC連續(xù)插入的效率。這樣不論在傳統(tǒng)硬盤還是在SSD硬盤上,都可以高效的寫入。針對快速故障恢復(fù),通過控制寫入順序(依次寫入數(shù)據(jù)、索引和控制信息),實現(xiàn)快速的恢復(fù)。***考慮實現(xiàn)上的簡易性,采用索引和數(shù)據(jù)分別存儲的方式,降低在同一文件中進(jìn)行存儲管理的控制。 

 

 

 

接口層

程序片段

如下代碼片段為接口層部分。

MySQL提供的基類handler,存儲引擎需要提供繼承自該類,并實現(xiàn)基類中如ha_open/ha_close等功能函數(shù)的類。 

 

 

 

繼承handler類的攜程時間序列數(shù)據(jù)庫的類。 

 

 

 

接口層架構(gòu)

該部分將以ha_cfl為例,說明MySQL存儲引擎管理層和引擎接口之間的關(guān)系。 

 

 

 

操作發(fā)送給會話后,會話從引擎管理層獲取到ha_cfl的對象,將操作轉(zhuǎn)化為對ha_cfl接口的調(diào)用,該步驟完成了SQL到存儲引擎接口的對接。

ha_cfl接口接到調(diào)用后,將調(diào)用轉(zhuǎn)化為對表對象的操作,完成handler接口功能到表對象的實現(xiàn)的對接。

效果

通過對時間序列數(shù)據(jù)進(jìn)行針對性的開發(fā),CFL存儲引擎的插入性能相對于InnoDB和MyISAM引擎有很大的提高。

引擎\insert線程

1線程(ips)

3線程(ips)

6線程(ips)

CFL

3700

5700

8400

MyISAM

3300

4500

6000

InnoDB

1900

2100

3000

2核ssd虛擬機(jī)

  

ips:insert per second 

總結(jié)

由于本次開發(fā)為探索性質(zhì)的開發(fā),時間上或者人力上的限制使產(chǎn)品還不夠完善,不論是設(shè)計還是實現(xiàn)上都存在需要改進(jìn)的地方。如,創(chuàng)建表時對時間戳類型使用和索引列的指定存在限制,導(dǎo)致無法創(chuàng)建多列索引,僅能夠創(chuàng)建時間索引。存儲結(jié)構(gòu)的限制導(dǎo)致刪除和更新無法快速靈活的進(jìn)行。

但在資源有限的情況下,完成一個概念完整和實現(xiàn)完整的產(chǎn)品。而且正是通過這次探索性開發(fā),打開了MySQL存儲引擎的一扇大門,不論從整體架構(gòu)到實現(xiàn)細(xì)節(jié)都有深入研究,積累了很多經(jīng)驗。攜程技術(shù)保障中心DBA團(tuán)隊希望這些經(jīng)驗在將來能夠為國內(nèi)的MySQL社區(qū)提供幫助。 

責(zé)任編輯:龐桂玉 來源: 攜程技術(shù)中心
相關(guān)推薦

2010-05-21 10:58:19

MySQL存儲引擎

2010-06-13 13:50:02

MySQL存儲引擎

2022-09-12 07:17:20

redis命令redissynce

2019-01-14 14:25:25

MySQL存儲邏輯架構(gòu)

2010-05-21 16:10:28

2018-06-14 10:44:59

MySQLMyISAMInnoDB

2018-09-11 10:30:18

MySQL存儲引擎數(shù)據(jù)備份

2015-05-20 10:05:10

Ceph分布式文件系統(tǒng)序列化

2023-11-22 08:35:34

存儲引擎bitcask

2022-01-04 09:15:28

存儲Bitcask引擎

2010-05-14 17:44:47

MySQL數(shù)據(jù)庫

2021-08-10 14:29:06

MySQL數(shù)據(jù)庫存儲

2010-05-21 15:53:30

2020-02-18 16:07:17

物聯(lián)網(wǎng)表存儲數(shù)據(jù)庫

2011-05-03 10:09:37

MySQL存儲引擎

2018-08-31 10:53:25

MySQL存儲引擎

2012-03-20 11:16:24

MySQLMyISAM

2009-02-02 09:31:25

MySQL存儲引擎MyISAM

2018-10-16 14:26:22

分布式塊存儲引擎

2010-11-23 11:27:53

MySQL MyISA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国内精品久久久久 | 中文字幕一区二区三区精彩视频 | 黄色精品 | 麻豆亚洲| 日韩精品视频在线免费观看 | 黄色片在线免费看 | 91在线视频免费观看 | 亚洲电影第三页 | 国产免费看 | 亚洲国产精品日韩av不卡在线 | 麻豆精品一区二区三区在线观看 | 精品视频国产 | 国产免费一二三区 | 日韩在线视频一区 | 亚州av在线 | 亚洲欧美视频 | a级大片 | 91色站| 日本一区二区三区四区 | 国产一区高清 | jizz亚洲人| 天天夜夜操 | 九九热热九九 | 97超碰在线免费 | 日韩视频免费看 | 亚洲人成人一区二区在线观看 | 亚洲精品68久久久一区 | 国产成人精品一区二区三区视频 | 97精品国产一区二区三区 | aa级毛片毛片免费观看久 | 日韩色图在线观看 | 国产精品久久久久久久久久 | h视频在线看 | 99久久精品免费看国产小宝寻花 | 亚洲一区综合 | 一区影视 | 日本三级电影免费 | 四虎最新 | 亚洲社区在线 | 成人深夜福利 | 午夜精品影院 |