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

HBase高性能隨機查詢之道 – HFile原理解析

大數據
本文將詳細探討HBase的HFile設計,第一部分為HFile原理概述,第二部分介紹了一個HFile從無到有的生成過程,最后部分列出了幾點與HFile有關的附加信息。

在各色數據庫系統百花齊放的今天,能讓大家銘記的,往往是一個數據庫所能帶給大家的差異化能力。正如梁寧老師的產品思維課程中所講到的,這是一個數據庫系統所能帶給產品使用者的"確定性"。

差異化能力通常需要從數據庫底層開始構筑,而數據存儲方式顯得至關重要,因為它直接關乎數據寫入與讀取的效率。在一個系統中,這兩方面的能力需要進行很好的權衡:如果設計有利于數據的快速寫入,可能意味著查詢時需要需要花費較大的精力去組織數據,反之,如果寫入時花費精力去更好的組織數據,查詢就會變的非常輕松。

探討數據庫的數據存儲方式,其實就是探討數據如何在磁盤上進行有效的組織。因為我們通常以如何高效讀取和消費數據為目的,而不是數據存儲本身。在RDBMS領域,因為鍵與數據的組織方式的區別,有兩種表組織結構最為常見,一種是鍵與數據聯合存儲的索引組織表結構,在這種表結構下,查到鍵值意味著查找到數據;另外一種是鍵與數據分離存儲的堆表結構。在這種表結構下,查找到鍵以后,只是拿到了數據記錄的物理地址,還需要基于該物理地址去查找具體的數據記錄。在大數據分析領域,有幾種通用的文件格式,如Parquet, RCFile, ORCFile,CarbonData等等,這些文件大多基于列式的設計結構,來加速通用的分析型查詢。但在實時數據庫領域,卻以各種私有的文件格式最為常見,如Bigtable的SSTable,HBase的HFile,Kudu的DiskRowSets,Cassandra的變種SSTable,MongoDB支持的每一種Storage Engine都是私有的文件格式設計,等等。

本文將詳細探討HBase的HFile設計,第一部分為HFile原理概述,第二部分介紹了一個HFile從無到有的生成過程,最后部分列出了幾點與HFile有關的附加信息。

HFile原理概述

最初的HFile格式(HFile V1),參考了Bigtable的SSTable以及Hadoop的TFile(HADOOP-3315)。如下圖所示:

 

HBase高性能隨機查詢之道 – HFile原理解析

HFile在生成之前,數據在內存中已經是按序組織的。存放用戶數據的KeyValue,被存儲在一個個默認為64kb大小的Data Block中,在Data Index部分存儲了每一個Data Block的索引信息{Offset,Size,FirstKey},而Data Index的索引信息{Data Index Offset, Data Block Count}被存儲在HFile的Trailer部分。除此以外,在Meta Block部分還存儲了Bloom Filter的數據。下圖更直觀的表達出了HFile V1中的數據組織結構:

 

HBase高性能隨機查詢之道 – HFile原理解析

這種設計簡單、直觀。但用過0.90或更老版本的同學,對于這個HFile版本所存在的問題應該深有痛楚:Region Open的時候,需要加載所有的Data Block Index數據,另外,第一次讀取時需要加載所有的Bloom Filter數據到內存中。一個HFile中的Bloom Filter的數據大小可達百MB級別,一個RegionServer啟動時可能需要加載數GB的Data Block Index數據。這在一個大數據量的集群中,幾乎無法忍受。

Data Block Index究竟有多大?

一個Data Block在Data Block Index中的索引信息包含{Offset, Size, FirstKey},BlockOffset使用Long型數字表示,Size使用Int表示即可。假設用戶數據RowKey的長度為50bytes,那么,一個64KB的Data Block在Data Block Index中的一條索引數據大小約為62字節。

假設一個RegionServer中有500個Region,每一個Region的數量為10GB(假設這是Data Blocks的總大小),在這個RegionServer上,約有81920000個Data Blocks,此時,Data Block Index所占用的大小為81920000*62bytes,約為4.7GB。

這是HFile V2設計的初衷,HFile V2期望顯著降低RegionServer啟動時加載HFile的時延,更希望解決一次全量加載數百MB級別的BloomFilter數據帶來的時延過大的問題。下圖是HFile V2的數據組織結構:

 

HBase高性能隨機查詢之道 – HFile原理解析

較之HFile V1,我們來看看HFile V2的幾點顯著變化:

1.分層索引

無論是Data Block Index還是Bloom Filter,都采用了分層索引的設計。

Data Block的索引,在HFile V2中做多可支持三層索引:最底層的Data Block Index稱之為Leaf Index Block,可直接索引到Data Block;中間層稱之為Intermediate Index Block,最上層稱之為Root Data Index,Root Data index存放在一個稱之為”Load-on-open Section“區域,Region Open時會被加載到內存中。基本的索引邏輯為:由Root Data Index索引到Intermediate Block Index,再由Intermediate Block Index索引到Leaf Index Block,最后由Leaf Index Block查找到對應的Data Block。在實際場景中,Intermediate Block Index基本上不會存在,文末部分會通過詳細的計算闡述它基本不存在的原因,因此,索引邏輯被簡化為:由Root Data Index直接索引到Leaf Index Block,再由Leaf Index Block查找到的對應的Data Block。

Bloom Filter也被拆成了多個Bloom Block,在”Load-on-open Section”區域中,同樣存放了所有Bloom Block的索引數據。

2.交叉存放

在”Scanned Block Section“區域,Data Block(存放用戶數據KeyValue)、存放Data Block索引的Leaf Index Block(存放Data Block的索引)與Bloom Block(Bloom Filter數據)交叉存在。

3.按需讀取

無論是Data Block的索引數據,還是Bloom Filter數據,都被拆成了多個Block,基于這樣的設計,無論是索引數據,還是Bloom Filter,都可以按需讀取,避免在Region Open階段或讀取階段一次讀入大量的數據,有效降低時延。

從0.98版本開始,社區引入了HFile V3版本,主要是為了支持Tag特性,在HFile V2基礎上只做了微量改動。在下文內容中,主要圍繞HFile V2的設計展開。

HFile生成流程

在本章節,我們以Flush流程為例,介紹如何一步步生成HFile的流程,來加深大家對于HFile原理的理解。

起初,HFile中并沒有任何Block,數據還存在于MemStore中。

Flush發生時,創建HFile Writer,第一個空的Data Block出現,初始化后的Data Block中為Header部分預留了空間,Header部分用來存放一個Data Block的元數據信息。

而后,位于MemStore中的KeyValues被一個個append到位于內存中的第一個Data Block中:

 

HBase高性能隨機查詢之道 – HFile原理解析

注:如果配置了Data Block Encoding,則會在Append KeyValue的時候進行同步編碼,編碼后的數據不再是單純的KeyValue模式。Data Block Encoding是HBase為了降低KeyValue結構性膨脹而提供的內部編碼機制。上圖中所體現出來的KeyValue,只是為了方便大家理解。當Data Block增長到預設大小(默認64KB)后,一個Data Block被停止寫入,該Data Block將經歷如下一系列處理流程:1.如果有配置啟用壓縮或加密特性,對Data Block的數據按相應的算法進行壓縮和加密。

 

HBase高性能隨機查詢之道 – HFile原理解析

2.在預留的Header區,寫入該Data Block的元數據信息,包含{壓縮前的大小,壓縮后的大小,上一個Block的偏移信息,Checksum元數據信息}等信息,下圖是一個Header的完整結構:

 

HBase高性能隨機查詢之道 – HFile原理解析

3.生成Checksum信息。

 

HBase高性能隨機查詢之道 – HFile原理解析

4.Data Block以及Checksum信息通過HFile Writer中的輸出流寫入到HDFS中。

5.為輸出的Data Block生成一條索引記錄,包含這個Data Block的{起始Key,偏移,大小}信息,這條索引記錄被暫時記錄到內存的Block Index Chunk中:

 

HBase高性能隨機查詢之道 – HFile原理解析

注:上圖中的firstKey并不一定是這個Data Block的第一個Key,有可能是上一個Data Block的最后一個Key與這一個Data Block的第一個Key之間的一個中間值。具體可參考附錄部分的信息。至此,已經寫入了第一個Data Block,并且在Block Index Chunk中記錄了關于這個Data Block的一條索引記錄。隨著Data Blocks數量的不斷增多,Block Index Chunk中的記錄數量也在不斷變多。當Block Index Chunk達到一定大小以后(默認為128KB),Block Index Chunk也經與Data Block的類似處理流程后輸出到HDFS中,形成第一個Leaf Index Block:

 

HBase高性能隨機查詢之道 – HFile原理解析

此時,已輸出的Scanned Block Section部分的構成如下:

 

HBase高性能隨機查詢之道 – HFile原理解析

正是因為Leaf Index Block與Data Block在Scanned Block Section交叉存在,Leaf Index Block被稱之為Inline Block(Bloom Block也屬于Inline Block)。在內存中還有一個Root Block Index Chunk用來記錄每一個Leaf Index Block的索引信息:

 

HBase高性能隨機查詢之道 – HFile原理解析

從Root Index到Leaf Data Block再到Data Block的索引關系如下:

 

HBase高性能隨機查詢之道 – HFile原理解析

我們先假設沒有Bloom Filter數據。當MemStore中所有的KeyValues全部寫完以后,HFile Writer開始在close方法中處理最后的”收尾”工作:

1.寫入最后一個Data Block。

2.寫入最后一個Leaf Index Block。

如上屬于Scanned Block Section部分的”收尾”工作。

3.如果有MetaData則寫入位于Non-Scanned Block Section區域的Meta Blocks,事實上這部分為空。

4.寫Root Block Index Chunk部分數據:

如果Root Block Index Chunk超出了預設大小,則輸出位于Non-Scanned Block Section區域的Intermediate Index Block數據,以及生成并輸出Root Index Block(記錄Intermediate Index Block索引)到Load-On-Open Section部分。

如果未超出大小,則直接輸出為Load-On-Open Section部分的Root Index Block。

5.寫入用來索引Meta Blocks的Meta Index數據(事實上這部分只是寫入一個空的Block)。

6.寫入FileInfo信息,FileInfo中包含:

Max SequenceID, MajorCompaction標記,TimeRanage信息,最早的Timestamp, Data BlockEncoding類型,BloomFilter配置,最大的Timestamp,KeyValue版本,最后一個RowKey,平均的Key長度,平均Value長度,Key比較器等。

7.寫入Bloom Filter元數據與索引數據。

注:前面每一部分信息的寫入,都以Block形式寫入,都包含Header與Data兩部分,Header中的結構也是相同的,只是都有不同的Block Type,在Data部分,每一種類型的Block可以有自己的定義。

8.寫入Trailer部分信息, Trailer中包含:

Root Index Block的Offset,FileInfo部分Offset,Data Block Index的層級,Data Block Index數據總大小,第一個Data Block的Offset,最后一個Data Block的Offset,Comparator信息,Root Index Block的Entries數量,加密算法類型,Meta Index Block的Entries數量,整個HFile文件未壓縮大小,整個HFile中所包含的KeyValue總個數,壓縮算法類型等。

至此,一個完整的HFile已生成。我們可以通過下圖再簡單回顧一下Root Index Block、Leaf Index Block、Data Block所處的位置以及索引關系:

 

HBase高性能隨機查詢之道 – HFile原理解析

簡單起見,上文中刻意忽略了Bloom Filter部分。Bloom Filter被用來快速判斷一條記錄是否在一個大的集合中存在,采用了多個Hash函數+位圖的設計。寫入數據時,一個記錄經X個Hash函數運算后,被映射到位圖中的X個位置,將位圖中的這X個位置寫為1。判斷一條記錄是否存在時,也是通過這個X個Hash函數計算后,獲得X個位置,如果位圖中的這X個位置都為1,則表明該記錄”可能存在”,但如果至少有一個為0,則該記錄”一定不存在”。

詳細信息,大家可以直接參考Wiki,這里不做過多展開。Bloom Filter包含Bloom元數據(Hash函數類型,Hash函數個數等)與位圖數據(BloomData),為了避免每一次讀取時加載所有的Bloom Data,HFile V2中將BloomData部分分成了多個小的Bloom Block。BloomData數據也被當成一類Inline Block,與Data Block、Leaf Index Block交叉存在,而關于Bloom Filter的元數據與多個Bloom Block的索引信息,被存放在Load-On-Open Section部分。但需要注意的是,在FileInfo部分,保存了關于BloomFilter配置類型信息,共包含三種類型:不啟用,基于Row構建BloomFilter,基于Row+Column構建Bloom Filter。混合了BloomFilter Block以后的HFile構成如下圖所示:

 

HBase高性能隨機查詢之道 – HFile原理解析

附錄1 多大的HFile文件才存在Intermiate Index Block

每一個Leaf Index Block大小的計算方法如下(HFileBlockIndex$BlockIndexChunk#getNonRootSize):

 

HBase高性能隨機查詢之道 – HFile原理解析

curTotalNonRootEntrySize是在每次寫入一個新的Entry的時候累加的:

 

HBase高性能隨機查詢之道 – HFile原理解析

這樣子,可以看出來,每一次新增一個Entry,則累計的值為:

  1. 12 + firstKey.length 

假設一個Leaf Index Block可以容納的Data Block的數量為x:

  1. 4 + 4 * (x + 1) + x * (12 + firstKey.length) 

進一步假設,firstKey.length為50bytes。而一個Leaf Index Block的默認最大大小為128KB:

 

  1. 4 + 4 * (x + 1) + x * (12 + 50) = 128 * 1024  
  2. x ≈1986 

也就是說,在假設firstKey.length為50Bytes時,一個128KB的Leaf Index Block所能容納的Data Block數量約為1986個。

我們再來看看Root Index Chunk大小的計算方法:

 

HBase高性能隨機查詢之道 – HFile原理解析

基于firstKey為50 Bytes的假設,每往Root Index Chunk中新增一個Entry(關聯一個Leaf Index Block),那么,curTotalRootSize的累加值為:

  1. 12 + 1 + 50 = 63 

因此,一個128KB的Root Index Chunk可以至少存儲2080個Entries,即可存儲2080個Leaf Index Block。

這樣, 一個Root Index Chunk所關聯的Data Blocks的總量應該為:

  1. 1986 * 2080 = 4,130,880 

而每一個Data Block默認大小為64KB,那么,這個HFile的總大小至少為:

  1. 4,130,880 * 64 * 1024 ≈ 252 GB 

即,基于每一個Block中的FirstKey為50bytes的假設,一個128KB的Root Index Block可容納的HFile文件總大小約為252GB。

如果實際的RowKey小于50 Bytes,或者將Data Block的Size調大,一個128KB的Root Index Chunk所關聯的HFile文件將會更大。因此,在大多數場景中,Intermediate Index Block并不會存在。

附錄2 關于HFile數據查看工具

HBase中提供了一個名為HFilePrettyPrinter的工具,可以以一種直觀的方式查看HFile中的數據,關于該工具的幫助信息,可通過如下命令查看:

 

  1. hbase org.apache.hadoop.hbase.io.hfile.HFile  
  2. References  
  3. HBase Architecture 101 – Storage  
  4. HBASE-3857: Change the HFile Format  
  5. HBase Document: Appendix H: HFile format  
  6. HADOOP-3315: New Binary file format 

SSTable and Log Structured Storage: LevelDB

責任編輯:未麗燕 來源: 華為云社區
相關推薦

2023-11-16 09:01:37

Hadoop數據庫

2024-08-12 08:43:09

2019-04-28 11:06:01

Hbase架構程序員

2024-12-04 10:58:57

TomcatJetty高并發

2023-02-28 09:07:18

ChatGPTAI

2024-09-03 09:15:37

2024-02-19 08:17:10

Kafka消息隊列收發消息

2021-07-05 07:51:43

JVM底層Python

2021-07-12 09:45:36

NameServer 核心Conusmer

2021-01-12 14:46:34

Kubernetes開發存儲

2019-12-06 10:59:20

JavaScript運行引擎

2011-08-12 09:30:02

MongoDB

2022-08-05 20:00:26

架構數據分析

2016-12-27 09:08:34

HBase數據流程

2025-01-13 13:00:00

Go網絡框架nbio

2024-12-24 10:50:05

GinWeb開發

2020-05-21 13:25:43

Spring組件架構

2023-08-11 07:44:40

TCP滑動窗口數據

2021-12-01 18:36:35

屬性

2024-01-29 08:26:13

Span高性能數組數據結構
點贊
收藏

51CTO技術棧公眾號

日韩美一区二区| 亚洲一二三精品| 亚洲少妇视频| 国产精品看片你懂得| 91麻豆国产精品| 欧美激情一区二区视频| 一本久久青青| 欧美一区二区视频网站| 成人中文字幕在线播放| 亚洲精品传媒| 99久久精品国产一区| 国产精品久久久久久久久久99| 色在线观看视频| 久久综合激情网| 精品久久久免费视频| 99日韩精品| 日韩色av导航| 人人妻人人藻人人爽欧美一区| 午夜精品久久久久久毛片| 亚洲va国产va欧美va观看| 亚洲在线视频一区二区| 天天操天天干天天爱| 九九国产精品视频| 国产成人一区二区| 久久精品国产亚洲av无码娇色| 成人黄色小视频| 亚洲第一视频在线观看| 亚洲涩涩在线观看| 国产超碰精品| 亚洲成人免费av| 日本高清xxxx| av在线女优影院| av在线不卡免费看| 亚洲xxx大片| 91影院在线播放| 久久亚洲一区| 欧美一级片在线播放| 国产无套在线观看| 午夜精品999| 久久精品一偷一偷国产| 欧美激情视频二区| 曰本一区二区三区视频| 亚洲国产精品成人精品| 亚洲综合中文网| 欧美成人福利| 欧美日韩一区二区在线观看视频| 青青青在线播放| 一个人看的www视频在线免费观看| 有坂深雪av一区二区精品| 中文字幕在线亚洲三区| av在线资源网| 国产精品久久福利| 一区二区av| 日本在线观看免费| 国产精品福利影院| 在线视频不卡一区二区| 日本最新在线视频| 国产精品福利在线播放| 色中文字幕在线观看| 日本中文字幕在线看| 日本一区二区三区高清不卡| 日韩免费三级| 永久av在线| 中文字幕一区二区三区精华液 | 成人看片爽爽爽| 欧美成va人片在线观看| 91传媒理伦片在线观看| 日本午夜精品| 亚洲人成毛片在线播放| 一二三四在线观看视频| 欧美jizz| 欧美激情在线狂野欧美精品| 日本在线小视频| 香蕉久久久久久久av网站| 国产91在线播放| 亚洲最大成人在线视频| 国产一区二区在线观看免费| 国产成人精品免费视频大全最热 | 精品国产伦一区二区三区观看说明| 欧美精品少妇一区二区三区| 真实乱偷全部视频| 老牛影视av一区二区在线观看| 日韩av一卡二卡| 国产伦理片在线观看| 99re66热这里只有精品8| 久久中文字幕一区| 欧美一级视频免费观看| 秋霞午夜av一区二区三区| 91精品视频在线看| 香蕉久久一区二区三区| 中文字幕不卡在线播放| 欧美午夜性视频| 成人视屏在线观看| 欧美一级欧美一级在线播放| 手机在线看片日韩| 99精品美女| 欧美洲成人男女午夜视频| 亚洲资源在线播放| 97se亚洲国产综合自在线| 一本色道久久综合亚洲精品婷婷 | 日本aaa在线观看| 亚洲欧洲日产国码二区| 丰满少妇久久久| 香蕉久久一区| 日韩精品免费观看| 手机在线中文字幕| 亚洲欧美清纯在线制服| 91超碰在线免费观看| 国产在线电影| 亚洲妇女屁股眼交7| 天堂网在线免费观看| 给我免费播放日韩视频| 日韩中文有码在线视频| 国产精品一区无码| 成人一区二区三区视频在线观看 | 欧美私人免费视频| 亚洲天堂资源在线| 欧美日本久久| 国产日本欧美在线观看| 能在线看的av| 精品magnet| 91人人澡人人爽| 91成人超碰| 国产精品一区二区三区成人| 完全免费av在线播放| 国产一级免费大片| 成人精品影院| 日韩美女视频中文字幕| 少妇一区二区三区四区| 亚洲免费观看在线视频| 最新国产黄色网址| 成人精品电影| 国产精品欧美一区二区| 精品视频三区| 色婷婷精品大视频在线蜜桃视频| 中文字幕在线永久| 亚洲激情国产| 国产伦视频一区二区三区| 少妇av在线| 日韩精品一区在线| 国产va在线播放| 国产精品一区专区| 一本色道久久99精品综合| 日韩专区视频| 久久精品99久久久香蕉| 99草在线视频| 亚洲精品欧美激情| 自拍一级黄色片| 亚洲乱码精品| 97视频中文字幕| 99福利在线| 欧美一二三四在线| 久草资源在线视频| 成人蜜臀av电影| 日韩欧美一区二| 亚洲人成网亚洲欧洲无码| 日韩av色综合| av电影在线网| 欧美日韩性生活| 久艹在线观看视频| 国产精品一区免费在线观看| 久久www视频| 成人av地址| 欧美怡春院一区二区三区| 青青视频在线观| 91成人看片片| 亚洲视频重口味| 国产91综合网| 欧美网站免费观看| 精品国产欧美日韩| 成人免费自拍视频| wwwww亚洲| 日韩激情视频在线| 欧美激情一区二区三区免费观看| 国产精品国产三级国产| 国产a级片视频| 国产精品夜夜夜| 日韩欧美一区二区在线观看 | 91精品视频网| 国产在线观看99| 国产欧美日韩三级| 日韩av福利在线观看| 国产精品入口| 正在播放精油久久| 欧美日韩另类图片| 成人女保姆的销魂服务| 在线免费看h| 久久久av一区| 国产精品国产高清国产| 欧美日韩三级视频| 日韩免费视频网站| 中文在线资源观看网站视频免费不卡| 一起草最新网址| 久久中文在线| 久久亚洲国产成人精品无码区| 亚洲综合福利| 97欧洲一区二区精品免费| 日韩电影免费观| 色综合久综合久久综合久鬼88 | 国产一区二区小视频| 污片在线观看一区二区| 四虎884aa成人精品| 26uuu国产日韩综合| 污免费在线观看| 日韩高清在线不卡| 国产a级片网站| 天天射成人网| 日韩av大全| 精品三级在线观看视频| 91在线直播亚洲| 黄色精品视频| 45www国产精品网站| 污片视频在线免费观看| 中文字幕亚洲国产| 蜜桃视频在线入口www| 精品国产污网站| 97超碰人人草| 欧美影院午夜播放| 亚洲婷婷综合网| 亚洲成人免费在线| 久久99久久久| 亚洲乱码中文字幕| 国产又粗又长又硬| 国产女人aaa级久久久级| 中文在线观看免费视频| 国产精品99久久久久久久vr| 污视频网址在线观看| 日韩中文欧美在线| 99999精品视频| 日韩午夜激情| 无码粉嫩虎白一线天在线观看| 自拍日韩欧美| 成人免费看片视频在线观看| 97视频精品| 在线观看国产一区| 久久麻豆精品| 亚洲一区二区三区色| 日韩理论片av| 亚洲一卡二卡三卡| 日韩视频在线观看| 一本一本a久久| 91精品国产调教在线观看| 性欧美大战久久久久久久免费观看| 亚洲人成精品久久久| 久久一区二区精品| 美女久久99| 日本一区二区在线视频观看| 国产a久久精品一区二区三区 | 91美女福利视频高清| 亚洲精品大片| 91麻豆国产精品| 涩涩屋成人免费视频软件| 97中文在线| 韩国女主播一区二区三区| 国产在线精品一区二区三区》| 国产毛片久久久| 久久精品日产第一区二区三区精品版 | 日本视频中文字幕一区二区三区| 午夜免费一区二区| 另类综合日韩欧美亚洲| 五月天视频在线观看| 国产精品综合二区| 理论片大全免费理伦片| 91蜜桃在线免费视频| 国产精品扒开腿做爽爽| 国产精品嫩草久久久久| 亚洲熟女毛茸茸| 亚洲成年人网站在线观看| 久久国产视频播放| 欧美亚日韩国产aⅴ精品中极品| 国产原创中文av| 精品日产卡一卡二卡麻豆| 三级在线电影| 日韩中文字幕在线精品| 美女精品导航| 国产91亚洲精品| 精品一区二区三区中文字幕视频| 国产精品一区二区av| 国产一区国产二区国产三区| 精品国产三级a∨在线| 在线观看视频免费一区二区三区| 国产成人亚洲精品无码h在线| 蜜乳av一区二区| 中文字幕无人区二| 国产亚洲欧美激情| 九九九久久久久| 日韩欧美在线免费观看| 国产乱色精品成人免费视频| 亚洲精品国产免费| 99se视频在线观看| 国内成人精品一区| 国产一区二区三区影视| 成人性色av| 国产成人短视频在线观看| 小泽玛利亚av在线| 首页综合国产亚洲丝袜| 蜜桃色一区二区三区| 日本一区二区免费在线观看视频| 久久午夜鲁丝片午夜精品| 欧美网站一区二区| 天天爽夜夜爽夜夜爽| 久久精品国产欧美激情| 欧美性xxx| 成人毛片网站| 99久久夜色精品国产亚洲96 | 亚洲午夜色婷婷在线| 欧美精品videossex少妇| 国产精品欧美日韩| 特黄特色欧美大片| 国产美女永久无遮挡| 精品一区中文字幕| 国产又黄又粗视频| 五月综合激情日本mⅴ| av男人天堂网| www.日韩系列| 国产a亚洲精品| 欧美性xxxx69| 一本色道久久综合亚洲| 欧美成熟毛茸茸| 日本一区二区三区dvd视频在线| 快灬快灬一下爽蜜桃在线观看| 激情成人在线视频| 国产综合视频在线| 欧美成年人网站| 图片一区二区| 一区二区不卡视频| 久久国产精品色婷婷| 极品蜜桃臀肥臀-x88av| 欧美性xxxx18| 天堂av网在线| 2019日本中文字幕| 欧美日韩精品一区二区三区在线观看| 欧美这里只有精品| 国产成人午夜视频| 国模无码国产精品视频| 欧美另类高清zo欧美| 日韩av中文| 国产在线播放91| 国产精品国产三级国产在线观看| 色婷婷狠狠18| 国产精品国产三级国产普通话蜜臀| 中文字幕久久熟女蜜桃| 自拍视频国产精品| 亚洲精品一区二区在线播放∴| 亚洲欧美日韩精品久久久| 日韩 欧美一区二区三区| 影音先锋制服丝袜| 欧美日韩精品一区视频| 日韩在线资源| 91在线视频九色| 欧美视频在线观看| yjizz视频| 精品美女久久久久久免费| 少妇高潮久久久| 欧美最猛性xxxx| 欧美日韩国产免费观看视频| 在线免费av播放| 亚洲欧美日韩人成在线播放| 99在线精品视频免费观看20| 欧美国产在线视频| 日韩在线你懂的| 妓院一钑片免看黄大片| 国产精品美女久久久久久久久久久| 国产一区二区网站| 久久久久国产精品www| 天堂在线精品| 国产九九在线视频| 亚洲精品欧美综合四区| 神马午夜在线观看| 日韩av手机在线看| 国产精品久久久久一区二区三区厕所 | 成人爽a毛片免费啪啪动漫| 久久精品日产第一区二区三区精品版| 久久精品一区| 一区二区三区影视| 亚洲国产成人爱av在线播放| jk漫画禁漫成人入口| 亚洲图片在线观看| 丰满白嫩尤物一区二区| 国产嫩bbwbbw高潮| 久久色精品视频| 久久亚洲道色| 蜜臀av免费观看| 亚洲成人av一区二区三区| 国产youjizz在线| 亚洲精品免费网站| 久久久精品五月天| 极品颜值美女露脸啪啪| 亚洲一品av免费观看| 日韩一区二区三区高清在线观看| 国产高清精品在线观看| 亚洲情趣在线观看| 国产三级视频在线看| 成人av中文| 日本午夜精品一区二区三区电影| 欧美日韩精品亚洲精品| 中文日韩在线视频| 秋霞影院一区二区三区| 中文字幕国产高清| 欧美综合天天夜夜久久|