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

Apache Flink 漫談系列(12) - Time Interval(Time-windowed) JOIN

開發 開發工具
本篇將介紹在UnBounded數據流上按時間維度進行數據劃分進行JOIN操作 - Time Interval(Time-windowed)JOIN, 后面我們叫做Interval JOIN。

一、說什么

JOIN 算子是數據處理的核心算子,前面我們在《Apache Flink 漫談系列(09) - JOIN 算子》介紹了UnBounded的雙流JOIN,在《Apache Flink 漫談系列(10) - JOIN LATERAL》介紹了單流與UDTF的JOIN操作,在《Apache Flink 漫談系列(11) - Temporal Table JOIN》又介紹了單流與版本表的JOIN,本篇將介紹在UnBounded數據流上按時間維度進行數據劃分進行JOIN操作 - Time Interval(Time-windowed)JOIN, 后面我們叫做Interval JOIN。

二、實際問題

前面章節我們介紹了Flink中對各種JOIN的支持,那么想想下面的查詢需求之前介紹的JOIN能否滿足?需求描述如下:

比如有一個訂單表Orders(orderId, productName, orderTime)和付款表Payment(orderId, payType, payTime)。 假設我們要統計下單一小時內付款的訂單信息。

1. 傳統數據庫解決方式

在傳統劉數據庫中完成上面的需求非常簡單,查詢sql如下::

  1. SELECT 
  2. o.orderId, 
  3. o.productName, 
  4. p.payType, 
  5. o.orderTime, 
  6. payTime 
  7. FROM 
  8. Orders AS o JOIN Payment AS p ON 
  9. o.orderId = p.orderId AND p.payTime >= orderTime AND p.payTime < orderTime + 3600 // 秒 

上面查詢可以***的完成查詢需求,那么在Apache Flink里面應該如何完成上面的需求呢?

2. Apache Flink解決方式

(1) UnBounded 雙流 JOIN

上面查詢需求我們很容易想到利用《Apache Flink 漫談系列(09) - JOIN 算子》介紹了UnBounded的雙流JOIN,SQL語句如下:

  1. SELECT 
  2. o.orderId, 
  3. o.productName, 
  4. p.payType, 
  5. o.orderTime, 
  6. payTime 
  7. FROM 
  8. Orders AS o JOIN Payment AS p ON 
  9. o.orderId = p.orderId AND p.payTime >= orderTime AND p.payTime as timestamp < TIMESTAMPADD(SECOND, 3600, orderTime) 

UnBounded雙流JOIN可以解決上面問題,這個示例和本篇要介紹的Interval JOIN有什么關系呢?

(2) 性能問題

雖然我們利用UnBounded的JOIN能解決上面的問題,但是仔細分析用戶需求,會發現這個需求場景訂單信息和付款信息并不需要長期存儲,比如2018-12-27 14:22:22的訂單只需要保持1小時,因為超過1個小時的訂單如果沒有被付款就是無效訂單了。同樣付款信息也不需要長期保持,2018-12-27 14:22:22的訂單付款信息如果是2018-12-27 15:22:22以后到達的那么我們也沒有必要保存到State中。 而對于UnBounded的雙流JOIN我們會一直將數據保存到State中,如下示意圖:

這樣的底層實現,對于當前需求有不必要的性能損失。所以我們有必要開發一種新的可以清除State的JOIN方式(Interval JOIN)來高性能的完成上面的查詢需求。

(3) 功能擴展

目前的UnBounded的雙流JOIN是后面是沒有辦法再進行Event-Time的Window Aggregate的。也就是下面的語句在Apache Flink上面是無法支持的:

  1. SELECT COUNT(*) FROM ( 
  2. SELECT 
  3. ..., 
  4. payTime 
  5. FROM Orders AS o JOIN Payment AS p ON 
  6. o.orderId = p.orderId 
  7. ) GROUP BY TUMBLE(payTime, INTERVAL '15' MINUTE) 

因為在UnBounded的雙流JOIN中無法保證payTime的值一定大于WaterMark(WaterMark相關可以查閱<>). Apache Flink的Interval JOIN之后可以進行Event-Time的Window Aggregate。

3. Interval JOIN

為了完成上面需求,并且解決性能和功能擴展的問題,Apache Flink在1.4開始開發了Time-windowed Join,也就是本文所說的Interval JOIN。接下來我們詳細介紹Interval JOIN的語法,語義和實現原理。

三、什么是Interval JOIN

Interval JOIN 相對于UnBounded的雙流JOIN來說是Bounded JOIN。就是每條流的每一條數據會與另一條流上的不同時間區域的數據進行JOIN。對應Apache Flink官方文檔的 Time-windowed JOIN(release-1.7之前都叫Time-Windowed JOIN)。

1. Interval JOIN 語法

  1. SELECT ... FROM t1 JOIN t2 ON t1.key = t2.key AND TIMEBOUND_EXPRESSION 

TIMEBOUND_EXPRESSION 有兩種寫法,如下:

  • L.time between LowerBound(R.time) and UpperBound(R.time)
  • R.time between LowerBound(L.time) and UpperBound(L.time)
  • 帶有時間屬性(L.time/R.time)的比較表達式。

2. Interval JOIN 語義

Interval JOIN 的語義就是每條數據對應一個 Interval 的數據區間,比如有一個訂單表Orders(orderId, productName, orderTime)和付款表Payment(orderId, payType, payTime)。 假設我們要統計在下單一小時內付款的訂單信息。SQL查詢如下:

  1. SELECT 
  2. o.orderId, 
  3. o.productName, 
  4. p.payType, 
  5. o.orderTime, 
  6. cast(payTime as timestamp) as payTime 
  7. FROM 
  8. Orders AS o JOIN Payment AS p ON 
  9. o.orderId = p.orderId AND 
  10. p.payTime BETWEEN orderTime AND 
  11. orderTime + INTERVAL '1' HOUR 
  • Orders訂單數據

  • Payment付款數據

符合語義的預期結果是 訂單id為003的信息不出現在結果表中,因為下單時間2018-12-26 04:53:24.0, 付款時間是 2018-12-26 05:53:30.0超過了1小時付款。

那么預期的結果信息如下:

這樣Id為003的訂單是無效訂單,可以更新庫存繼續售賣。

接下來我們以圖示的方式直觀說明Interval JOIN的語義,我們對上面的示例需求稍微變化一下: 訂單可以預付款(不管是否合理,我們只是為了說明語義)也就是訂單 前后 1小時的付款都是有效的。SQL語句如下:

  1. SELECT 
  2. ... 
  3. FROM 
  4. Orders AS o JOIN Payment AS p ON 
  5. o.orderId = p.orderId AND 
  6. p.payTime BETWEEN orderTime - INTERVAL '1' HOUR AND 
  7. orderTime + INTERVAL '1' HOUR 

這樣的查詢語義示意圖如下:

上圖有幾個關鍵點,如下:

  • 數據JOIN的區間 - 比如Order時間為3的訂單會在付款時間為[2, 4]區間進行JOIN。
  • WaterMark - 比如圖示Order***一條數據時間是3,Payment***一條數據時間是5,那么WaterMark是根據實際最小值減去UpperBound生成,即:Min(3,5)-1 = 2
  • 過期數據 - 出于性能和存儲的考慮,要將過期數據清除,如圖當WaterMark是2的時候時間為2以前的數據過期了,可以被清除。

3. Interval JOIN 實現原理

由于Interval JOIN和雙流JOIN類似都要存儲左右兩邊的數據,所以底層實現中仍然是利用State進行數據的存儲。流計算的特點是數據不停的流入,我們可以不停的進行增量計算,也就是我們每條數據流入都可以進行JOIN計算。我們還是以具體示例和圖示來說明內部計算邏輯,如下圖:

簡單解釋一下每條記錄的處理邏輯如下:

實際的內部邏輯會比描述的復雜的多,大家可以根據如上簡述理解內部原理即可。

四、示例代碼

我們還是以訂單和付款示例,將完整代碼分享給大家,具體如下(代碼基于flink-1.7.0):

  1. import java.sql.Timestamp 
  2.  
  3. import org.apache.flink.api.scala._ 
  4. import org.apache.flink.streaming.api.TimeCharacteristic 
  5. import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor 
  6. import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment 
  7. import org.apache.flink.streaming.api.windowing.time.Time 
  8. import org.apache.flink.table.api.TableEnvironment 
  9. import org.apache.flink.table.api.scala._ 
  10. import org.apache.flink.types.Row 
  11.  
  12. import scala.collection.mutable 
  13.  
  14. object SimpleTimeIntervalJoin { 
  15. def main(args: Array[String]): Unit = { 
  16. val env = StreamExecutionEnvironment.getExecutionEnvironment 
  17. val tEnv = TableEnvironment.getTableEnvironment(env) 
  18. env.setParallelism(1) 
  19. env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) 
  20. // 構造訂單數據 
  21. val ordersData = new mutable.MutableList[(String, String, Timestamp)] 
  22. ordersData.+=(("001", "iphone", new Timestamp(1545800002000L))) 
  23. ordersData.+=(("002", "mac", new Timestamp(1545800003000L))) 
  24. ordersData.+=(("003", "book", new Timestamp(1545800004000L))) 
  25. ordersData.+=(("004", "cup", new Timestamp(1545800018000L))) 
  26.  
  27. // 構造付款表 
  28. val paymentData = new mutable.MutableList[(String, String, Timestamp)] 
  29. paymentData.+=(("001", "alipay", new Timestamp(1545803501000L))) 
  30. paymentData.+=(("002", "card", new Timestamp(1545803602000L))) 
  31. paymentData.+=(("003", "card", new Timestamp(1545803610000L))) 
  32. paymentData.+=(("004", "alipay", new Timestamp(1545803611000L))) 
  33. val orders = env 
  34. .fromCollection(ordersData) 
  35. .assignTimestampsAndWatermarks(new TimestampExtractor[String, String]()) 
  36. .toTable(tEnv, 'orderId, 'productName, 'orderTime.rowtime) 
  37. val ratesHistory = env 
  38. .fromCollection(paymentData) 
  39. .assignTimestampsAndWatermarks(new TimestampExtractor[String, String]()) 
  40. .toTable(tEnv, 'orderId, 'payType, 'payTime.rowtime) 
  41.  
  42. tEnv.registerTable("Orders", orders) 
  43. tEnv.registerTable("Payment", ratesHistory) 
  44.  
  45. var sqlQuery = 
  46. ""
  47. |SELECT 
  48. | o.orderId, 
  49. | o.productName, 
  50. | p.payType, 
  51. | o.orderTime, 
  52. | cast(payTime as timestamp) as payTime 
  53. |FROM 
  54. | Orders AS o JOIN Payment AS p ON o.orderId = p.orderId AND 
  55. | p.payTime BETWEEN orderTime AND orderTime + INTERVAL '1' HOUR 
  56. |""".stripMargin 
  57. tEnv.registerTable("TemporalJoinResult", tEnv.sqlQuery(sqlQuery)) 
  58.  
  59. val result = tEnv.scan("TemporalJoinResult").toAppendStream[Row] 
  60. result.print() 
  61. env.execute() 
  62.  
  63.  
  64. class TimestampExtractor[T1, T2] 
  65. extends BoundedOutOfOrdernessTimestampExtractor[(T1, T2, Timestamp)](Time.seconds(10)) { 
  66. override def extractTimestamp(element: (T1, T2, Timestamp)): Long = { 
  67. element._3.getTime 

運行結果如下:

五、小節

本篇由實際業務需求場景切入,介紹了相同業務需求既可以利用Unbounded 雙流JOIN實現,也可以利用Time Interval JOIN來實現,Time Interval JOIN 性能優于UnBounded的雙流JOIN,并且Interval JOIN之后可以進行Window Aggregate算子計算。然后介紹了Interval JOIN的語法,語義和實現原理,***將訂單和付款的完整示例代碼分享給大家。期望本篇能夠讓大家對Apache Flink Time Interval JOIN有一個具體的了解!

關于點贊和評論

本系列文章難免有很多缺陷和不足,真誠希望讀者對有收獲的篇章給予點贊鼓勵,對有不足的篇章給予反饋和建議,先行感謝大家!

作者:孫金城,花名 金竹,目前就職于阿里巴巴,自2015年以來一直投入于基于Apache Flink的阿里巴巴計算平臺Blink的設計研發工作。

【本文為51CTO專欄作者“金竹”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-07-13 12:53:59

數據存儲

2018-11-20 07:59:43

Apache Flin JOIN算子代碼

2018-11-29 09:01:26

Apache FlinJOIN代碼

2018-12-11 17:28:22

Apache FlinJOIN代碼

2022-06-10 17:26:07

數據集計算

2018-09-26 08:44:22

Apache Flin流計算計算模式

2018-09-26 07:50:52

Apache Flin流計算計算模式

2018-10-16 08:54:35

Apache Flin流計算State

2018-10-09 10:55:52

Apache FlinWatermark流計算

2018-11-14 09:01:23

Apache FlinSQL代碼

2018-10-22 21:43:39

Apache Flin流計算Fault Toler

2019-01-03 10:17:53

Apache FlinTable API代碼

2022-07-13 13:03:29

流計算亂序

2022-07-12 10:38:25

分布式框架

2018-11-07 08:48:31

Apache Flin持續查詢流計算

2019-01-15 08:50:12

Apache FlinKafka分布式

2018-10-30 14:08:45

Apache Flin流表對偶duality

2022-07-12 11:01:03

數據庫

2022-08-31 14:49:05

IoTDBIoTDatabase

2025-04-25 10:28:40

點贊
收藏

51CTO技術棧公眾號

免费成人毛片| 少妇人妻精品一区二区三区| 日韩在线精品| 欧美成人女星排名| 免费午夜视频在线观看| 久操视频在线播放| 成人在线视频首页| 国产精品第二页| 青青草成人免费| 国产精品自拍区| 日韩精品一区二区三区视频播放| 欧美性久久久久| 91极品在线| 国产欧美一区二区在线| 91亚洲va在线va天堂va国| 亚洲天堂日韩av| 中文字幕一区二区三区在线视频 | 欧美亚洲激情| 精品久久久影院| 向日葵污视频在线观看| 妞干网免费在线视频| 国产精品乱人伦中文| 国产在线精品一区二区三区| 中文字幕一区2区3区| 亚洲精品护士| www.亚洲一区| 成人午夜剧场视频网站| 欧美午夜在线播放| 欧美日韩亚洲另类| 国产精品wwwww| 老色鬼在线视频| 一区二区欧美国产| 综合久久国产| 日韩理伦片在线| 91色porny| 国产99午夜精品一区二区三区 | 久久国产高清| 69视频在线播放| 国产精品6666| 国户精品久久久久久久久久久不卡| 伊人久久男人天堂| 素人fc2av清纯18岁| 国产精品99久久免费观看| 欧美一区2区视频在线观看| 激情视频免费网站| 精品成人免费一区二区在线播放| 五月天亚洲精品| 精品国产av无码一区二区三区| 午夜精品一区| 中文字幕在线不卡一区二区三区| 欧美一区免费视频| 日韩午夜影院| 久久久久久99久久久精品网站| 久久久久国产精品视频| 天天干天天舔天天射| www.av精品| 另类视频在线观看+1080p| 亚洲AV第二区国产精品| 99热这里都是精品| 免费在线观看91| 欧美成熟毛茸茸| 国产欧美一区二区三区在线看蜜臀| 日韩精彩视频| 成人亚洲综合天堂| 国产精品久久久久国产精品日日| 亚洲一区二区三区精品在线观看| 成人动漫在线免费观看| 中文字幕欧美区| 中文字幕在线中文字幕日亚韩一区| 国产高清一区二区三区视频| 亚洲精品欧美专区| 99er在线视频| 欧美伦理91| 色婷婷激情久久| 自拍偷拍21p| 色播一区二区| 亚洲精品久久久久国产| 一区二区不卡免费视频| 精品国产一区二区三区久久久樱花 | 中文字幕免费高清电视剧网站在线观看| 亚洲女性喷水在线观看一区| 真实国产乱子伦对白视频| 僵尸再翻生在线观看| 日本黄色一区二区| 国产在线观看中文字幕| 精品网站aaa| 中文字幕日韩专区| 久久久久久久久久久97| 欧美亚洲三级| 成人写真视频福利网| 亚洲精品911| 久久久精品国产免费观看同学| 一区在线电影| 欧美男人天堂| 欧美一区二区三区四区久久 | 最近日韩免费视频| 国产精品一区二区x88av| 精品人伦一区二区三区| 在线观看免费网站黄| 亚洲综合色丁香婷婷六月图片| 日韩精品一区二区三区久久| 国产91在线播放精品| 欧美大胆人体bbbb| 公肉吊粗大爽色翁浪妇视频| 欧美+亚洲+精品+三区| 77777少妇光屁股久久一区| 中文文字幕一区二区三三| 国产精品自拍一区| 日韩动漫在线观看| 丁香花在线电影小说观看| 欧美专区亚洲专区| 日韩av手机在线播放| 手机亚洲手机国产手机日韩| 国外成人免费在线播放| 在线观看毛片视频| 99riav一区二区三区| 国产一区一区三区| 精品成人av| 日韩国产高清视频在线| 欧美成人aaa片一区国产精品| 三级一区在线视频先锋| 国产精品免费看一区二区三区| 国产精品久久久久一区二区国产| 午夜精品久久一牛影视| 亚洲国产精品人久久电影| 男人操女人下面视频| 九九久久婷婷| 午夜精品在线观看| 国产福利小视频| 国产精品大尺度| 国产无套粉嫩白浆内谢的出处| 极品国产人妖chinesets亚洲人妖| 久久精品亚洲精品| 中文字幕在线网址| 国产欧美一区二区精品性| 91av资源网| 亲子伦视频一区二区三区| 欧美激情精品久久久久久大尺度| 99热这里只有精| 一区在线观看视频| 午夜精品中文字幕| 国产精品成人av| 国产日韩精品视频| 免费在线观看黄| 欧美人伦禁忌dvd放荡欲情| 人人妻人人澡人人爽| 日韩制服丝袜av| 日韩欧美在线观看强乱免费| 成人做爰视频www网站小优视频| 日韩av一区二区在线| 日韩精品成人一区| 99精品国产视频| 国产91美女视频| 九九综合久久| 国产精品视频99| 久草资源在线观看| 日韩天堂在线观看| 国产亚洲欧美精品久久久久久| 福利电影一区二区| 阿v天堂2017| 国内成人精品| 国产精品丝袜高跟| 91亚洲天堂| 亚洲精品国产欧美| 亚洲第一网站在线观看| 国产精品欧美久久久久一区二区| 欧美婷婷精品激情| 亚洲国产老妈| 国产精品久久久久久久天堂第1集| 黑人精品视频| 亚洲欧美日韩图片| 国产又黄又猛又爽| 亚洲电影一级黄| 免费污网站在线观看| 老司机免费视频一区二区| 天天想你在线观看完整版电影免费| 亚洲日本va中文字幕| 欧美中文字幕在线| 日本高清视频在线播放| 精品久久久久久久久久久久包黑料| 亚洲国产精一区二区三区性色| 久久美女高清视频| 国产欧美精品一二三| 国产精品久久777777毛茸茸 | 国产91aaa| 日本高清不卡一区二区三区视频| www.日韩系列| 亚洲av成人精品一区二区三区在线播放| 在线视频一区二区三| 538精品在线观看| 久久一区二区三区国产精品| 岛国av在线免费| 亚洲五月婷婷| 亚洲狠狠婷婷综合久久久| 日韩三级精品| 国产精品热视频| av中文字幕在线观看第一页 | 国精产品一区一区三区mba下载| 亚洲欧美日韩精品久久亚洲区| 国产露脸国语对白在线| 欧美日韩综合视频| 欧美极品视频在线观看| 欧美激情一区二区三区| 日韩av无码一区二区三区不卡| 蜜桃久久av一区| 人妻熟妇乱又伦精品视频| 51精产品一区一区三区| 欧美日韩亚洲一区二区三区四区| 日本在线一区二区三区| 国产精品久久久久久久久借妻| heyzo高清中文字幕在线| www.亚洲男人天堂| 国产香蕉在线| 精品亚洲夜色av98在线观看| 精品国产无码一区二区三区| 在线亚洲免费视频| 日韩欧美国产亚洲| 一区二区三区欧美视频| 免费91在线观看| 国产视频一区二区在线| free性中国hd国语露脸| 风间由美一区二区三区在线观看| 涩涩网站在线看| 免费观看30秒视频久久| 无码人妻丰满熟妇区五十路百度| 在线观看不卡| 成年在线观看视频| 911久久香蕉国产线看观看| 亚洲国产另类久久久精品极度| 婷婷五月色综合香五月| 国产视频精品网| 91蜜桃臀久久一区二区| 999国内精品视频在线| 成人精品在线| 成人淫片在线看| **国产精品| 91九色国产视频| 精品一区二区三区四区五区| 成人免费视频网址| 国产精品美女久久久久人| 国产专区精品视频| 亚洲国产91视频| 成人免费视频网| 日本一区二区三区播放| 91在线看网站| 一区视频网站| 国产日韩欧美一区二区| 午夜精品影视国产一区在线麻豆| 国产在线精品一区| 午夜先锋成人动漫在线| 麻豆成人小视频| 九九综合久久| 亚洲一区三区电影在线观看| 久久久久久久久久久久久久| 91免费视频黄| 中文字幕在线网址| 亚洲一区二区三区四区在线免费观看 | 欧美探花视频资源| 中文字幕观看视频| 69堂国产成人免费视频| www.国产视频| 亚洲精品第一国产综合精品| 欧美xxx.com| 中文字幕亚洲无线码a| 福利在线视频网站| 欧美极品美女视频网站在线观看免费| 国产黄色大片在线观看| 欧美一区二区三区免费视| 中文字幕你懂的| 国产真实乱对白精彩久久| 天天干天天爽天天射| 国产一区二区福利视频| 在线播放第一页| 久久婷婷久久一区二区三区| 极品蜜桃臀肥臀-x88av| 亚洲色图一区二区| 国产午夜视频在线| 日韩欧美精品在线观看| 91九色蝌蚪91por成人| 欧美成人国产一区二区| 青青视频在线观| 久久精品国产一区二区三区| 黑人另类精品××××性爽| 国产福利精品视频| 欧美经典影片视频网站| 亚洲免费精彩视频| 国模无码国产精品视频| 午夜亚洲国产au精品一区二区 | 欧美美女黄视频| 黄色片一区二区三区| 国产香蕉97碰碰久久人人| 自由的xxxx在线视频| 国产精品福利网| 99久久人爽人人添人人澡| 四虎一区二区| 亚洲精品在线二区| 亚洲三级在线观看视频| 91免费观看在线| 1024手机在线视频| 欧美在线视频日韩| 手机看片国产1024| 久久国产精品影片| 午夜无码国产理论在线| 成人综合色站| 台湾佬中文在线| 色噜噜久久综合| www.亚洲欧美| 精品精品国产国产自在线| 欧美成人h版| 国产精品大全| 91精品电影| 亚洲狼人综合干| 97精品超碰一区二区三区| 国产一二三区精品| 欧美三级在线视频| 免费在线国产| 欧美亚洲国产精品| 国产精品传媒| 日韩在线视频在线| 国产精品一区二区久久精品爱涩 | 国产老肥熟一区二区三区| 日韩欧美中文视频| 国产精品人妖ts系列视频| 国产尤物在线视频| 亚洲精品一区二区在线观看| 黄色网页在线观看| 国产日韩欧美电影在线观看| 国产欧美日韩视频在线| 俄罗斯av网站| 99久久精品免费看国产免费软件| 精品国产乱码久久久久久鸭王1| 欧美性感一区二区三区| 国产最新视频在线| 日本国产欧美一区二区三区| 久久精品66| 91免费黄视频| av网站免费线看精品| 黄色激情视频在线观看| 精品欧美乱码久久久久久1区2区| 四虎免费在线视频| 337p粉嫩大胆色噜噜噜噜亚洲| 福利所第一导航| 日韩午夜在线观看视频| www视频在线看| 99电影在线观看| 欧美日韩国产精品一区二区亚洲| 污免费在线观看| 亚洲综合在线第一页| 亚洲av无码乱码国产麻豆| 欧美日韩福利视频| 动漫av一区| 国产一区二区在线视频播放| 99久久99久久久精品齐齐| 香蕉免费毛片视频| 亚洲免费av片| 九九热这里有精品| 男人草女人视频| 不卡视频在线观看| 亚洲欧美自拍视频| 亚洲一区二区久久久| 在线不卡一区| 91动漫在线看| 久久久噜噜噜久噜久久综合| 日本成人一级片| 麻豆成人在线看| 久久这里只有精品一区二区| 国模吧无码一区二区三区| 国产午夜亚洲精品羞羞网站| 免费在线不卡av| 欧美剧在线观看| 日本一区福利在线| 三级视频中文字幕| 亚洲免费大片在线观看| 人妻精品一区二区三区| 日韩美女在线观看| 亚洲成av人片乱码色午夜| 国产一线在线观看| 在线一区二区三区四区五区| 欧美三级理伦电影| 狠狠色综合网站久久久久久久| 久久一区欧美| 91人妻一区二区三区蜜臀| 日韩av有码在线| 日韩成人免费av| 久久这里只有精品23| 国产欧美精品一区二区色综合朱莉| 国产又黄又大又粗的视频| 亚州国产精品久久久| 日韩在线观看| 精品国产人妻一区二区三区| 欧美日韩久久久| 91av久久| 一区二区三区视频| 91一区在线观看| 国产又大又长又粗| 日韩美女视频免费在线观看| 欧美99在线视频观看| 亚洲最大成人综合网| 精品国一区二区三区| 欧美亚洲综合视频|