午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 詳解數據庫中跨庫數據表的運算

詳解數據庫中跨庫數據表的運算

熱門標簽:ai電話電話機器人 河北便宜電銷機器人軟件 泗洪正規電話機器人找哪家 怎么去開發一個電銷機器人 湖南保險智能外呼系統產品介紹 簡單的智能語音電銷機器人 小程序智能電話機器人 南昌呼叫中心外呼系統哪家好 怎么申請400熱線電話

1. 簡單合并(FROM)

所謂跨庫數據表,是指邏輯上同一張數據表被分別存儲在不同數據庫中。其原因有可能是因為數據量太大,放在一個數據庫難以處理,也可能在業務上就需要將生產庫和歷史庫分開。而不同的數據庫,可能只是部署在不同的機器上的同種數據庫,也可能是連類型都不同的數據庫系統。

在面對跨庫數據表,特別是數據庫類型都不相同的情況時,數據庫自帶的工具往往就力所不及了,一般都需要尋找能夠很好地支持多數據源類型的第三方工具,而集算器,可以說是其中的佼佼者了。下面,我們就針對幾種常見的跨庫混合運算情況詳細討論一下:

跨庫運算,簡單粗暴的思路就是把散布在各個庫里的邏輯上相同的數據表合并成一個表,然后在這一個表上進行運算。

例如,在兩個數據庫 HSQL 和 MYSQL 中,分別存儲了一張學生成績表,兩者各自保存了一部分學生信息,如下圖所示:

利用集算器,我們可以很容易地將這兩個結構相同的表合并為一個表,集算器的 SPL 腳本如下:

A1、A2 和 B1、B2 分別讀取了兩個庫里的學生成績表,而 A3 用一種簡單直觀的方式就把兩個表合并了。

這種方式實際上是把兩個表都讀入了內存,分別生成了集算器的序表對象,然后利用序表的運算“|”完成了合并。可能有的同學會問:如果我的數據量比較大,無法全部讀入內存怎么辦?沒關系,專為處理大數據而生的集算器,決不會被這么簡單的小問題難住。我們可以使用游標,同樣可以實現表的快速拼接:

A2、B2 分別用游標打開兩個庫里的學生成績表,A3 則使用 conjx() 函數將這兩個游標合并,形成了一個新的可以同時訪問兩個表的游標。

對應于 SQL,這種簡單合并好比只是完成了 from 工作,讓結構相同的跨庫表的數據“縱向”拼接成了一個可以訪問的序表或者游標,而實際運算中,還會涉及過濾 (where/having)、分組聚合 (group+sum/count/avg/max/min)、連接 (join+on)、去重 (distinct)、排序 (order)、取部分數據 (limit+offset),等等操作,下面我們就將對這些運算一一展開討論。

當然,我們在處理這些運算的需求時,不能只是簡單的實現功能,我們還需要考慮實現的效率和性能,因此原則上,我們會盡量利用數據庫的計算能力,而集算器主要負責混合運算。不過,有時也需要由集算器負責幾乎所有的運算,數據庫僅僅負責存儲數據。

2. WHERE

where 過濾的本質是通過比較計算,去除比較的結果是 false 的記錄,因此 where 只作用于一條記錄,不涉及記錄之間的運算,也不需要考慮數據位于哪個數據庫。比如,在前面的例子中,我們要統計出“一班”所有同學的“數學”成績,單庫中的 SQL 是這樣的:

SELECT 學生 ID, 成績 FROM 學生成績表 WHERE 科目 ='數學' AND 班級 =‘一班'

多庫時,也只要將 where 子句直接寫在 SQL 中,讓各個數據庫去并行處理過濾就可以了:

我們也可以讓集算器負責所有過濾運算,數據庫僅存儲數據。這時可以使用集算器的 select 函數(與 SQL 的 select 關鍵字不同)

數據量較大時,同樣也可以將序表換成游標,使用 conjx 函數進行連接:

3. ORDER BY 和 LIMIT OFFSET

order by 是在結果集產生后才進行的處理。在上面的例子中,如果我們要按數學成績排序,對于單數據庫,只需要加上 order by 子句:

SELECT 班級, 學生 ID, 成績 FROM 學生成績表 WHERE 科目 ='數學' AND 班級 =‘一班' ORDER BY 成績

而對于多數據庫,可以讓數據庫先分別排序,然后由集算器歸并有序數據。這樣可以最大的發揮數據庫與并行服務器的性能。

也可以倒序排序,歸并時在排序字段前加“-”(merge 函數可以不加“-”,不過按標準寫法是加上的)

當然也可以完全由集算器來排序:

由集算器實現倒序排序:

而對于大數據量,需要使用游標及 mergex 來完成有序歸并:

limit 和 offset 的執行又在 order 之后,例子中如果想取數學成績除了第一名之后的前十名(可以少于但不能多于),單庫情況下 SQL 是這樣的:

SELECT 班級, 學生 ID, 成績 FROM 學生成績表 WHERE 科目 ='數學' AND 班級 =‘一班' ORDER BY 成績 DESC LIMIT 10 OFFSET 1

多數據庫時,可以用集算器的 to 函數實現 limit offset 的功能,to(n+1,n+m) 等同于 limit m offset n

對于大數據量使用游標的情況,offset 功能可以使用集算器函數 skip 實現,而 limit 的功能則可以使用函數 fetch 實現

4. 聚合運算

我們來討論五種常見的聚合運算:sum/count/avg/max/min。

• sum 的基礎是加法,根據加法結合律,各數據庫中內部數據先分別求和,然后拼接成一張表后再求總和,與先拼接成一張表然后一起求和的結果,其實是一樣的。

• count 的本質,是對每項非 null 數據計 1,null 數據計 0,然后進行累加計算。所以其本質仍是加法運算,與 sum 一樣符合加法結合律。唯一不同的是對原始數據不是累加其本身的數值而是計 1(非 null)或計 0(為 null)。

• avg 的本質,是當 count > 0 時 avg = sum/count,當 count = 0 時 avg = null。顯然 avg 不能像 sum 或 count 那樣先分別計算了。不過根據定義,我們可以先算出 sum 和 count,再通過 sum 和 count 計算出 avg。

• max 和 min 的基礎都是比較運算,而因為比較運算具有傳遞性,因此所有數據庫的最值,可以通過比較各個數據庫的最值得到。

依舊是上面的例子,這次我們要求兩個班全體學生的數學總分、人數、平均分、最高及最低分,對于單源數據:

SELECT sum(成績) 總分數, count(成績) 考試人數, avg(成績) 平均分, max(成績) 最高分, min(成績) 最低分 FROM 學生成績表 WHERE 科目 ='數學'

聚合運算的結果集很小,只有一行,因此無論源數據量的大小,都可以使用游標,代碼如下:

事實上,前面提到的 order by +limit offset 本質上也可以看成是一種聚合運算:top。從這個角度進行優化,可以獲得更高的計算效率。畢竟數據量大時,全排序的成本很高,而且取前 N 個數據的操作也并不需要全排序。當然,這個方法對于數據量小的情況也同樣適用。

具體來說,對于 order by F limit m offset n 的情況,只需先用 top(n+m, F, ~),再用 to(n+1,) 就行了。

我們仍以之前的含 order by+limit offset 的 SQL 語句為例:

SELECT 班級, 學生 ID, 成績 FROM 學生成績表 WHERE 科目 ='數學' AND 班級 =‘一班' ORDER BY 成績 DESC LIMIT 10 OFFSET 1

對于多數據庫, 腳本如下,其中倒序排序只需在排序字段前加“-”:

5. GROUP BY、DISTINCT 和 HAVING

A、分組聚合運算

對于 group by,因為最終所得結果與樣本個體的輸入順序無關,所以只要樣本的總體不變,最終結果也不會變。也就是說,只要在從分庫中提取數據和最終匯總全部數據時,都預先進行了分類運算即可。

假設我們想分別求一、二班的數學總分、人數、平均分、最高及最低分,單數據庫如下:

SELECT 班級, sum(成績) 總分數, count(成績) 考試人數, avg(成績) 平均分, max(成績) 最高分, min(成績) 最低分 FROM 學生成績表 WHERE 科目 ='數學' GROUP BY 班級

我們分三種情況討論:

第一,對于小數據,聚合運算的結果集只會更小,這時推薦使用 query+groups:

第二,對于大數據量,如果結果集也很大,那么就應該使用 cursor+groupx。

另外,由于大結果集的分組計算較慢,需要在外存產生緩存數據。而如果我們在數據庫中對數據先排序,則可以避免這種緩存(此時計算壓力會轉到數據庫,因此需要根據實際情況權衡,通常情況下,數據庫服務器的計算能力會更強一些)。

具體的辦法是對 SQL 的結果集使用 order by 排序,然后在集算器中使用 mergex 函數歸并后,再使用 groupx 的 @o 選項分組:

當然如果不希望加重數據庫負擔,也可以讓數據庫只做分組而不排序,此時集算器直接用 groupx,注意不能加 @o 選項。另外匯總數據時,也要把 mergex 換成 conjx:

第三,如果已明確地知道結果集很小,那么推薦用 cursor+groups

此時 groups 比 groupx 有更好的性能,因為 groups 將運算數據都保存在內存中,比 groupx 節省了寫入外存文件的時間。

另外用 groups 可以不要求在數據庫中預先排序,因為數據庫 group by 的結果集本身不一定有序,再使用 orde by 排序也會增加成本。而對于小結果集,集算器用 groups@o 也并不一定比直接用 groups 更有效率。

通常,匯總數據要用 conjx

B、去重后計數 (count distinct)

在各個數據庫內去重,可以使用 distinct 關鍵字。而數據庫之間的數據去重,則可以使用集算器的 merge@u 函數。要注意的是使用前應該確保表內數據對主鍵字段(或者具有唯一性的一個或多個字段)有序。

對于 distinct 來說, sum(distinct)、avg(distinct) 的計算方法與 count(distinct) 大同小異,而且業務中不常用到,而 max(distinct)、min(distinct) 與單純使用 max、min 沒有區別。因此,我們只以 count(distinct) 為例加以說明。

比如,想要計算全年級(假設只有一班和二班)語數外三科至少有一科不及格需要補考的總人數,單數據庫的 SQL 是這樣的:

SELECT count(distinct 學生 ID) 人數 FROM 學生成績表 WHERE 成績 60

對于多源數據,全分組聚合在使用游標或序表方面沒有差別,為了語法簡便起見以游標為例:

再如,想要分別計算每班語數外三科至少有一科不及格需要補考的總人數,單數據庫的 SQL 是這樣的:

SELECT 班級, count(distinct 學生 ID) 人數 FROM 學生成績表 WHERE 成績 60 GROUP BY 班級

對于多數據庫,同樣需要先匯總去重,再進行分組聚合。匯總前需要數據有序,且匯總后數據仍然有序,所以分組函數 groups 和 groupx 都可以使用 @o 選項。

對于小數據量,可以使用 merge@u、groups@o 和 query:

對于大數據量小結果集,可以使用 mergex@u、groups@o 和 cursor:

對于大數據量大結果集,可以使用 mergex@u、groupx@o 和 cursor:

C、對聚合字段過濾(having)

having 是對聚合 (分組) 后得出的結果集再做過濾。所以當語句中有 having 出現時,如果聚合 (分組) 操作沒有徹底執行完畢,需要將 having 子句先提取出來。待數據徹底完成聚合 (分組) 操作之后,再執行條件過濾。

對于多源數據,如果聚合計算是在匯總之后才能最終完成,那么 having 必須使用集算器的函數 select 來實現過濾。

下面主要說明這種聚合計算在匯總之后才完成的情況:比如,想要獲得一班和二班的三個科目的考試中,有哪些平均分是低于 60 分的。對于單數據庫,SQL 可以這樣寫:

SELECT 班級, 科目, avg(成績) 平均分 FROM 學生成績表 GROUP BY 班級, 科目 HAVING avg(成績)60

對于多數據庫,相關集算器執行代碼如下:

對于大數據量,需要使用游標 (select 函數同樣適用于游標)

6. JOIN ON

跨庫的 JOIN 實現起來非常困難,不過比較幸運的是,我們可以通過存儲設計避免很多跨庫 JOIN。我們分三種情況討論:

1. 同維表分庫,需要重新拼接為一個表

2. 要連接的外鍵表在每個庫中都有相同的一份

3. 需要連接的外鍵表在另一個庫中

對于集算器來講,前兩種的處理情況是一樣的:都不需要涉及跨庫 join,join 操作都可以在數據庫內完成。區別只在于第一種是分庫表,數據庫之間沒有重復數據;而第二種則要求把外鍵表的數據復制到每個庫中。

如果外鍵表沒有復制到每個庫中,那就會涉及真正的跨庫 join,因為很復雜,這里只舉一個內存外鍵表的例子,其它更復雜情況會有專門的文章闡述。

A、同維表或主子表同步分庫

所謂同維表,簡單來講就是兩個表的主鍵字段完全一樣,且其中一個表的主鍵與另一個表的主鍵有邏輯意義上的外鍵約束(并不要求數據庫中一定有真正的外鍵,主鍵同理也是邏輯上的主鍵并不一定存在于數據庫中)。

假設有兩個庫,每個庫中有兩個表,分別記為 A 庫中的 A1 表和 A2 表,B 庫中的 B1 表和 B2 表。從邏輯上看 1 表是 A1 表加上 B1 表,2 表是 A2 表加上 B2 表,我們再假設 1 表與 2 表為同維表,現在要做 1 表與 2 表的 join 連接運算。

所謂同步分庫,就是在設計分庫存儲時,保證了 1 表和 2 表按主鍵進行了同步的分割。也就是必須保證分庫之后,A1 和 B2 的 join 等值連接的結果是空集,同樣 A2 和 B1 的 join 等值連接的結果也是空集,這樣也就不必有跨庫的 join 連接運算了。

舉例說明,比如有兩張表:股票信息與公司信息,表的結構如下:

公司信息

股票信息

兩個表的主鍵都是 (公司代碼, 股票代碼),且股票信息的主鍵與公司信息的主鍵有邏輯意義上的外鍵約束關系,二者互為同維表。

現在假設我想將兩個表拼接在一起,單數據庫時 SQL 是這樣的:

SELECT * FROM 公司信息 T1 JOIN 股票信息 T2 ON T1. 公司代碼 =T2. 公司代碼 AND T1. 股票代碼 = T2. 股票代碼

現假設公司信息分為兩部分,分別存于 HSQL 和 MYSQL 數據庫中,股票信息同樣分為兩部分,分別存于 HSQL 和 MYSQL 數據庫中,且二者是同步分庫。

join 連接公司信息與股票信息的集算器代碼:

對于大數據:

主子表的情況與同維表類似,即一個表(主表)的主鍵字段被另一個表(子表)的主鍵字段所包含,且子表中對應的主鍵字段與主表的主鍵有邏輯意義上的外鍵約束關系。

舉例說明,比如有兩張表:訂單與訂單明細,表的結構如下:

訂單

訂單明細

其中訂單是主表,主鍵為 (訂單 ID);而訂單明細為子表,主鍵為 (訂單 ID, 產品 ID),且訂單明細的主鍵字段訂單 ID,與訂單的主鍵有邏輯意義上的外鍵約束關系,顯然二者為主子表的關系。

現在假設我想將兩個表拼接在一起,單數據庫的 SQL 是這樣的:

SELECT * FROM 訂單 T1 JOIN 訂單明細 T2 ON T1. 訂單 ID=T2. 訂單 ID

現假設訂單分為兩部分,分別存于 HSQL 和 MYSQL 數據庫中,訂單明細同樣分為兩部分,分別存于 HSQL 和 MYSQL 數據庫中,且二者同步分庫。

join 連接訂單與訂單明細的集算器代碼:

對于大數據:

B、外鍵表復制進每個庫

所謂外鍵表,即是指連接字段為外鍵字段的情況。這種外鍵表 join 也是業務上常見的一種情況。因為要連接的外鍵表在每個庫中都有同一份,那么兩個外鍵表匯總并去重后,其實還是任一數據庫中原來就有的那個外鍵表。

而 join 的連接操作,本質上可以視為一種乘法,因為 join 連接等價于 cross join 后再用 on 中條件進行過濾。則根據乘法分配率可以推導出:若是需要做連接操作的外鍵表(不妨設為連接右側的表)在每個庫中都有同一份,則連接左側的表(每個數據庫中各有其一部分)在匯總后再連接,等同于各數據中的連接左側的表與外鍵表先做連接操作后,再匯總到一起的結果。如圖所示:

所以我們在存儲設計時,只要在每個數據庫中把外鍵表都重復一下,就可以避免復雜的跨庫 join 操作。一般情況下,外鍵表作為維表的數據量相對較小,這樣重復的成本就不會很高,而事實表則會得很大,然后用分庫存儲的方法,來解決運算速度緩慢或存儲空間不足等問題。

例如,有兩個表:客戶銷售表和客戶表,其中客戶銷售表的外鍵字段:客戶,與客戶表的主鍵字段:客戶 ID,有外鍵約束關系。現在我們想查詢面向河北省各公司的銷售額記錄,對于單數據源,它的 SQL 是這樣寫的:

SELECT T1. 公司名稱 公司名稱, T2. 訂購日期 訂購日期, T2. 銷售額 銷售額 FROM 客戶表 T1 JOIN 客戶銷售表 T2 ON T1. 客戶 ID=T2. 客戶 WHERE T1. 省份 ='河北'

對于多數據源的情況,我們假設客戶銷售表分別存儲在兩個不同的數據庫中,而每個數據庫中都有同一份的客戶表做為外鍵表。則相關的集算器代碼如下:

大數據量使用游標時:

C、需要連接的外鍵表在另一個庫中

對于維表(外鍵表)也被分庫的情況,我們只考慮維表全部可內存化的情況,不可內存化時,常常就不適合再將數據存在數據庫中了,需要專門針對性的的存儲和計算方案,這將在另外的文章中專門討論。在這里我們只通過例子來討論維表可內存化的情況。

對于這種情況,當涉及的數據量比較大而需要使用游標時,計算邏輯會變得比較復雜。所以我們在這里只講一下針對小數據量的使用序表的 join 處理方法。關于對大數據量的使用游標的 join 處理,會另有一篇文章做專門的介紹。

當要做 join 連接運算的外鍵表全部或部分存儲在另一個庫中時,最直觀的辦法就是將兩個表都提取出來并各自匯總后,再計算 join 連接。

下面仍以客戶銷售表和客戶表來舉例,假設外鍵表客戶表也分別存儲在兩個數據庫中,此時就不能在 SQL 中使用 join 關鍵字來實現連接運算了,但我們可以將其提取出來后,用集算器的 join 函數來實現目的,它的集算器代碼如下所示:

當事實表數據量較大的時候,也可以使用游標處理事實表,只需將 join 換成 cs.join 即可:

7. 簡單 SQL

前面我們主要是從計算原理的角度出發,分析了如何使用集算器實現類似 SQL 效果的多數據源混合計算。除此之外,集算器還提供了一種更簡單、直觀的方法,那就是可以在各個數據庫上通過 SQL 查詢獲取游標,用所有這些游標構建成一個多路游標對象,再用簡單 SQL 對這個多路游標做二次處理。如果簡單 SQL 中沒有涉及 join 的運算,甚至還可以讓集算器直接將一句簡單 SQL 翻譯成各種數據庫的 SQL,從而實現更進一步的自動化。不過這種辦法屬于比較保守的做法,雖然簡單直接,但不能利用所了解的數據情況進行優化(比如不會使用 groups),因此性能就會差一些。

下面仍舊用學生成績的例子,我們想要計算每個班的數學成績的總分、考試人數、平均分、最高分和最低分,使用簡單 SQL 處理這個問題的集算器代碼如下:

因為使用了游標,所以這種寫法也可以用于大數據量。另外再提一句,這個辦法甚至也可以用于非數據庫的數據源(比如文件數據源)!簡單 SQL 的特性可參考相關文檔,這里就不再進一步舉例了。

總結

以上所述是小編給大家介紹的詳解數據庫中跨庫數據表的運算 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • Python SqlAlchemy動態添加數據表字段實例解析
  • java使用JDBC動態創建數據表及SQL預處理的方法
  • 如何將Oracle的一個大數據表快速遷移到 Sqlserver2008數據庫(圖文教程)
  • Angualrjs和bootstrap相結合實現數據表格table
  • bootstrap table 數據表格行內修改的實現代碼
  • MySQL中大數據表增加字段的實現思路
  • mysql中數據庫與數據表編碼格式的查看、創建及修改
  • Android實現仿excel數據表格效果
  • MySQL清空數據表的方法實例與分析
  • jQuery EasyUI框架中的Datagrid數據表格組件結構詳解
  • MySQL中復制數據表中的數據到新表中的操作教程
  • Oracle的數據表中行轉列與列轉行的操作實例講解

標簽:柳州 景德鎮 荊門 瀘州 威海 那曲 淮安 江蘇

巨人網絡通訊聲明:本文標題《詳解數據庫中跨庫數據表的運算》,本文關鍵詞  詳解,數據庫,中跨,庫,數據表,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解數據庫中跨庫數據表的運算》相關的同類信息!
  • 本頁收集關于詳解數據庫中跨庫數據表的運算的相關信息資訊供網民參考!
  • 推薦文章
    久久色视频免费观看| 男女污污视频网站| 色婷婷综合在线观看| 手机看片日韩av| 99久久精品国产亚洲| 免费av网站在线播放| 国产91色综合久久免费分享| 亚洲视频免费观看| 欧美日韩高清影院| 亚洲欧美精品在线| 91av视频在线播放| 国产精品一区二区三区不卡 | 亚洲欧洲视频在线| 欧美一区二区三区艳史| 久久精品国产99精品国产亚洲性色| 亚洲国产精品无码av| 99riav国产精品视频| 国产在线视频卡一卡二| 国产77777| 91麻豆国产自产在线观看| 精品久久久国产| 亚洲精品国产suv| 2019亚洲男人天堂| 欧美久久综合性欧美| 成人性生生活性生交12| 女同久久另类69精品国产| 国产精品久久久久久免费免熟| 国产一区二区中文字幕| 亚洲欧美日韩精品久久久久| 日韩一级大片在线观看| 欧美黄色免费网站| 快播亚洲色图| 亚洲娇小娇小娇小| 黄色一级视频免费观看| 无码精品在线观看| 国产精品素人一区二区| 日韩午夜激情av| 午夜精品三级视频福利| 日产国产精品精品a∨| 在线观看免费的av| 国产一级一片免费播放放a| 午夜国产在线视频| 《视频一区视频二区| 亚洲成人1234| 国产精品18久久久久久麻辣| ijzzijzzij亚洲大全| 日本一区二区免费视频| 在线观看亚洲黄色| 成人精品视频一区二区三区| 日本黄色一区二区| 欧美精品制服第一页| 免费日韩电影在线观看| 亚洲一二三av| www.国产一区二区| 国产传媒欧美日韩成人| 色94色欧美sute亚洲线路一久| 久久精品视频va| 久久精品国产第一区二区三区最新章节| 中文字幕在线导航| xxxxxx国产| 激情综合网激情| 欧美性xxxx极品hd满灌| 成人444kkkk在线观看| 欧美高清视频一区| 国产ts在线观看| 天天干天天插天天射| 不卡大黄网站免费看| 欧美日韩国产高清一区二区三区 | va婷婷在线免费观看| 国产亚洲人成网站| 亚洲精品一区二区三区精华液 | 日韩av在线一区| 亚洲精品日韩激情在线电影| 国产偷人视频免费| 精品少妇一二三区| 国产一区二区视频在线播放| 色香色香欲天天天影视综合网| 欧美精品一区二区三区国产精品| 婷婷亚洲婷婷综合色香五月| 亚洲av成人片色在线观看高潮 | 国产日韩免费视频| 国产精品日日摸夜夜摸av| 日韩av资源在线播放| 99国产在线观看| 日韩中文字幕a| 国产免费www| 久久久久国产免费免费| 亚洲国产高潮在线观看| 99影视tv| 三级黄色片播放| 亚洲一线在线观看| 国产精品福利影院| 中文字幕在线观看日韩| 日本一区二区三区免费观看 | 日韩高清一级片| 日韩欧美在线观看视频| 97视频在线观看视频免费视频| 喜爱夜蒲2在线| 日韩欧美国产成人精品免费| 激情综合色播五月| 在线成人免费视频| 91亚洲国产精品| 亚洲精品中文字幕乱码无线| 91精品国产乱码久久久久| 亚洲欧洲成人精品av97| www.欧美免费| 一区二区视频在线播放| 二区三区四区视频| 国产精品资源网| 欧美一区二区三区在线视频 | 91在线色戒在线| 午夜视频在线观| 国产绿帽刺激高潮对白| 亚洲一区在线观看免费| 久久久久久午夜| 欧美一级爱爱视频| 国产一级二级毛片| 91麻豆免费看片| 亚洲视频国产视频| 亚洲人成网站在线观看播放| 人与动物性xxxx| 国产999精品久久久久久绿帽| 精品电影一区二区三区| 久久久99爱| 久久久久久国产免费a片| 久久成人羞羞网站| 日韩欧美综合在线| 精品一区二区国产| 久久久视频6r| 国产精品白丝av| 亚洲国产精品一区二区久| 欧美不卡三区| 萌白酱视频在线| 国产v日产∨综合v精品视频| 亚洲国产精品久久91精品| 欧洲亚洲一区| 91嫩草|国产丨精品入口| av资源网一区| 一本色道久久88综合亚洲精品ⅰ| 最近中文字幕免费mv| 亚洲一区二区91| 亚洲国产高清在线| 欧美激情视频一区二区| 欧美污视频网站| 国产视频在线观看视频| 色香蕉成人二区免费| 91色中文字幕| 草草影院第一页| 国产在线国偷精品产拍免费yy| 精品国产伦一区二区三区观看方式| 免费在线观看一区二区| 欧美做爰爽爽爽爽爽爽| 久久看人人爽人人| 欧美日韩成人在线视频| 精品久久久久久无码国产| 国产sm主人调教女m视频| 色噜噜夜夜夜综合网| 亚洲资源在线看| 色一情一交一乱一区二区三区| 国产伦精品一区二区三区免费迷 | 国产农村妇女精品久久| 亚洲精品久久久久久动漫器材一区| 在线中文字幕一区| 国产精品一区二区三区免费观看 | 日韩精品一区二区亚洲av| 亚洲免费观看高清完整版在线观看熊| 97香蕉超级碰碰久久免费软件| 在线观看高清免费视频| 亚洲成人一级片| 欧美精品久久久久久久多人混战| 久久综合九色99| 欧美卡一卡二卡三| 中文子幕无线码一区tr| 97超碰蝌蚪网人人做人人爽| 欧美xxxxxbbbbb| 精品一区二区三区影院在线午夜| 亚洲欧美国产另类| 2018中文字幕第一页| 国产精品视频一二区| 欧美日韩一区二区在线观看| 久久久久久久久久久久久9999| 欧美黑人精品一区二区不卡| 亚洲视频精选在线| 国产日韩欧美在线观看| 四虎国产精品成人免费入口| 2021中文字幕一区亚洲| 国内伊人久久久久久网站视频| 国内av免费观看| 国产一区欧美日韩| www.久久撸.com| www.国产视频.com| 麻豆国产欧美日韩综合精品二区| 亚洲欧美日韩中文在线制服| 久久久久久久久久网| 亚洲av无码乱码国产精品| 日韩三级电影网址| 亚洲色婷婷久久精品av蜜桃| 国产一区二区在线播放视频| 欧美日韩成人一区二区| 亚洲精品中字| 中文字幕日韩经典| 欧美人与禽zozo性伦| 一本色道婷婷久久欧美| 在线观看一二三区| 欧美中文字幕亚洲一区二区va在线 | 少妇特黄一区二区三区| 久久久久久久久久久电影| 欧美在线视频一区二区| 免费在线观看你懂的| 国产日韩精品视频一区| 国产精品海角社区在线观看| 国产视频三区四区| 亚洲三级电影网站| 亚洲综合在线小说| 四虎884aa成人精品| 一区二区三区精品视频| 国产不卡一区二区三区在线观看| 久久久精品一区二区涩爱| 午夜私人影院久久久久| 久久偷窥视频| 日韩乱码一区二区三区| 777久久久精品| 欧美一二三不卡| 日韩一级免费视频| 国产一区二区三区在线| 中日韩av在线播放| 丁香网亚洲国际| 欧美在线性爱视频| 天天做夜夜爱爱爱| 午夜久久久久久| 日本午夜精品一区二区| 国产精品视频久久久久久| 精品国产乱子伦一区| 国产又黄又猛视频| 国产美女在线精品| 91精品国产91久久久久久久久| 国产男男chinese网站| 国产精品国产a| 国产一区高清视频| 日韩久久久久久久久久| 日韩精品影音先锋| 麻豆av免费在线| 国产精品一区久久久久| 午夜精品在线视频| 精品亚洲aⅴ无码一区二区三区| 亚洲美女一区二区三区| 精品一卡二卡三卡四卡日本乱码| 欧美在线视频精品| 亚洲精品电影网站| 自拍偷拍21p| 99精品国产视频| 国产日韩在线精品av| 日本一区二区三区四区五区| 欧美日韩一区二区三区视频| 欧美中日韩在线| 久久成人免费电影| 欧美中文在线观看| 久久精品黄色片| 欧美天天综合网| 青青草国产精品视频| 经典一区二区三区| 日本国产欧美一区二区三区| 东方av正在进入| 欧美视频一二三区| 国产白丝袜美女久久久久| 国产真实乱对白精彩久久| 日韩美女免费视频| 国产精品23p| 欧美一区二区精美| wwwwxxxx日韩| 久久久一区二区| 国产乱码精品一区二区三区中文 | 欧美日韩一区二区视频在线观看 | 国产做受高潮69| 天天爽天天爽天天爽| 欧美在线三级电影| 日本日本19xxxⅹhd乱影响| 国产成人免费视频一区| 国产精品一区二区三区成人| 1级黄色大片儿| 欧美成人精品3d动漫h| 高潮一区二区三区| 国产精品妹子av| 欧美在线一二三区| 性感美女福利视频| 97视频在线观看免费高清完整版在线观看| 精品无码一区二区三区蜜臀| 欧美色网站导航| 能看的毛片网站| 久久精品一区二区三区四区| 国产欧美韩日| 亚洲欧美国产高清va在线播放| 久久国产精品影片| 天天色影综合网| 91精品国产综合久久蜜臀| 艹b视频在线观看| 国产精品三级视频| 亚洲国产精品毛片| 毛片av中文字幕一区二区| 国产精品成人免费视频| 麻豆精品久久久久久久99蜜桃| 日韩国产在线播放| 朝桐光av一区二区三区| 精品免费在线视频| 欧美视频免费看欧美视频| 成人av网站在线观看| 国产精品日韩欧美一区二区| www.黄色一片| 国内精品久久久久伊人av| 少妇人妻丰满做爰xxx| 日韩一区二区精品在线观看| 国产伦精品一区二区三区妓女下载 | 六月婷婷中文字幕| 97激碰免费视频| 国产精品500部| 亚洲免费av片| 欧美成人国产精品一区二区| 欧美婷婷六月丁香综合色| 99国产精品久久久久久| 夜夜嗨av一区二区三区四季av| 国产制服91一区二区三区制服| 成人a区在线观看| 麻豆精品蜜桃一区二区三区| 三级欧美韩日大片在线看| 国产精品88a∨| 一级做a爱片久久毛片| 久久99国产综合精品女同| 久久免费精彩视频| 日韩成人中文字幕在线观看| 尤物视频最新网址| 欧美精品日日鲁夜夜添| 一个人看的视频www| 福利精品视频在线| 999精彩视频| 亚洲一线二线三线视频| 国产一区二区在线视频播放| 国产色产综合产在线视频| 在线视频91| 99视频精品全部免费在线| 欧美一卡2卡3卡4卡无卡免费观看水多多| 日本不卡视频在线观看| 91传媒在线免费观看| 香蕉视频免费在线看| 国产日韩精品综合网站| 亚洲精品97久久中文字幕| 国产91精品网站| av av片在线看| 日本精品一区二区三区在线播放视频| 中日韩在线观看视频| 久久久久久欧美| 在线观看免费黄色小视频| 久久久亚洲影院| 中文字幕免费高清在线观看| 欧美精品激情在线| 青青草视频在线观看免费| 色综合久久中文字幕综合网小说| 日韩特级黄色片| 日韩视频永久免费观看| 日韩欧美亚洲一区二区三区| 日韩中文有码在线视频| 日韩精品一区二区三区国语自制| 丝袜亚洲欧美日韩综合| 国产精品自拍视频一区| 日韩中文字幕欧美| 日本一级淫片免费放| 亚洲天堂av在线免费| 久草免费在线视频观看| 中文字幕免费精品一区| 精品无码一区二区三区电影桃花| 在线精品高清中文字幕| 国产性70yerg老太| 久久精品久久精品亚洲人| 国产农村妇女aaaaa视频| 俺去了亚洲欧美日韩| 日本中文字幕第一页| 国外色69视频在线观看| 国产普通话bbwbbwbbw| 国产精品久久久久久五月尺| 人妻少妇精品无码专区| 亚洲一区二区三区四区视频| 日本aⅴ免费视频一区二区三区| 国产精品一区二区在线观看| 国产综合久久久久久鬼色| 日韩av不卡在线播放| 久久综合丝袜日本网| 天天夜碰日日摸日日澡性色av| 亚洲激情校园春色| 国内外成人免费在线视频| 欧美午夜精品久久久| 在线免费观看黄色小视频| 亚洲精品99久久久久| 青青草免费av| 九九热这里只有在线精品视| 中文字幕在线网站| 国产精品久久久久久亚洲影视 | 日本vs亚洲vs韩国一区三区| 久久国产一区| 91偷拍与自偷拍精品| 成人性生活视频免费看| 亚洲国产视频a| 亚洲精品久久久久久| 日韩欧美亚洲国产精品字幕久久久 | 欧美一区亚洲二区| 91热门视频在线观看| 国产免费一区二区视频| 亚洲亚洲人成综合网络| 绯色av蜜臀vs少妇| 精品国产3级a| 日韩xxx高潮hd| 4438全国成人免费|