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

一種優(yōu)雅實現(xiàn)多表查詢的新思路

數(shù)據(jù)庫
AC架構不是銀彈,不適用于所有場景。對于需要精細化管理接口的業(yè)務,還是要拆開一個個接口去寫;而對于小而美的微服務、單表CRUD比較多的管理后臺,采用AC架構可以節(jié)省大量重復性編碼。

哈嘍,各位代碼戰(zhàn)士們,我是Jensen,一個夢想著和大家一起在代碼的海洋里遨游,順便撿起那些散落的知識點的程序員小伙伴。

上一篇文章有一些小伙伴在吐槽我的AC架構:

這里我統(tǒng)一補充:AC架構不是銀彈,不適用于所有場景。對于需要精細化管理接口的業(yè)務,還是要拆開一個個接口去寫;而對于小而美的微服務、單表CRUD比較多的管理后臺,采用AC架構可以節(jié)省大量重復性編碼。

也有很多小伙伴私信我:使用AC架構怎么解決聯(lián)表查詢問題?本文將為大家揭曉。

本文涉及技術點:存儲方式、內(nèi)存聚合。

一、冗余存還是范式存

在數(shù)據(jù)庫設計中,冗余存儲(Redundant Storage)和范式存儲(Normal Form Storage)是兩種不同的數(shù)據(jù)組織方式,它們各自有不同的優(yōu)缺點。

冗余存儲的優(yōu)缺點:

優(yōu)點:

  • 查詢性能:冗余存儲可以通過減少連接操作來提高查詢性能,因為所需數(shù)據(jù)已經(jīng)被存儲在了同一個地方。
  • 減少I/O:在查詢時,可以減少磁盤I/O操作,因為所有數(shù)據(jù)都在同一個表中。
  • 簡化應用邏輯:應用層不需要處理復雜的多表關聯(lián),簡化了應用邏輯。

缺點:

  • 數(shù)據(jù)不一致:冗余數(shù)據(jù)可能導致數(shù)據(jù)不一致性問題,特別是在數(shù)據(jù)更新時,需要確保所有冗余的副本都被正確更新。
  • 存儲空間:冗余存儲會占用更多的存儲空間,因為相同的數(shù)據(jù)在多個地方被存儲。
  • 維護困難:隨著數(shù)據(jù)量的增加,冗余數(shù)據(jù)的維護變得更加困難,任何結(jié)構變更都可能涉及到多個表的修改。

范式存儲的優(yōu)缺點:

優(yōu)點:

  • 數(shù)據(jù)一致性:范式化減少了數(shù)據(jù)冗余,有助于保持數(shù)據(jù)一致性。
  • 存儲效率:通過消除重復數(shù)據(jù),可以節(jié)省存儲空間。
  • 數(shù)據(jù)完整性:范式化有助于實施數(shù)據(jù)完整性約束,如實體完整性、參照完整性等。

缺點:

  • 查詢性能:范式化可能導致查詢性能下降,因為需要執(zhí)行多表連接來獲取完整數(shù)據(jù)。
  • 增加I/O:多表連接可能會增加磁盤I/O操作,特別是在涉及大型表的情況下。
  • 復雜查詢:應用層可能需要編寫更復雜的SQL查詢來處理多表關聯(lián)。

我們再復習一下大學老師教過的數(shù)據(jù)庫范式(Normal Forms):

范式化是數(shù)據(jù)庫設計中的一個概念,旨在減少數(shù)據(jù)冗余和提高數(shù)據(jù)完整性。有幾種不同的范式,包括:

  • 第一范式(1NF):每個表格的每個列都是不可分割的基本數(shù)據(jù)項。
  • 第二范式(2NF):在1NF的基礎上,所有非主屬性完全依賴于主鍵。
  • 第三范式(3NF):在2NF的基礎上,沒有傳遞依賴,即非主屬性只能依賴于主鍵,不能依賴于其他非主屬性。

在實際應用中,完全遵循范式化可能會導致查詢性能問題,因此通常會根據(jù)實際情況進行適度的反范式化(Denormalization),即有意引入一些冗余來優(yōu)化性能。

設計數(shù)據(jù)庫時,需要在數(shù)據(jù)一致性、存儲效率和查詢性能之間做出權衡。

二、走進“聚合”

“聚合”二字經(jīng)常出現(xiàn)在程序員之間、程序員與產(chǎn)品經(jīng)理的對話中,雖然產(chǎn)品不懂技術語言,他們只管給客戶實現(xiàn)特定需求,為技術提供產(chǎn)品原型,但是技術比較關心到底是冗余存還是范式存。

如果涉及的數(shù)據(jù)需要分表存儲,單表查滿足不了客戶需求,這時就需要進行數(shù)據(jù)聚合,傳統(tǒng)的方式是寫SQL,Join連接多張表,返回多張表的數(shù)據(jù)給前端,這種方式對數(shù)據(jù)庫查詢有一定的壓力,整體性能雖然較好,但缺點也很明顯:

隨著業(yè)務量越來越大,工程里的SQL會滿天飛,并且SQL會寫得越來越復雜,對維護SQL的人簡直是噩耗!

這意味著什么?代碼寫了兩三年后,SQL已經(jīng)很難維護了,沒人敢動,每次看SQL都特別費勁,還不知道哪一天會出現(xiàn)慢SQL。

其實除了寫SQL語句,我們還能通過倉庫實現(xiàn)層做數(shù)據(jù)聚合,這就是所謂的“內(nèi)存Join”,把數(shù)據(jù)庫壓力轉(zhuǎn)移到了不要錢的CPU與內(nèi)存中,具體方法如下:

  • 查詢參數(shù)Query對象添加Boolean fillXxx字段,用于控制是否要聚合。
  • 倉庫實現(xiàn)XxxRepositoryImpl實現(xiàn)fill(Query query, List<Model> models)方法,models就是查詢出主表的結(jié)果集,通過query.fillXxx=true控制聚合其他表的數(shù)據(jù)。

這個fillXxx就是聚合參數(shù),大多數(shù)情況下是默認關閉的,也就是默認還是單表查詢,如果需要聚合,由前端傳參控制,這樣既可以兼顧性能,也可以兼顧功能,我們按需聚合數(shù)據(jù)即可。

下面我們看看一個真實案例,預約單倉庫實現(xiàn),聚合預約主體、預約記錄、預約主體評價:

/**
 * 預約單倉庫實現(xiàn)
 */
@Repository
public class AppointmentOrderRepositoryImpl extends
        BaseRepositoryImpl<AppointmentOrderMapper, AppointmentOrder, AppointmentOrderPO, AppointmentOrderQuery> implements
        AppointmentOrderRepository {


    // 聚合方法
    @Override
    public void fill(AppointmentOrderQuery query, List<AppointmentOrder> appointmentOrders) {
        Map<String, AppointmentOrder> orderId2appointment = appointmentOrders.stream().collect(Collectors.toMap(AppointmentOrder::getOrderId, o -> o));
        if (query.getFillAppointment()) {
            // 聚合預約主體
            this.fillAppointment(appointmentOrders);
        }
        if (query.getFillAppointmentRecords()) {
            // 聚合預約記錄列表
            this.fillAppointmentRecords(orderId2appointment);
        }
        if (query.getFillAppointmentComment()) {
            // 聚合預約主體評論
            this.fillAppointmentComments(appointmentOrders);
        }
    }


    private void fillAppointment(List<AppointmentOrder> appointmentOrders) {
        // 通過預約單的主體ID列表(去重)查詢主體
        Set<String> appointIds = appointmentOrders.stream().map(AppointmentOrder::getAppointId).collect(Collectors.toSet());
        List<Appointment> appointments = AppointmentQuery.builder().idIn(appointIds).build().list();
        if (CollKit.isEmpty(appointments)) {
            return;
        }
        // 按主體ID映射,把主體的信息寫到預約單內(nèi)
        Map<String, Appointment> map = appointments.stream().collect(Collectors.toMap(Appointment::getId, o -> o));
        for (AppointmentOrder appointmentOrder : appointmentOrders) {
            Appointment appointment = map.get(appointmentOrder.getAppointId());
            if (appointment != null) {
                appointmentOrder.setAppointment(appointment);
                appointmentOrder.setAppointName(appointment.getName());
            }
        }
    }


    private void fillAppointmentRecords(Map<String, AppointmentOrder> orderId2appointment) {
        // 查出指定預約單ID列表的預約記錄
        List<AppointmentRecord> appointmentRecords = AppointmentRecordQuery.builder().orderIdIn(orderId2appointment.keySet()).fillTimeSchedules(true).build().list();
        if (CollKit.isEmpty(appointmentRecords)) {
            return;
        }
        // 按預約單ID分組,讓預約單關聯(lián)多條預約記錄
        Map<String, List<AppointmentRecord>> map = appointmentRecords.stream().collect(Collectors.groupingBy(AppointmentRecord::getOrderId));
        for (String id : map.keySet()) {
            orderId2appointment.get(id).setAppointmentRecords(map.get(id));
        }
    }


    private void fillAppointmentComments(List<AppointmentOrder> appointmentOrders) {
        // 查出指定預約單ID列表的主體評論
        List<String> orderIds = appointmentOrders.stream().map(AppointmentOrder::getOrderId).collect(Collectors.toList());
        List<AppointmentComment> appointmentComments = AppointmentCommentQuery.builder().orderIdIn(orderIds).build().list();
        if (CollKit.isEmpty(appointmentComments)) {
            return;
        }
        // 按預約單ID分組,讓預約單關聯(lián)首條預約主體評論
        Map<String, List<AppointmentComment>> map = appointmentComments.stream().collect(Collectors.groupingBy(AppointmentComment::getOrderId));
        for (AppointmentOrder appointmentOrder : appointmentOrders) {
            appointmentOrder.setAppointmentComment(CollKit.isNotEmpty(map.get(appointmentOrder.getOrderId())) ? map.get(appointmentOrder.getOrderId()).get(0) : null);
        }
    }


}

需要注意的是,fill方法要對多條結(jié)果進行批量處理,如果是單個結(jié)果,每一條結(jié)果都需要聚合多表數(shù)據(jù),那勢必會加大內(nèi)存與數(shù)據(jù)庫連接的負擔。以上預約單表聚合其他三張表,比SQL的Join多調(diào)了3次查詢,但好在邏輯清晰,減少維護SQL的負擔。

聚合查詢的打開方式就很簡單了,如果前端不傳聚合參數(shù),那么由后端接口來控制:

// 設置聚合參數(shù)(或由前端傳入)
query.setFillAppointment(true);
query.setFillAppointmentRecords(true);
query.setFillAppointmentComment(true);
// 分頁查詢后,會自動調(diào)用fill方法,對結(jié)果集聚合
Page<AppointmentOrder> page = query.page();
// 調(diào)用聚合方法(以下代碼在D3Boot框架內(nèi)已實現(xiàn),不需要寫)
appointmentOrderRepository.fill(query, page.getRecords());

我們通過這種方式來靈活聚合多表數(shù)據(jù),不僅不用改動Controller,還能兼顧多種數(shù)據(jù)聚合的場景,這種數(shù)據(jù)的聚合,不一定要聚合數(shù)據(jù)庫的數(shù)據(jù),也能聚合第三方接口的數(shù)據(jù)。倉庫接口只關心需要提供什么數(shù)據(jù)即可,怎么聚合數(shù)據(jù)、數(shù)據(jù)源來自哪兒,是倉庫實現(xiàn)要負責的事情。

三、寫在最后

目前這種聚合方式也只適用于大部分場景,對于多張大表的聚合,還得考慮是用數(shù)據(jù)庫Join還是內(nèi)存Join的方式進行,或者在設計的時候就要考慮冗余存而不是范式存。

責任編輯:姜華 來源: 架構師修行錄
相關推薦

2024-04-26 08:58:54

if-else代碼JavaSpring

2024-04-30 08:12:05

CRUD方法JavaAC架構

2022-06-23 07:05:46

跳板機服務器PAM

2016-10-26 09:12:58

2017-08-24 15:02:01

前端增量式更新

2023-09-17 23:16:46

緩存數(shù)據(jù)庫

2018-04-18 07:34:58

2025-01-27 13:00:00

2020-11-27 14:45:57

開發(fā)服務器代碼

2019-11-22 09:21:17

技術研發(fā)數(shù)據(jù)

2016-10-13 10:57:55

phptcp專欄

2021-05-18 06:22:39

CSS 制作波浪技巧

2017-01-23 11:18:16

戴爾

2009-12-03 10:32:21

2010-11-22 15:56:34

Mysql多表查詢

2010-10-14 14:28:03

Mysql多表查詢

2020-09-16 14:01:10

Vue.js項目語言

2024-05-16 08:37:12

FLIPFirst前端動畫思維

2009-06-03 15:38:37

Struts框架RBAC

2013-05-22 15:31:07

AOP的CGlib實現(xiàn)
點贊
收藏

51CTO技術棧公眾號

日本精品久久久久影院| 精品国产免费一区二区三区香蕉| 日韩av图片| 国产欧美综合视频| 一本色道精品久久一区二区三区| 亚洲欧美日韩一区二区三区在线| 欧美特级aaa| 激情av在线| 久久久不卡网国产精品一区| 成人精品福利视频| 久草国产精品视频| 色综合久久一区二区三区| 欧美videos中文字幕| 女人帮男人橹视频播放| 天堂中文在线观看视频| 久久精品国产亚洲一区二区三区| 午夜精品福利在线观看| 亚洲a∨无码无在线观看| 国产精品自在线拍| 欧美日韩精品一区二区| 中国丰满人妻videoshd| 色操视频在线| 日韩一区日韩二区| 秋霞久久久久久一区二区| а√中文在线资源库| 奇米影视7777精品一区二区| 97涩涩爰在线观看亚洲| 亚洲成人生活片| 日韩精品影视| 亚洲最大中文字幕| 人妻丰满熟妇aⅴ无码| 亚洲高清在线一区| 91精品婷婷国产综合久久| 亚洲人成无码www久久久| 国产精品69xx| 一区二区三区中文在线观看| 亚洲一区精彩视频| 国产一级二级三级在线观看| 9色porny自拍视频一区二区| 99国产在线| 99热在线只有精品| 国产一本一道久久香蕉| 国产欧美一区二区三区视频| 国产精品免费无遮挡无码永久视频| 在线国产精品一区| 久久97久久97精品免视看| 中文字幕av播放| 小处雏高清一区二区三区| 最近中文字幕日韩精品| 永久免费av无码网站性色av| 自拍自偷一区二区三区| 亚洲精品美女网站| 午夜av免费看| 青青久久av| 亚洲欧美成人在线| 久久成人激情视频| 欧美天天综合| 国产亚洲精品va在线观看| 欧美人与性囗牲恔配| 国产欧美日韩在线一区二区| 亚洲欧美制服另类日韩| 午夜影院黄色片| 日韩欧美中文| 久久精品国产视频| 久久网中文字幕| 亚洲国产电影| 欧美专区第一页| 亚洲永久精品一区| 麻豆国产精品视频| 97久草视频| 女人18毛片一区二区三区| 99久久综合狠狠综合久久| 六月婷婷久久| 91精品国产综合久久久久久豆腐| 中文字幕在线一区免费| 成人在线免费高清视频| free性欧美| 色婷婷精品久久二区二区蜜臂av | 中文字幕在线观看91| 白白在线精品| 亚洲区中文字幕| 人人艹在线视频| 国产精品hd| 日本精品va在线观看| 中文字幕日日夜夜| 福利电影一区二区| 裸模一区二区三区免费| 永久免费av片在线观看全网站| 亚洲精品菠萝久久久久久久| 内射国产内射夫妻免费频道| 日韩漫画puputoon| 精品国产一区二区国模嫣然| 瑟瑟视频在线观看| 中文字幕一区二区三区久久网站| 91国产精品91| 91精品人妻一区二区三区果冻| 成人一区二区三区视频在线观看| 要久久爱电视剧全集完整观看| 日韩精品中文字幕一区| 蜜桃精品一区二区| 91精品一区二区三区综合在线爱| 午夜精品99久久免费| 日本成人一级片| 国产成人aaaa| 婷婷五月色综合| 成人三级小说| 7799精品视频| 精品国产av无码| 精品不卡视频| 国产在线观看精品| 日韩电影免费| 亚洲精品乱码久久久久久日本蜜臀 | 性中国xxx极品hd| 久久久91精品国产一区二区三区| 日韩国产小视频| julia一区二区三区中文字幕| 精品国产青草久久久久福利| 欧美肥妇bbwbbw| 国产精品亚洲综合色区韩国| 91视频婷婷| 日本暖暖在线视频| 在线观看亚洲a| 中文字幕在线免费看线人 | 免费不卡在线观看av| 国产一级一级国产| av电影天堂一区二区在线观看| 先锋影音男人资源| 亚洲精品粉嫩美女一区| 精品偷拍一区二区三区在线看 | 国内精品久久久久久久影视蜜臀| 国产精品一区二区三区久久 | 日韩中文娱乐网| 国产精品乱码一区二区视频| 91麻豆精东视频| 人人干视频在线| 国产劲爆久久| 欧美激情影音先锋| av网站在线免费看| 亚洲人成影院在线观看| 色一情一区二区| 久久视频精品| 91免费欧美精品| 黄色精品免费看| 制服丝袜中文字幕亚洲| 中文字幕美女视频| 久久99久久99| 三年中国中文在线观看免费播放| 国产亚洲人成a在线v网站 | 二区三区不卡| 亚洲男人第一网站| 成人h动漫精品一区二区下载| 久久亚洲精精品中文字幕早川悠里| 777精品久无码人妻蜜桃| 欧美理论电影在线精品| 91av在线精品| 国产一级免费在线观看| 欧美日精品一区视频| 永久免费看片直接| 国产一区在线精品| 亚洲小说欧美另类激情| 亚洲精品在线播放| 91高潮在线观看| 国产三级视频在线| 精品视频在线免费观看| 丁香花五月激情| 99久久免费视频.com| 美女av免费在线观看| 精品国精品国产自在久国产应用 | 一级久久久久久| 中文字幕在线观看一区二区| 国产一级片中文字幕| 国内自拍一区| 久久青青草原| 欧美啪啪网站| 欧美精品videosex极品1| 视频一区二区免费| 欧美性一区二区| 国产精品白嫩白嫩大学美女| av不卡免费在线观看| 免费涩涩18网站入口| 亚洲五月综合| 精品视频导航| 99视频有精品高清视频| 久久久亚洲欧洲日产国码aⅴ| 欧美孕妇孕交| 制服丝袜成人动漫| 国产成人在线观看网站| 国产精品久线在线观看| 中文字幕三级电影| 日本欧美大码aⅴ在线播放| 日本美女爱爱视频| 日韩中文av| 91在线精品视频| 东京一区二区| 久久久久久久久久久国产| 国产美女视频一区二区三区| 日韩欧美亚洲一区二区| 91porny九色| 亚洲成人激情综合网| 色婷婷粉嫩av| 2020国产成人综合网| 午夜免费视频网站| 久久久久久黄| 欧美黑人在线观看| 97视频热人人精品免费| 欧美日韩国产精品一卡| 91午夜精品| 国产在线视频欧美| 日韩在线短视频| 欧美精品久久久久a| 欧美三级黄网| 亚洲一二三在线| 神马一区二区三区| 日韩美女主播在线视频一区二区三区| 成人午夜精品视频| 日韩欧美在线看| 国产小视频在线观看免费| 国产精品国产自产拍高清av王其| 91中文字幕永久在线| 成人美女视频在线看| 国产成人精品综合久久久久99 | 亚洲精品一线| 最新国产成人av网站网址麻豆| 天堂а√在线8种子蜜桃视频| 日韩欧美中文字幕制服| 国产精品久久久久久免费| 欧美在线三级电影| 无码人妻精品一区二区| 都市激情亚洲色图| 日韩黄色精品视频| 亚洲一区二区不卡免费| 欧美黄色一级网站| 一区二区三区四区乱视频| 久久国产精品国语对白| 中文字幕一区av| 日韩精品电影一区二区三区| 久久嫩草精品久久久久| 一起草在线视频| 成人h版在线观看| 亚洲色偷偷色噜噜狠狠99网| 粉嫩av一区二区三区粉嫩| 免费黄色在线播放| 粉嫩在线一区二区三区视频| 国产成人av免费观看| 国产成人精品一区二区三区四区| 免费成人黄色大片| 狠狠色综合色综合网络| 超碰在线免费av| 国产经典欧美精品| 一级全黄裸体片| 成人高清伦理免费影院在线观看| 中国男女全黄大片| 成人激情校园春色| 懂色av粉嫩av蜜乳av| 26uuu亚洲综合色| 一区二区三区伦理片| 欧美激情中文字幕一区二区| chinese全程对白| 1024成人网色www| 九九视频在线免费观看| 精品福利樱桃av导航| 精人妻无码一区二区三区| 欧美亚洲一区二区在线观看| 国产又粗又猛又爽又黄视频 | 野花视频免费在线观看| av成人免费在线观看| 91网站免费视频| 国产精品网站导航| 久久国产精品波多野结衣av| 婷婷激情综合网| 波多野结衣一区二区三区在线| 欧美日韩久久不卡| 亚洲精品综合久久| 亚洲欧美日韩一区二区在线| 97视频精彩视频在线观看| 久久国产色av| 涩涩av在线| 国产日产欧美a一级在线| 99re91这里只有精品| 欧美下载看逼逼| 久久精品影视| 日韩免费视频播放| 免费成人在线观看| 又色又爽又黄18网站| 国产欧美日韩激情| 久久无码精品丰满人妻| 91国产丝袜在线播放| 国产v在线观看| 亚洲美女福利视频网站| 成人av福利| 国产精品igao视频| 亚洲日本一区二区三区在线| 欧美性bbwbbwbbwhd| 欧美特黄视频| 亚洲免费看av| av不卡在线播放| 2018天天弄| 在线精品视频免费播放| а√天堂资源在线| 最新国产精品拍自在线播放| 国产高清自产拍av在线| 91麻豆桃色免费看| 一区二区美女| www.亚洲成人网| 麻豆成人久久精品二区三区红| 中文字幕第3页| 亚洲欧美另类综合偷拍| 樱花视频在线免费观看| 亚洲国产成人爱av在线播放| 国产素人视频在线观看| 国产精品国产三级国产aⅴ浪潮| 超碰97久久国产精品牛牛| 一区二区三区日韩视频| 日产国产欧美视频一区精品| 久久久久麻豆v国产精华液好用吗| 亚洲欧美成aⅴ人在线观看 | 日韩av电影天堂| 黄色污在线观看| 亚洲自拍偷拍综合| 国产精品久久久久精| 一区二区三区回区在观看免费视频| 波多野结衣久久| 亚洲综合成人婷婷小说| 99久久激情| 亚洲综合欧美激情| 久久综合久久综合九色| 天堂网av手机版| 亚洲国产精品久久91精品| 中文字幕有码在线视频| 91精品啪在线观看麻豆免费| 成人av动漫在线观看| 成年人免费大片| wwww国产精品欧美| 中文字幕第四页| 精品亚洲aⅴ在线观看| 一本大道色婷婷在线| 国产视频不卡| 亚洲每日在线| 国产视频久久久久久| 亚洲成人av免费| 神马午夜电影一区二区三区在线观看| 久久久女人电视剧免费播放下载| 亚洲图色一区二区三区| 免费看日本黄色| 成人av电影在线| 中国一级免费毛片| 亚洲免费中文字幕| 日韩经典一区| 一区二区精品国产| 黄网站免费久久| 青青草原在线免费观看| 日韩精品一区二区三区在线播放| 影院在线观看全集免费观看| 97人人澡人人爽| 亚洲毛片网站| 中国女人特级毛片| 欧美日韩成人在线一区| a在线免费观看| 国产精品区一区二区三含羞草| 亚洲欧洲一区| av黄色在线免费观看| 欧美日韩精品一区二区三区蜜桃| 麻豆电影在线播放| 99国产超薄丝袜足j在线观看| 亚洲精品在线二区| 91久久免费视频| 制服.丝袜.亚洲.中文.综合| 欧美黑人xx片| 日本10禁啪啪无遮挡免费一区二区| 强制捆绑调教一区二区| 青青青在线免费观看| 亚洲国内高清视频| 123成人网| 黄色影视在线观看| www.成人网.com| 国产裸体美女永久免费无遮挡| 久久香蕉频线观| 免费观看成人www动漫视频| 国产又粗又长又大的视频| 亚洲色图欧美在线| 无码国产精品一区二区色情男同| 国产精品91在线| 欧美日韩三级| 伊人影院综合网| 欧美va亚洲va香蕉在线| 小黄鸭精品aⅴ导航网站入口| 二级片在线观看| 久久免费电影网| 国产成人精品一区二三区四区五区| 韩日欧美一区二区| 国产精品成人av| 加勒比精品视频| 666欧美在线视频| 国产高清不卡| 欧美一级中文字幕| 国产日韩欧美高清| 四虎免费在线观看| 91在线观看免费高清完整版在线观看 | 精品视频在线观看免费观看| av天堂永久资源网|