精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

時序數據庫技術體系 – InfluxDB TSM存儲引擎之數據寫入

存儲 存儲軟件
InfluxDB因為其特有的雙LSM引擎而顯得內部結構更加復雜,寫入流程相比其他數據庫來說更加繁瑣。但只要理解了它的數據文件內部組織格式以及倒排索引文件內部組織格式,相信對于整體的把握也并不是很難。

InfluxDB寫入總體框架

InfluxDB提供了多種接口協議供外部應用寫入,比如可以使用collected采集數據上傳,可以使用opentsdb作為輸入,也可以使用http協議以及udp協議批量寫入數據。批量數據進入到InfluxDB之后總體會經過三個步驟的處理,如下圖所示:

1. 批量時序數據shard路由:InfluxDB首先會將這些數據根據shard的不同分成不同的分組,每個分組的時序數據會發送到對應的shard。每個shard相當于HBase中region的概念,是InfluxDB中處理用戶讀寫請求的單機引擎。

2. 倒排索引引擎構建倒排索引:InfluxDB中shard由兩個LSM引擎構成 – 倒排索引引擎和TSM引擎。時序數據首先會經過倒排索引引擎構建倒排索引,倒排索引用來實現InfluxDB的多維查詢。

3. SM引擎持久化時序數據:倒排索引構建成功之后時序數據會進入TSM Engine處理。TMS Engine處理流程和通用LSM Engine基本一樣,先將寫入請求追加寫入WAL日志,再寫入cache,一旦滿足特定條件會將cache中的時序數據執行flush操作落盤形成TSM File。

[[226078]]

批量時序數據Shard路由

通常來說時序數據都會以批量的形式寫入數據庫,很少會像關系型數據庫那樣一條一條寫入,這對于追求高吞吐的時序系統來說至關重要。批量數據寫入InfluxDB之后做的***件事情是分組,將時序數據點按照所屬shard劃分為多組(稱為Shard Map),每組時序數據點將會發送給對應的shard引擎并發處理。

這里我們簡單回顧下InfluxDB的Sharding策略(詳見文章《時序數據庫技術體系 – 初識InfluxDB》中Sharding策略一節)。InfluxDB雖說是單機數據庫,但是每個表依然會被分為多個shard。簡單來說,InfluxDB中sharding屬于兩層sharding:首先按照時間進行Range Sharding,即按時間分片,比如7天一個分片的話,最近7天的數據會分到一個shard,一周前到兩周前的數據會被分到上一個shard,以此類推;在時間分片的基礎上還可以再執行Hash Sharding,按照SeriesKey執行Hash(保證同一個SeriesKey對應的所有數據都落到同一個shard),再將數據分散到指定的多個shard中。

當然,經過筆者深進一步了解,發現單機InfluxDB只有***層sharding,即只有根據時間進行Range Sharding,并沒有執行Hash Sharding。Hash Sharding只會在分布式InfluxDB中才會用到。

倒排索引引擎構建倒排索引

InfluxDB中倒排索引引擎使用LSM引擎構建,上篇文章《時序數據庫技術體系 – InfluxDB 多維查詢之倒排索引》其實已經對引擎的工作原理進行了深入的介紹。這里重點將整個流程做一個串聯梳理,其中細節部分不會展開來講,有興趣的話可以參考上一篇文章。

這里首先思考一個問題:為什么InfluxDB倒排索引需要構建成LSM引擎?其實很簡單,LSM引擎天生對寫友好,寫多讀少的系統***選擇就是LSM引擎,所以大數據時代的各種數據存儲系統就是LSM引擎的天下,HBase、Kudu、Druid、TiKV這些系統無一不是這樣。InfluxDB作為一個時序數據庫更是寫多讀少的典型,無論倒排索引引擎還是時序數據處理引擎選用LSM引擎更是無可厚非。

既然是LSM引擎,工作機制必然是這樣的:首先將數據追加寫入WAL再寫入Cache就可以返回給用戶寫入成功,WAL可以保證即使發生異常宕機也可以恢復出來Cache中丟失的數據。一旦滿足特定條件系統會將Cache中的時序數據執行flush操作落盤形成文件。文件數量超過一定閾值系統會將這些文件合并形成一個大文件。那具體到倒排索引引擎整個流程是什么樣的,簡單來看一下:

1. WAL追加寫入:Inverted Index WAL格式很簡單,由一個一個LogEntry構成,如下圖所示:

每個LogEntry由Flag、Measurement、一系列Key\Value以及Checksum組成。其中Flag表示更新類型,包括寫入、刪除等,Measurement表示數據表,Key\Value表示寫入的Tag Set以及Checksum,其中Checksum用于根據WAL回放數據時驗證LogEntry的完整性。注意,LogEntry中并沒有時序數據列,只有維度列(Tag Set)。

2. Inverted Index在內存中構建

(1)拼SeriesKey: 時序數據寫入到系統之后先將measurement和所有的維度值拼成一個seriesKey;

(2)確認SeriesKey是否已經構建過索引:在文件中確認該seriesKey是否已經存在,如果已經存在就忽略,不需要再將其加入到內存倒排索引。那問題轉化為如何在文件中查找某個seriesKey是否已經存在?這就是Series Block中Bloom Filter的核心作用,首先使用Bloom Filter進行判斷,如果不存在,肯定不存在。如果存在,不一定存在,需要進一步判斷。再進一步使用B+樹以及HashIndex進一步查找判斷;

(3)如果seriesKey在文件中不存在,需要將其寫入內存。倒排索引內存結構主要包含兩個Map:<measurement, List<tagKey>> 和 <tagKey, <tagValue, List<SeriesKey>>>,前者表示時序表與對應維度集合的映射,即這個表中有多少維度列。后者表示每個維度列都有哪些可枚舉的值,以及這些值都對應哪些SeriesKey。InfluxDB中SeriesKey就是一把鑰匙,只有拿到這把鑰匙才能找到這個SeriesKey對應的數據。而倒排索引就是根據一些線索去找這把鑰匙。

3. Inverted Index Cache Flush流程

(1)觸發時機:當Inverted Index WAL日志的大小超過閾值(默認5M),就會執行flush操作將緩存中的兩個Map寫成文件;

(2)基本流程:

  • 緩存Map排序:<measurement, List<tagKey>>以及<tagKey, <tagValue, List<SeriesKey>>都需要經過排序處理,排序的意義在于有序數據可以結合Hash Index實現范圍查詢,另外Series Block中B+樹的構建也需要SeriesKey排序;
  • 構建并持久化Series Block:在排序的基礎上首先持久化<tagKey, tagValue, List<SeriesKey>>結構中所有的SeriesKey,也就是先構建Series Block。依次持久化SeriesKey到SeriesKeyChunk,當Chunk滿了之后,根據Chunk中最小的SeriesKey構建B+樹中的Index Entry節點。當然,Hash Index以及Bloom Filter是需要實時構建的。需要注意的是,Series Block在構建的同時需要記錄下SeriesKey與該Key在文件中偏移量的對應關系,即<SeriesKey, SeriesKeyOffset>,這一點至關重要;
  • 內存中將SeriesKey映射為SeriesId:將<tagKey, <tagValue, List<SeriesKey>>結構中所有的SeriesKey由上一步中得到的<SeriesKey, SeriesKeyOffset >中的SeriesKeyOffset代替。形成新的結構:<tagKey, <tagValue, List<SeriesKeyOffset>>,即<tagKey, <tagValue, List<SeriesKeyId>>>,其中SeriesKeyId就是SeriesKeyOffset;
  • 構建并持久化Tag Block:在新結構<tagKey, <tagValue, List<SeriesKeyId>>>的基礎上首先持久化tagValue,將同一個tagKey下的所有tagValue持久化在一起并生成對應Hash Index寫入文件,接著持久化下一個tagKey的所有tagValue。所有tagValue都持久話完成之后再依次持久化所有的tagKey,形成Tag Block;
  • 構建并持久化Measurement Block:***持久化measurement形成Measurement Block。

時序數據寫入流程

時序數據的維度信息經過倒排索引引擎構建完成之后,接著就需要將數據寫入系統。和倒排索引引擎一樣,數據寫入引擎也是一個LSM引擎,基本流程也是先寫WAL,再寫Cache,***滿足一定閾值條件之后將Cache中的數據flush到文件。

1. WAL追加寫入:時間線數據數據會經過兩重處理,首先格式化為WriteWALEntry對象,該對象字段元素如下圖所示。然后經過snappy壓縮后寫入WAL并持久話到文件。

2. 時序數據寫入內存結構

(1)時序數據點格式化:將所有時間序列數據點按時間線組織形成一個Map:<SeriesKey+FieldKey, List<Value>>,即將相同Key(SeriesKey+FieldKey)的時序數據集中放在一個List中;

(2)時序數據點寫入Cache:InfluxDB中Cache是一個crude hash ring,這個ring由256個partition構成,每個partition負責存儲一部分時序數據Key對應的值。就相當于數據寫入Cache的時候又根據Key Hash了一次,根據Hash結果映射到不同的partition。為什么要這么處理?個人認為有點像Java中ConcurrentHashMap的思路,將一個大HashMap切分成多個小HashMap,每個HashMap內部在寫的時候需要加鎖。這樣處理可以減小鎖粒度,提高寫性能。

3. Data Cache Flush流程(參考engine.compactCache)

(1)觸發時機:Cache執行flush操作有兩個基本觸發條件,其一是當cache大小超過一定閾值,可以通過參數’cache-snapshot-memory-size’配置,默認是25M大小;其二是超過一定時間閾值沒有時序數據寫入WAL也會觸發flush,默認時間閾值為10分鐘,可以通過參數’cache-snapshot-write-cold-duration’配置;

(2)基本流程:在了解了TSM文件的基本結構之后,我們再簡單看看時序數據是如何從內存中的Map持久化成TSM文件的,整個過程可以表述為:

  • 內存中構建Series Data Block:順序遍歷內存Map中的時序數據,分別對時序數據的時間列和數值列進行相應的編碼,按照Series Data Block的格式進行組織,當Block大小超過一定閾值就構建成功。并記錄這個Block內時間列的最小時間MinTime以及***時間MaxTime。
  • 將構建好的Series Data Block寫入文件:使用輸出流將內存中數據輸出到文件,并返回該Block在文件中的偏移量Offset以及總大小Size。
  • 構建文件級別B+索引:在內存中為該Series Data Block構建一個索引節點Index Entry,使用數據Block在文件中的偏移量Offset、總大小Size以及MinTime、MaxTime構建一個Index Entry對象,寫入到內存Series Index Block對象。

這樣,每構建一個Series Data Block并寫入文件之后都會在內存中順序構建一個Index Entry,寫入內存Series Index Block對象。一旦一個Key對應的所有時序數據都持久化完成,一個Series Index Block就構建完成,構建完成之后填充Index Block Meta信息。接著新建一個新的Series Index Block開始構建下一個Key對應的數據索引信息。

InfluxDB數據刪除操作(DropMeasurement,DropTagKey)

一般LSM引擎處理刪除通常都采用Tag標記的方式,即刪除操作和寫入操作流程基本一致,只是數據上會多一個Tag標記 – deleted,表示該值已經被deleted。這種處理方案可以最小化刪除代價,但萬物有得必有失,減小了寫入代價必然會增加讀取代價,Tag標簽方案在讀取的時候需要對標記有deleted的數值進行特殊處理,這個代價還是很大的。HBase中刪除操作就是采用Tag標記方案。

InfluxDB比較奇葩,對于刪除操作處理的比較異類,通常InfluxDB不會刪除一條記錄,而是會刪除某段時間內或者某個維度下的所有記錄,甚至一張表的所有記錄,這和通常的數據庫有所不同。比如:

DROP SERIES FROM h2o_feet WHERE location = ‘santa_monica' DELETE FROM "cpu" DELETE FROM "cpu" WHERE time < '2000-01-01T00:00:00Z' DELETE WHERE time < '2000-01-01T00:00:00Z'

上文我們知道InfluxDB中一個shard有兩個LSM引擎,一個是倒排索引引擎(存儲維度列到SeriesKey的映射關系,方便多維查找),一個是TSM Engine,用來存儲實際的時序數據。如果是刪除一條記錄,通常只需要TSM Engine執行刪除就可以,倒排索引引擎是不需要執行刪除的。而如果是Drop Measurement這樣的操作,那么兩個LSM引擎都需要執行相應的刪除。問題是,這兩個引擎的刪除策略完全不同,TSM Engine采用了一種同步刪除策略,Inverted Index Engine采用了標記刪除策略。如下圖所示:

1. TSM Engine同步刪除策略,整個刪除流程可以分為如下四步:

(1)刪除所有TSM File中滿足條件的series,系統會遍歷當前shard中所有TSM File,檢查該File中是否存在滿足刪除條件的File,如果有會執行如下兩個操作:

  • TSM File Index相關處理:在內存中刪除滿足條件的Index Entry,通常刪除會帶有Time Range以及Key Range,而且TSM File Index會在引擎啟動之后加載到內存。因此刪除操作會將滿足條件的Index Entry從內存中刪除。
  • 生成tombstoner文件:tombstoner文件會記錄當前TSM File中所有被刪除的時序數據,時序數據用[key, min, max]三個字段表示,其中key即SeriesKey+FieldKey,[min, max]表示要刪除的時間段。如下圖所示:

(2)刪除Cache中滿足條件的series;

(3)在WAL中生成一條刪除series的記錄并持久化到硬盤。

2. Inverted Index Engine 標記Tag刪除策略,標記Tag刪除非常簡單,和一次寫入流程基本相同:

(1)在WAL中生成一條flag為deleted的LogEntry并持久化到硬盤;

(2)將要刪除的維度信息寫入Cache,需要標記deleted(設置type=deleted);

(3)當WAL大小超過閾值之后標記為deleted的維度信息會隨Cache Flush到倒排索引文件;

(4)和HBase一樣,Inverted Index Engine中索引信息真正被刪除發生在compact階段。

總結

InfluxDB因為其特有的雙LSM引擎而顯得內部結構更加復雜,寫入流程相比其他數據庫來說更加繁瑣。但只要理解了它的數據文件內部組織格式以及倒排索引文件內部組織格式,相信對于整體的把握也并不是很難。

責任編輯:武曉燕 來源: 數據管理
相關推薦

2017-11-20 11:37:19

時序數據數據存儲HBase

2022-07-11 10:45:12

數據庫分析

2021-09-26 10:08:33

TSDB時序數據庫壓縮解壓

2022-07-06 15:41:55

數據庫

2022-09-23 07:44:48

時序數據庫物聯網

2022-12-18 19:38:31

時序數據庫數據庫

2021-03-01 10:20:52

存儲

2021-03-15 10:10:29

數據庫數據查詢

2021-03-08 10:18:55

數據庫數據Prometheus

2021-02-22 10:37:47

存儲Prometheus

2021-07-30 09:00:00

時序數據庫InfluxDBTimescaleDB

2024-04-02 08:56:56

2022-07-08 11:58:10

數據庫開發

2017-09-05 14:45:14

時序數據數據庫大數據

2022-07-11 11:12:32

數據分析

2022-06-10 17:37:37

數據庫

2017-06-06 15:34:41

物聯網數據庫壓縮

2017-06-05 14:50:33

大數據數據庫壓縮

2020-03-11 09:50:21

時序數據庫快速檢索

2023-09-24 23:22:23

點贊
收藏

51CTO技術棧公眾號

中文字幕在线播放不卡一区| 久久久久久自在自线| 日韩欧美另类在线| 久久久久久久久久久99| 免费看男男www网站入口在线| 日本aⅴ精品一区二区三区| 久久成人免费视频| av直播在线观看| 日韩第二十一页| 婷婷综合另类小说色区| 亚洲一区三区视频在线观看| a毛片毛片av永久免费| 自拍偷拍欧美视频| 亚洲女子a中天字幕| 欧美二级三级| 黄色av网站免费在线观看| 久久久综合网| 欧美激情亚洲国产| 美女av免费看| 五月国产精品| 精品久久国产老人久久综合| 成人免费在线观看视频网站| 国产黄大片在线观看| 亚洲视频综合在线| 日韩av电影免费在线| 欧美性受xxxx狂喷水| 久久av老司机精品网站导航| 欧美性视频精品| 九九视频免费看| 欧美oldwomenvideos| 亚洲人成电影在线| 中国一级特黄录像播放| 日韩三级网址| 欧美丰满美乳xxx高潮www| 妞干网在线免费视频| 激情网站在线| 亚洲免费三区一区二区| 一区二区三区视频在线播放| 国产网站在线播放| 国产亚洲一区二区三区四区| 黄色99视频| 懂色av一区二区三区四区| 国产一区二区三区免费| 91精品国产自产在线| 中文区中文字幕免费看| 老司机精品久久| 国产91|九色| 国产污污视频在线观看| 激情综合中文娱乐网| 欧美激情二区三区| 久草视频免费在线播放| 欧美a级在线| 欧美xxxx18国产| 波多野结衣不卡视频| 91精品国产福利在线观看麻豆| 中文字幕亚洲国产| av资源在线免费观看| 日韩激情图片| 久久精品视频导航| 免费中文字幕在线| 国产精品v一区二区三区| 欧美人与性动交a欧美精品| 欧美色图亚洲视频| 国产综合精品| 2019av中文字幕| 全部毛片永久免费看| 免费亚洲视频| 国产精品网红福利| 国产乱码精品一区二区| 国产乱子伦视频一区二区三区| 91国产丝袜在线放| 黄色片一区二区三区| 久久欧美一区二区| 亚洲视频精品一区| 性欧美ⅴideo另类hd| 亚洲电影激情视频网站| 国产美女三级视频| 91超碰碰碰碰久久久久久综合| 欧美日韩一区 二区 三区 久久精品| 亚洲欧美aaa| 99国产精品免费网站| 精品中文视频在线| 国产男男chinese网站| 成人在线免费观看网站| 免费av在线一区| 久久草视频在线| 久久影院亚洲| 91免费观看网站| 手机在线观看免费av| 国产欧美综合在线观看第十页| 一区二区精品视频| a级片免费在线观看| 欧美一a一片一级一片| 尤物网站在线看| 亚洲宅男网av| 欧美精品性视频| 久久精品视频5| 精彩视频一区二区三区| 好吊色欧美一区二区三区| 成黄免费在线| 性感美女极品91精品| 69久久久久久| 美女视频免费精品| 日韩在线观看av| 国产情侣自拍av| 九色porny丨国产精品| 精品欧美一区二区精品久久| 久草免费在线观看| 日韩欧美在线第一页| 一本久道综合色婷婷五月| 精品麻豆剧传媒av国产九九九| 亚洲欧美另类在线观看| 欧美精品一级片| 美女视频一区二区三区| 久久久久久高清| 午夜av在线播放| 精品1区2区3区| 色天使在线视频| 欧美日本一区二区高清播放视频| 国产成人在线播放| 日本激情一区二区| 亚洲欧美偷拍三级| 中文字幕有码av| 欧美日韩123| 高清一区二区三区日本久| 一区二区www| 久久久久久久性| 人妻无码久久一区二区三区免费| 亚洲精品第一| 国产亚洲精品美女| 黄色片网站在线免费观看| 国产福利91精品一区| 伊人久久青草| 国产激情欧美| 亚洲一级黄色片| 精品人妻无码一区二区性色| av不卡免费电影| 国产精品视频一二三四区| 青草综合视频| 日韩网站在线观看| 中文字幕网址在线| 欧美国产精品专区| 成人性视频欧美一区二区三区| 久久99精品久久久久久欧洲站| 欧美成人免费播放| 99在线精品视频免费观看20| 亚洲日本中文字幕区| 成人日韩在线视频| 国产精品二区不卡| 91精品在线一区| bestiality新另类大全| 日韩一级成人av| 黄页网站免费观看| 大胆亚洲人体视频| 成人午夜视频在线观看免费| 国产精品宾馆| 2019av中文字幕| 久色视频在线| 欧美在线色视频| 永久免费看片视频教学| 精品在线亚洲视频| 午夜在线视频免费观看| 免费一级欧美在线大片| 欧美第一淫aaasss性| 秋霞av鲁丝片一区二区| 福利视频一区二区| www久久久久久久| 国产尤物一区二区在线| 欧美久久久久久久久久久久久久| 好吊妞国产欧美日韩免费观看网站 | 91久久偷偷做嫩草影院电| 欧美高清电影在线看| 日韩一级中文字幕| 91国在线观看| 永久久久久久久| 成人黄色网址在线观看| 男人舔女人下面高潮视频| 欧美激情成人| 国产免费高清一区| 日韩高清在线| 久久这里只有精品视频首页| 日本wwwxxxx| 欧美性猛片xxxx免费看久爱| 国产一区二区视频在线观看免费| 99久久综合精品| 成人性生交免费看| 亚洲一本视频| 日韩妆和欧美的一区二区| 国产日韩一区二区三免费高清| 97香蕉久久超级碰碰高清版| 91社区在线| 亚洲国产91色在线| 在线观看毛片网站| 婷婷中文字幕一区三区| 日本 欧美 国产| 91免费观看在线| 欧美性受xxxx黒人xyx性爽| 国产精品一区毛片| 国产日本欧美在线| 国产精品一线天粉嫩av| 999在线观看免费大全电视剧| 日韩欧美另类一区二区| 欧美激情第三页| 日本高清视频在线播放| 亚洲乱码av中文一区二区| 国产深喉视频一区二区| 色综合欧美在线| 懂色av.com| 亚洲码国产岛国毛片在线| 四虎永久免费在线观看| 成人免费看视频| 在线不卡一区二区三区| 欧美亚洲免费| 五十路熟女丰满大屁股| 亚洲电影影音先锋| 亚洲电影免费| 国产麻豆精品久久| 精品午夜一区二区| 最新国产一区二区| 国产在线精品自拍| 91大神在线观看线路一区| 青青草99啪国产免费| www成人免费观看| 久久97久久97精品免视看| 最新97超碰在线| 亚洲视频在线观看免费| 无码国精品一区二区免费蜜桃 | 欧美综合视频在线| 日韩精品一区二| 国产乱淫a∨片免费观看| 欧美视频一二三区| 无码免费一区二区三区| 激情久久av一区av二区av三区| 欧美人与禽zozzo禽性配| 国产精品久久精品日日| 亚洲高潮女人毛茸茸| 中文字幕高清不卡| 国产农村妇女精品一区| 中文字幕精品综合| 少妇视频一区二区| 中文字幕一区免费在线观看| 少妇高潮惨叫久久久久| 国产精品久久久久久久第一福利| 日韩免费成人av| 国产农村妇女精品| 中文字幕黄色网址| 中文字幕高清一区| 日韩在线视频免费看| 1000部国产精品成人观看| 亚洲AV成人无码精电影在线| 亚洲欧洲另类国产综合| 手机在线免费看片| 亚洲一区二区在线视频| 日韩免费一级片| 欧美视频中文字幕在线| 香蕉污视频在线观看| 欧美亚洲综合网| 一区二区三区亚洲视频| 日韩三级精品电影久久久| 亚洲第一成人av| 亚洲第一中文字幕| 国产精品国产高清国产| 亚洲欧美制服中文字幕| 国产福利第一视频在线播放| 色婷婷综合成人av| 性欧美1819sex性高清大胸| 久久久久久网站| 成年美女黄网站色大片不卡| 国产精品久久久久久久久久久久| 在线不卡一区| 国产精华一区| 国产区精品区| 日本一本草久p| 99综合在线| 色悠悠久久综合网| 成人综合在线观看| 免费一级做a爰片久久毛片潮| 亚洲欧洲色图综合| 日韩黄色a级片| 欧美揉bbbbb揉bbbbb| 国产人妖一区二区三区| 精品视频在线观看日韩| 九色porny在线| 2021国产精品视频| 亚洲国产天堂| 鲁丝一区二区三区免费| 66视频精品| 北条麻妃在线观看| 激情欧美一区二区| theav精尽人亡av| 一区精品在线播放| 一级黄色免费网站| 日韩一区二区电影| 成年人视频免费在线观看| 亚洲3p在线观看| 四虎国产精品免费久久| 国产一区精品视频| 亚州av乱码久久精品蜜桃| 国产精品秘入口18禁麻豆免会员| 九一久久久久久| 精品少妇人妻一区二区黑料社区| 亚洲另类在线视频| 国产成人a v| 亚洲福利小视频| 高潮毛片在线观看| 国产成人精品在线播放| 最新国产一区二区| 午夜啪啪免费视频| 日韩国产欧美在线视频| 艳妇乳肉亭妇荡乳av| 亚洲精品欧美二区三区中文字幕| 日韩熟女精品一区二区三区| 欧美一级淫片007| 95在线视频| 国产97在线|亚洲| 欧美大片网址| 久久综合久久久久| 国产一区二区三区黄视频 | 69精品无码成人久久久久久| 亚洲福利视频三区| 99久久精品国产成人一区二区| 在线亚洲午夜片av大片| 亚洲精品国产精品国产| 国产精品美女黄网| 欧美影视一区| 91pony九色| 国产精品成人免费在线| 中文字幕乱伦视频| 亚洲视频一区二区| 日韩成人动漫| 欧美日韩成人一区二区三区| 国产日韩一区| 亚洲一区二区三区无码久久| 亚洲高清免费视频| www久久久久久| 欧美人在线观看| 久久在线观看| 欧美大片免费播放| 国产精品一区二区三区四区| 三级黄色录像视频| 91精品国产高清一区二区三区蜜臀| 91最新在线| 成人午夜激情免费视频| 9191国语精品高清在线| 中文国产在线观看| 一区二区三区国产精品| 成人免费一级视频| 国模gogo一区二区大胆私拍| 成人影院中文字幕| www插插插无码视频网站| 不卡电影免费在线播放一区| 在线观看黄网站| 亚洲欧美在线第一页| 日韩不卡在线| 亚洲精品国产精品国自产观看| 九色综合狠狠综合久久| 国内偷拍精品视频| 亚洲第一二三四五区| 瑟瑟视频在线看| 日本在线播放一区| 久久99久久99精品免视看婷婷| 永久免费看片直接| 精品免费视频一区二区| 天堂8中文在线最新版在线| 日韩av影视| 国产毛片精品视频| 日本三级2019| 国产午夜精品全部视频播放| 亚洲一区有码| 欧美日韩不卡在线视频| 久久午夜老司机| 国产一区二区自拍视频| 欧美激情一区二区三区久久久| 日韩大胆成人| 国产无色aaa| 午夜私人影院久久久久| 国产精品久久久久久久龚玥菲| 成人福利视频网| 最新成人av网站| 91视频免费在观看| 精品欧美乱码久久久久久1区2区| 欧美色网一区| 91视频成人免费| 久久综合成人精品亚洲另类欧美| 一级二级三级视频| 午夜精品一区二区三区av| 精品国产123区| 少妇献身老头系列| 在线观看成人小视频| 在线看三级电影| 日韩高清在线播放| 国产精品综合在线视频| 波多野结衣家庭主妇| 欧美理论电影在线观看| 久久最新网址| 中文字幕天堂av| 欧美酷刑日本凌虐凌虐| 中国色在线日|韩| 糖心vlog在线免费观看| 国产午夜精品美女毛片视频|