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

MySQL遇到AI:字節(jié)跳動開源 MySQL 虛擬索引 VIDEX

數(shù)據(jù)庫 人工智能 開源
VIDEX 提供開箱即用的虛擬索引能力,可無縫集成至現(xiàn)有 MySQL 生態(tài);對于數(shù)據(jù)庫研究者,VIDEX 模塊化設(shè)計允許新算法(如 NDV 估計、Cardinality估計等等)在 MySQL 上快速驗證,推動前沿技術(shù)落地。

虛擬索引技術(shù)(virtual index,也稱為 hypothetical index)在數(shù)據(jù)庫系統(tǒng)的查詢優(yōu)化、索引推薦等場景中扮演著關(guān)鍵角色。簡單來說,虛擬索引可以理解為數(shù)據(jù)庫的'沙盤推演'系統(tǒng)——無需真實構(gòu)建索引,僅基于統(tǒng)計信息即可精準模擬不同索引方案對查詢計劃的優(yōu)化效果。由于虛擬索引的創(chuàng)建/刪除代價極低,使用者可以大量創(chuàng)建和刪除索引、反復(fù)推演,確定最有效的索引方案。在AI時代,基于機器學(xué)習(xí)模型的NDV、Cardinality估計算法層出不窮,但是在MySQL落地往往遇到很大挑戰(zhàn):無法注入機器學(xué)習(xí)模型的預(yù)測值,便無法得到MySQL索引推薦結(jié)果。

業(yè)界許多數(shù)據(jù)庫已經(jīng)以官方或第三方的方式提供了虛擬索引功能,例如 Postgreshttps://github.com/HypoPG/hypopg Oraclehttps://oracle-base.com/articles/misc/virtual-indexes )和 IBM DB2(https://www.ibm.com/docs/en/db2-for-zos/12?topic=tables-dsn-virtual-indexes 。大量數(shù)據(jù)庫領(lǐng)域的研究都圍繞虛擬索引技術(shù)展開。遺憾的是,MySQL 長期缺乏這一能力,導(dǎo)致其在復(fù)雜場景下的優(yōu)化效果始終受限。

經(jīng)過長期的生產(chǎn)驗證,字節(jié)跳動正式開源了 MySQL 虛擬索引項目  VIDEXVirtual Index ),讓 MySQL 也有了自己的虛擬索引機制 ??

VIDEX 開源地址:https://github.com/bytedance/videx

VIDEX 已經(jīng)部署在了字節(jié)跳動大規(guī)模生產(chǎn)系統(tǒng)中,每天為數(shù)千用戶、數(shù)十萬慢 SQL 提供優(yōu)化服務(wù)。VIDEX 的實用價值、工業(yè)級部署設(shè)計等特點,引來 Daniel Black(MariaDB Foundation 首席創(chuàng)新官)和Federico Razzoli (Founder of Vettabase) 等業(yè)界知名專家的點贊與認可。

圖片圖片

VIDEX 提供開箱即用的虛擬索引能力,可無縫集成至現(xiàn)有 MySQL 生態(tài);對于數(shù)據(jù)庫研究者,VIDEX 模塊化設(shè)計允許新算法(如 NDV 估計、Cardinality估計等等)在 MySQL 上快速驗證,推動前沿技術(shù)落地。

具體來說,VIDEX 的貢獻如下:

彌補 MySQL 虛擬索引空白:盡管業(yè)界已經(jīng)有多種數(shù)據(jù)庫支持了虛擬索引功能( Postgres、Oracle、 IBM DB2),也有一些論文和博客提到了 MySQL 的虛擬索引技術(shù) [1,2],但據(jù)我們所知,VIDEX 是首個開源的、可拓展、支持多形態(tài)部署的 MySQL 虛擬索引解決方案。

高精度地擬合 MySQL:我們已經(jīng)在 TPC-HTPC-H-Skew 和 JOB 等復(fù)雜分析基準測試上對 VIDEX 進行了測試。給定準確的獨立值估計(ndv) 和基數(shù)估計(Cardinality) 信息,VIDEX 可以 100% 模擬 MySQL InnoDB 的查詢計劃

基于分離架構(gòu)的多形態(tài)部署:VIDEX 實現(xiàn)了數(shù)據(jù)庫實例-VIDEX優(yōu)化器插件-VIDEX算法服務(wù)的模塊分離。既支持作為插件無縫集成到現(xiàn)有MySQL實例,也可作為獨立服務(wù)構(gòu)建虛擬庫環(huán)境,實現(xiàn)生產(chǎn)環(huán)境零干擾的索引驗證;額外地,將 VIDEX優(yōu)化器插件和VIDEX算法服務(wù)也做了分離,便于 AI 算法服務(wù)的集成和熱更新。

可拓展的實驗平臺:準確地模擬MySQL查詢代價依賴于對獨立值(ndv)和基數(shù)(Cardinality)的準確估計——這正是AI+數(shù)據(jù)庫研究中最火熱的方向之一 [3]。VIDEX 給出了標準化、清晰易懂的接口設(shè)計,屏蔽了復(fù)雜的系統(tǒng)細節(jié)。研究者可以自由地用各種語言來重寫 VIDEX 的算法模型,甚至只需要改動一個 JSON 文件,就能將自己的新算法應(yīng)用于 MySQL查詢優(yōu)化器!

多形態(tài)部署:從實驗平臺到生產(chǎn)環(huán)境

由于 VIDEX 將真實數(shù)據(jù)庫實例、虛擬數(shù)據(jù)庫實例、算法服務(wù)器三個部分解耦了,因此可以靈活應(yīng)用于各種適用場景,從個人研究到生產(chǎn)環(huán)境部署:

VIDEX-Optimizer 的兩種形態(tài)

作為插件安裝到真實數(shù)據(jù)庫:將 VIDEX 作為插件安裝到真實數(shù)據(jù)庫實例,這樣只需要一臺 MySQL實例,即可體驗基于虛擬索引的各種 what-if 分析。適合于個人實驗和分析。

以獨立實例啟動:獨立啟動 VIDEX 示例,同步統(tǒng)計信息,然后開始分析。此模式可以完全避免影響在線運行實例的穩(wěn)定性,在工業(yè)環(huán)境中很實用。

VIDEX 算法服務(wù)器的兩種形態(tài)

與 VIDEX-Optimizer 配套啟動:最經(jīng)典的方式,無須額外設(shè)置,VIDEX-Optimizer 會自動尋找本地啟動的VIDEX算法服務(wù)器。

獨立啟動算法服務(wù)器:只要設(shè)置一下 SQL 環(huán)境變量(SET @VIDEX_STATISTIC_SERVER='ip:port'),VIDEX-Optimizer 會將算法請求轉(zhuǎn)發(fā)到指定的算法服務(wù)器上。對于研究者來說,可以自由實現(xiàn)算法、啟動自定義的算法服務(wù);對于云原生場景,可以將大量 MySQL 實例的算法請求發(fā)往中心式的算法服務(wù),便于運維和快速更新。

VIDEX 任務(wù)的兩種形態(tài)

非任務(wù)模式:默認情況下,用戶不需要關(guān)注 “task_id” —— 只需要指定目標庫、指定虛擬庫,同步數(shù)據(jù)即可;

任務(wù)模式:在大規(guī)模分析任務(wù)中(例如大規(guī)模索引推薦任務(wù)),各種用戶往往會對同一個生產(chǎn)庫的不同表、或不同實例的同名表發(fā)起多次分析。這種情況下,用戶可以指定任務(wù) id(SET @VIDEX_OPTIONS={'task_id': 'abc'}),讓多個任務(wù)彼此互不影響。

算法試驗場:把算法模型接入 MySQL 優(yōu)化器

MySQL 采用了分離式的架構(gòu),上層的查詢優(yōu)化器會向下層存儲引擎請求各種信息,包括元數(shù)據(jù)信息(table_rows、data_length 等等)、獨立值(ndv)、基數(shù)(cardinality)、索引內(nèi)存加載率等等。其中基數(shù)估計和獨立值估計是 AI for DB 研究領(lǐng)域的熱點方向。現(xiàn)已有大量 data-driven 或者 query-driven 的算法被提出,但這些算法往往只能以 PostgreSQL 作為試驗場。

VIDEX 讓用戶不必與 MySQL 查詢優(yōu)化器做交互、也屏蔽了 MySQL 對庫表元數(shù)據(jù)信息(table_rows、deta_length)的請求。由此,用戶可以專注于一些重點的算法問題,例如 NDV 估計和 Cardinality 估計。

方法 1:在 VIDEX-Statistic-Server 中添加一種新方法

考慮到許多研究者習(xí)慣于用 Python 研究各種 AI 與 DB 結(jié)合的算法,因此,我們用Python 實現(xiàn)了 VIDEX-Statistic。

用戶可以繼承并修改 VidexModelInnoDBVidexModelInnoDB 為用戶屏蔽了系統(tǒng)變量、索引元數(shù)據(jù)格式等復(fù)雜細節(jié),并提供了一個基于獨立、均勻分布假設(shè)的 ndv 和 cardinality 算法。這樣用戶可以聚焦于 cardinality 和 ndv 這兩個研究熱點:

class VidexModelBase(ABC):    """    Abstract cost model class. VIDEX-Statistic-Server receives requests from VIDEX-Optimizer for Cardinality    and NDV estimates, parses them into structured data for ease use of developers.    Implement these methods to inject Cardinality and NDV algorithms into MySQL.    """    @abstractmethod    def cardinality(self, idx_range_cond: IndexRangeCond) -> int:        """        Estimates the cardinality (number of rows matching a criteria) for a given index range condition.        Parameters:            idx_range_cond (IndexRangeCond): Condition object representing the index range.        Returns:            int: Estimated number of rows that match the condition.        Example:            where c1 = 3 and c2 < 3 and c2 > 1, ranges = [RangeCond(c1 = 3), RangeCond(c2 < 3 and c2 > 1)]        """        pass    @abstractmethod    def ndv(self, index_name: str, table_name: str, column_list: List[str]) -> int:        """        Estimates the number of distinct values (NDV) for specified fields within an index.        Parameters:            index_name (str): Name of the index.            table_name (str): Table Name            column_list (List[str]): List of columns(aka. fields) for which NDV is to be estimated.        Returns:            int: Estimated number of distinct values.        Example:            index_name = 'idx_videx_c1c2', table_name= 't1', field_list = ['c1', 'c2']        """        raise NotImplementedError()
class VidexModelBase(ABC):
    """
    Abstract cost model class. VIDEX-Statistic-Server receives requests from VIDEX-Optimizer for Cardinality
    and NDV estimates, parses them into structured data for ease use of developers.
    Implement these methods to inject Cardinality and NDV algorithms into MySQL.
    """
    @abstractmethod
    def cardinality(self, idx_range_cond: IndexRangeCond) -> int:
        """
        Estimates the cardinality (number of rows matching a criteria) for a given index range condition.
        Parameters:
            idx_range_cond (IndexRangeCond): Condition object representing the index range.
        Returns:
            int: Estimated number of rows that match the condition.
        Example:
            where c1 = 3 and c2 < 3 and c2 > 1, ranges = [RangeCond(c1 = 3), RangeCond(c2 < 3 and c2 > 1)]
        """
        pass
    @abstractmethod
    def ndv(self, index_name: str, table_name: str, column_list: List[str]) -> int:
        """
        Estimates the number of distinct values (NDV) for specified fields within an index.
        Parameters:
            index_name (str): Name of the index.
            table_name (str): Table Name
            column_list (List[str]): List of columns(aka. fields) for which NDV is to be estimated.
        Returns:
            int: Estimated number of distinct values.
        Example:
            index_name = 'idx_videx_c1c2', table_name= 't1', field_list = ['c1', 'c2']
        """
        raise NotImplementedError()

假設(shè)用戶用 VidexModelExample 重載了 VidexModelInnoDB ,可以指定模然后啟動 VIDEX-Statistic-Server(詳見代碼啟動腳本)。

startup_videx_server(VidexModelClass=VidexModelExample)
startup_videx_server(VidexModelClass=VidexModelExample)

方法 2: 全新實現(xiàn) VIDEX-Statistic-Server

用戶可以用任何編程語言實現(xiàn) HTTP 響應(yīng)、并在任意位置啟動 VIDEX-Statistic。

使用時,只需要指定環(huán)境變量(SET @VIDEX_STATISTIC_SERVER='ip:port'),VIDEX-Optimizer 就會將所有請求轉(zhuǎn)發(fā)到指定服務(wù)上。

兩步玩轉(zhuǎn) VIDEX,在 TPC-H 上看看效果

步驟 1: Docker 啟動 VIDEX

最簡單的情況下,用戶可以用 Docker 啟動一個安裝好 VIDEX-Optimizer 和 VIDEX-Statistic 的容器。用戶也可以參考文檔說明,嘗試其他啟動方式。

為簡化部署,我們提供了預(yù)編譯的 Docker 鏡像,包含:

如果您尚未安裝 Docker:

docker run -d -p 13308:13308 -p 5001:5001 --name videx kangrongme/videx:0.0.2

步驟 2: VIDEX 數(shù)據(jù)準備

VIDEX 需要 Python 3.9 環(huán)境,執(zhí)行元數(shù)據(jù)采集等任務(wù)。我們推薦使用 Anaconda/Miniconda 創(chuàng)建獨立的 Python 環(huán)境來安裝,詳見 README 文檔的 Quick Start 章節(jié)https://github.com/bytedance/videx?tab=readme-ov-file#2-quick-start

git clone git@github.com:bytedance/videx.git videx_statistic
git clone git@github.com:bytedance/videx.git videx_statistic
cd videx_statistic
python3.9 -m pip install -e . --use-pep517

指定原庫和 VIDEX 庫地址,用腳本一鍵式同步數(shù)據(jù)(以 tpch 為例):

python src/sub_platforms/sql_opt/videx/scripts/videx_build_env.py \
python src/sub_platforms/sql_opt/videx/scripts/videx_build_env.py \
 --target 127.0.0.1:13308:tpch_tiny:videx:password \
 --videx 127.0.0.1:13308:videx_tpch_tiny:videx:password

效果展示:以 TPC-H 為例

本示例使用 TPC-H 數(shù)據(jù)集演示 VIDEX 的完整使用流程。

假設(shè)用戶已經(jīng)準備好了 TPCH 數(shù)據(jù)。篇幅限制,我們將更詳細的步驟說明放到了 README 文檔的 Example 章節(jié)(https://github.com/bytedance/videx?tab=readme-ov-file#3-examples)。

為了展示 VIDEX 的有效性,我們對比了 TPC-H Q21 的 EXPLAIN 細節(jié),這是一個包含四表連接的復(fù)雜查詢,涉及 WHERE聚合ORDER BYGROUP BYEXISTS 和 SELF-JOIN 等多種部分。初始情況下,MySQL 可以選擇的索引有 11 個,分布在 4 個表上。

EXPLAIN FORMAT = JSON
SELECT s_name, count(*) AS numwait
FROM supplier,
     lineitem l1,
     orders,
     nation
WHERE s_suppkey = l1.l_suppkey
  AND o_orderkey = l1.l_orderkey
  AND o_orderstatus = 'F'
  AND l1.l_receiptdate > l1.l_commitdate
  AND EXISTS (SELECT *
              FROM lineitem l2
              WHERE l2.l_orderkey = l1.l_orderkey
                AND l2.l_suppkey <> l1.l_suppkey)
  AND NOT EXISTS (SELECT *
                  FROM lineitem l3
                  WHERE l3.l_orderkey = l1.l_orderkey
                    AND l3.l_suppkey <> l1.l_suppkey
                    AND l3.l_receiptdate > l3.l_commitdate)
  AND s_nationkey = n_nationkey
  AND n_name = 'IRAQ'
GROUP BY s_name
ORDER BY numwait DESC, s_name;

讓我們來對比 VIDEX 和 InnoDB 的估計效果。我們使用 EXPLAIN FORMAT=JSON,這是一種更加嚴格的格式。

我們不僅比較表連接順序和索引選擇,還包括查詢計劃的每一個細節(jié)(例如每一步的行數(shù)和代價)。

如下圖所示,VIDEX(左圖)能生成一個與 InnoDB(右圖)幾乎 100% 相同的查詢計劃。

圖片

VIDEX 的一個重要作用是模擬索引代價。我們額外新增一個索引。VIDEX 增加索引的代價是 O(1) ,因為他并不需要在真實數(shù)據(jù)上創(chuàng)建索引:

-- 為 innodb 庫創(chuàng)建索引ALTER TABLE tpch_tiny.orders ADD INDEX idx_o_orderstatus (o_orderstatus);-- 為 videx 創(chuàng)建索引ALTER TABLE videx_tpch_tiny.orders ADD INDEX idx_o_orderstatus (o_orderstatus);
-- 為 innodb 庫創(chuàng)建索引
ALTER TABLE tpch_tiny.orders ADD INDEX idx_o_orderstatus (o_orderstatus);
-- 為 videx 創(chuàng)建索引
ALTER TABLE videx_tpch_tiny.orders ADD INDEX idx_o_orderstatus (o_orderstatus);

再次執(zhí)行 EXPLAIN,我們看到 MySQL-InnoDB 和 VIDEX 的查詢計劃發(fā)產(chǎn)生了相同的變化,兩個查詢計劃均采納了新索引,并且查詢計劃的細節(jié)也非常接近。

圖片

VIDEX 的行數(shù)估計 (7404) 與 MySQL-InnoDB (7362) 相差約為 0.56%,這個誤差來自于基數(shù)估計算法的誤差。

深入解析 VIDEX 架構(gòu)

圖片

如圖展現(xiàn)了 VIDEX 的架構(gòu)。總體來說,VIDEX 包含兩個模塊:

  • VIDEX-Optimizer-Plugin(簡稱 VIDEX-Optimizer):VIDEX 的“前端”。可以作為插件安裝到現(xiàn)有數(shù)據(jù)庫,或者以一個獨立的新實例啟動。這一部分實現(xiàn)了 MySQL 查詢優(yōu)化器接口,并將其中一部分復(fù)雜的請求轉(zhuǎn)發(fā)到 VIDEX-Statistic-Server。我們?nèi)媸崂砹?MySQL handler 的超過90個接口函數(shù),并實現(xiàn)與索引(Index)相關(guān)的接口。
  • VIDEX-Statistic-Server(簡稱 VIDEX-Statistic):VIDEX 的“后端”。基于收集到的統(tǒng)計信息(表行數(shù)、表大小、直方圖等等)和集成的算法或模型,計算獨立值(NDV) 和基數(shù)(Cardinality),并將結(jié)果返回給 VIDEX-Optimizer。

當用戶指定了要分析(what-if analysis)的真實數(shù)據(jù)庫之后,VIDEX 會在 VIDEX-Optimizer 上創(chuàng)建一個虛擬數(shù)據(jù)庫。虛擬數(shù)據(jù)庫與真實數(shù)據(jù)庫的關(guān)系表結(jié)構(gòu)完全一致,只是將 Engine 從 InnoDB 更換為 VIDEX。為了準確模擬目標數(shù)據(jù)庫的查詢代價,VIDEX 會調(diào)用腳本,從真實數(shù)據(jù)庫采集必要的統(tǒng)計信息。上述過程都可以用我們提供好的腳本一鍵式完成。

用戶也可以自定義地提供一份元數(shù)據(jù)文件、讓腳本直接導(dǎo)入。元數(shù)據(jù)文件是 json 格式,包含了庫表結(jié)構(gòu)信息、統(tǒng)計信息(table_rows、單列 ndv等等)、直方圖信息,非常容易理解。

VIDEX-Statistic-Server 是 VIDEX 的算法服務(wù)器。我們已經(jīng)提供了基于獨立均勻假設(shè)的 ndv 和 cardinality 算法。研究者可以自由地使用 Python、或者其他語言來實現(xiàn)算法,我們已經(jīng)封裝好了清晰明了的接口。

上述環(huán)節(jié)完成后,你就可以在虛擬數(shù)據(jù)庫上自由的創(chuàng)建和刪除索引,然后使用 EXPLAIN 來獲取“貼近真實”的查詢計劃了 ??

作者團隊

我們來自字節(jié)跳動的 ByteBrain 團隊,我們致力于用 AI 技術(shù),為各種基礎(chǔ)架構(gòu)與系統(tǒng)(數(shù)據(jù)庫、云原生、大數(shù)據(jù))優(yōu)化降本、提質(zhì)增效。

如果您有任何疑問,請隨時通過電子郵件聯(lián)系我們:

  • Rong Kang: kangrong.cn@bytedance.com, kr11thss@gmail.com
  • Tieying Zhang: tieying.zhang@bytedance.com

參考資料

1. Meta: Yadav, Ritwik, Satyanarayana R. Valluri, and Mohamed Za?t. "AIM: A practical approach to automated index management for SQL databases." 2023 IEEE 39th International Conference on Data Engineering (ICDE). IEEE, 2023.

2. Meituan: Slow Query Optimized Ddvice Driven by Cost Model:https://tech.meituan.com/2022/04/21/slow-query-optimized-advice-driven-by-cost-model.html

3. Kossmann, J., Halfpap, S., Jankrift, M., & Schlosser, R. (2020). Magic mirror in my hand, which is the best in the land? an experimental evaluation of index selection algorithms. Proceedings of the VLDB Endowment, 13(12), 2382-2395.

相關(guān)鏈接

項目地址:

  https://github.com/bytedance/videx

責(zé)任編輯:龐桂玉 來源: 字節(jié)跳動技術(shù)團隊
相關(guān)推薦

2023-10-18 11:56:17

開源AI

2022-11-02 10:02:24

BitSail字節(jié)跳動數(shù)據(jù)集成

2022-06-22 06:49:39

Hertz開源HTTP 框架

2021-09-09 09:05:30

開源字節(jié)跳動CloudWeGo

2025-07-28 09:04:01

2020-10-24 07:30:05

開源字節(jié)跳動模型

2022-08-25 18:48:29

字節(jié)跳動CSS開源

2020-09-11 15:37:18

GitHub代碼開發(fā)者

2024-02-19 00:00:00

前端開源項目

2024-04-01 07:53:51

MySQL索引字符

2023-04-07 12:30:04

開源ShmipcIPC

2023-04-19 16:51:54

分布式Primus開源

2024-08-22 14:47:50

開源Linux網(wǎng)絡(luò)抓包工具

2025-08-04 16:31:56

字節(jié)跳動開源Coze Studi

2024-09-25 15:57:56

2023-07-06 12:54:15

開源KelemetryKubernetes

2022-04-26 15:09:14

優(yōu)化模型訓(xùn)練

2022-03-21 17:56:59

大模型訓(xùn)練訓(xùn)練框架

2022-03-21 15:06:10

模型字節(jié)跳動框架

2021-09-17 13:05:55

模型人工智能框架
點贊
收藏

51CTO技術(shù)棧公眾號

超碰成人福利| 国产在线网站| 亚洲三级电影在线观看| 日韩国产高清视频在线| 青青在线视频免费| 精品51国产黑色丝袜高跟鞋| 国产高清不卡二三区| 久久人人爽人人爽人人片av高请| 国产精品亚洲无码| 国产一区一区| 日韩欧美在线观看| 可以免费看的黄色网址| 日韩亚洲视频在线观看| 美女精品一区二区| 性欧美xxxx交| 国产成人免费在线观看视频| 97视频一区| 欧美三级三级三级| 日韩网站在线免费观看| 成人免费高清在线播放| 东方欧美亚洲色图在线| 国产精品视频一区二区三区四| 国产一级一片免费播放放a| 精品视频黄色| 日韩成人小视频| 日韩a一级欧美一级| 日韩伦理福利| 夜夜揉揉日日人人青青一国产精品| 久久国产日韩欧美| 国产视频手机在线| 日韩福利电影在线观看| 久久久久久久久久久人体| 免费看的黄色网| 麻豆精品99| 日韩欧美一级特黄在线播放| 天天爽天天爽夜夜爽| 爱情岛论坛亚洲品质自拍视频网站| 国产精品三级视频| 欧美日韩精品免费看| 成人免费公开视频| 国产精品一二三在| 国产又爽又黄的激情精品视频| 五月婷婷亚洲综合| 亚洲视频日本| 久久伊人免费视频| 国产日韩精品中文字无码| 亚洲自拍电影| 亚洲精品二三区| 超碰caoprom| 哺乳一区二区三区中文视频 | 91精品尤物| 欧美久久久久中文字幕| 日本xxxx黄色| 高清在线一区| 欧美日韩国产另类不卡| 国产福利在线免费| 男人亚洲天堂| 欧美色男人天堂| 男女爽爽爽视频| 亚洲精品在线影院| 欧美性大战久久久久久久| 国产精品69页| 快播电影网址老女人久久| 色综合天天性综合| 免费看a级黄色片| 电影天堂国产精品| 欧美日韩综合色| 手机看片一级片| 色狠狠一区二区三区| 3d动漫精品啪啪| 欧美激情第四页| 精品中文视频| 欧美精品一区二区三区视频| 亚洲麻豆一区二区三区| 日韩在线你懂的| 国产亚洲xxx| 午夜激情福利电影| 欧美日本在线| 欧美一区二区视频97| 高潮毛片又色又爽免费 | 日本不卡电影| 久久九九免费视频| 久久亚洲精品大全| 国产美女一区| 国产精品视频网| 国内精品偷拍视频| 97精品国产97久久久久久久久久久久| 久久综合毛片| 老司机午夜在线视频| 亚洲一区二区在线免费看| 毛片在线视频播放| 国产一区二区精品调教| 欧美精品一卡二卡| 91九色蝌蚪porny| 精品一区二区三区在线| 久久久国产精品视频| 精品久久免费视频| 日日嗨av一区二区三区四区| 亚洲伊人第一页| 欧美日韩在线中文字幕| 国产精品久久午夜夜伦鲁鲁| 日韩精品在线视频免费观看| 蜜桃成人精品| 欧美变态凌虐bdsm| 国产精品久久久久久久av| 欧美.www| 欧洲一区二区视频| 国产91视频在线| 久久久99精品久久| 国产 欧美 日本| 国精品产品一区| 亚洲精品720p| 国产一区二区视频在线观看免费| 午夜亚洲伦理| 成人高清在线观看| 在线观看二区| 精品magnet| 手机在线播放av| 成人嘿咻视频免费看| 午夜伦理精品一区| 国产乱码精品一区二区三区精东| www.av精品| 热这里只有精品| 在线一区视频观看| 精品一区二区电影| 精品无码av在线| 紧缚捆绑精品一区二区| 日本婷婷久久久久久久久一区二区| 欧洲精品二区| 91精品国产福利| 青青青视频在线播放| 亚洲自啪免费| 精品999在线观看| 亚洲制服国产| 欧美电影一区二区三区| 自拍偷拍你懂的| 日韩电影在线看| 精品乱码一区| av资源新版天堂在线| 欧美一级高清大全免费观看| 91视频最新网址| 奇米影视一区二区三区小说| 欧美一区亚洲二区| 成人福利视频| 亚洲欧美国产视频| 国产精品va无码一区二区三区| 成人午夜免费av| www.日本少妇| 国产乱人伦精品一区| 欧美猛交ⅹxxx乱大交视频| 91免费视频播放| 中文字幕一区在线观看视频| 亚洲人辣妹窥探嘘嘘| 精品国产精品久久一区免费式| 91av在线不卡| 六十路在线观看| 色94色欧美sute亚洲线路一久| 99久久国产精| 丝袜亚洲精品中文字幕一区| 欧美日韩最好看的视频| 自拍偷自拍亚洲精品被多人伦好爽| 日韩精品在线电影| 久久国产视频播放| 久久无码av三级| 污污视频网站免费观看| 亚洲尤物av| 国产精品自拍网| 成人免费网址| 精品国产乱码久久| 日韩av免费网址| 91在线观看地址| 妓院一钑片免看黄大片| 日韩黄色大片| 亚洲一区二区三区视频播放| 欧美激情成人动漫| 日韩乱码在线视频| wwwwww在线观看| 亚洲人成人一区二区在线观看| 久久精品一二三四| 亚洲毛片网站| 图片区小说区区亚洲五月| 成人在线视频免费看| 久久成人av网站| 免费看av毛片| 欧美性大战久久久久久久蜜臀| 97在线观看免费高| 成人动漫av在线| 日本老熟妇毛茸茸| 欧美国产精品| 欧美日韩国产免费一区二区三区 | 国产自产在线视频一区| 韩日成人影院| 久热99视频在线观看| 香蕉视频国产在线| 欧美日韩国产免费一区二区 | 日韩精品三区四区| 无码毛片aaa在线| 精品人妻一区二区三| 国产综合精品久久久久成人av| 米奇精品一区二区三区| 日韩欧美国产一区二区三区| 国产精品一区二区三区四| 国产精品国产精品国产专区不片| 免费看91视频| 日日夜夜免费精品| 国产黄色激情视频| 精品日韩免费| 九九九九精品| 97久久精品一区二区三区的观看方式| 久久久久久欧美| 欧美激情二区| 亚洲性线免费观看视频成熟| 亚洲卡一卡二卡三| 欧美精品一二三| 精品人妻一区二区三区免费看 | 日韩av在线电影观看| 日韩精品一区国产| 国产精品久久久久久久久久| sm捆绑调教国产免费网站在线观看| 丝袜美腿亚洲一区二区| 日本在线视频1区| 日韩欧美色电影| 91片黄在线观看喷潮| 日本乱码高清不卡字幕| 日本中文字幕网| 亚洲精品欧美综合四区| 战狼4完整免费观看在线播放版| 91免费观看视频在线| 欧美xxxx日本和非洲| 麻豆精品在线看| 色一情一乱一伦一区二区三区日本| 伊人成人在线视频| 人妻激情另类乱人伦人妻| 99久久夜色精品国产亚洲狼| 日韩高清dvd| 美女网站一区| 麻豆传媒一区| 日本妇女一区| 韩日午夜在线资源一区二区| 爱高潮www亚洲精品| 99国产超薄丝袜足j在线观看 | 欧美激情精品久久久久久免费| 久久精品日产第一区二区三区高清版 | av一区在线| 国产97免费视| 日韩欧美看国产| 国产mv免费观看入口亚洲| 亚洲人成在线网站| 情事1991在线| 九九热线视频只有这里最精品| 日本精品免费一区二区三区| 久久uomeier| 国产精品成久久久久三级| 欧美黑人巨大xxxxx| 日韩免费在线免费观看| 日本免费久久| 国产精品在线看| 日韩国产大片| 97超级碰碰| 草草视频在线一区二区| 国产一区二区免费在线观看| 日韩精品欧美大片| 激情欧美一区二区三区中文字幕| 久久精品国产亚洲5555| 久久精品一区二区三区不卡免费视频| 亚洲小说图片| 一区二区三区四区五区视频| 午夜国产一区二区| 欧美 国产 精品| 影音先锋中文字幕一区二区| 5月婷婷6月丁香| 丝袜美腿亚洲一区| 小明看看成人免费视频| 韩国av一区二区| youjizz.com国产| 久久久午夜电影| 午夜精品久久久久99蜜桃最新版| 亚洲欧美日韩系列| 色播视频在线播放| 在线日韩国产精品| 国产免费的av| 日韩大片免费观看视频播放| 国产中文字幕在线看| www.日韩不卡电影av| 国模私拍视频在线播放| 国产精品∨欧美精品v日韩精品| av在线成人| 久久久久无码国产精品一区| 久久美女精品| 男的插女的下面视频| 日本系列欧美系列| 日本泡妞xxxx免费视频软件| 久久九九久精品国产免费直播| 在线日韩国产网站| 精品国产成人av| 中文字幕日韩三级| 精品福利av导航| 1769在线观看| 57pao国产成人免费| 91精品国产色综合久久不卡粉嫩| 国产女人水真多18毛片18精品| 韩日一区二区三区| 国产精品www在线观看| 999在线观看视频| 精品一区二区久久| 成年人网站免费看| 亚洲精品国久久99热| 一级黄色av片| 亚洲福利小视频| 国产高清一区二区三区视频| 欧美专区在线观看| 97人人澡人人爽91综合色| 夜夜爽99久久国产综合精品女不卡 | 综合在线观看色| 国产中文字幕视频| 欧美v国产在线一区二区三区| caoporn国产精品免费视频| 久久久久中文字幕| 伊人久久一区| 日韩福利视频| 久久久久久夜| 日本一级片在线播放| 亚洲精品国产一区二区精华液 | 久久er99热精品一区二区| 黄色a一级视频| 亚洲成av人片一区二区三区| 国产欧美一区二区三区视频在线观看| 亚洲人成人99网站| av免费不卡| 福利视频一区二区三区| 亚洲精品成人影院| 鲁一鲁一鲁一鲁一av| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩 欧美 亚洲| 精品少妇一区二区三区在线视频| 日本www在线观看| 国产欧美中文字幕| 日本久久综合| 亚洲精品一二三四五区| 久久久影视传媒| 国产美女激情视频| 日韩av在线免费| 性欧美xxx69hd高清| 精品婷婷色一区二区三区蜜桃| 国产一区二区三区自拍| 四虎国产精品永久免费观看视频| 亚洲婷婷综合久久一本伊一区 | 亚洲激情国产精品| av第一福利在线导航| 国产日韩二区| 99精品国产99久久久久久福利| 中文字幕99页| 亚洲成av人片一区二区梦乃| 五月天久久久久久| 日本精品视频网站| 欧美丝袜丝交足nylons172| 手机看片福利日韩| 亚洲国产成人私人影院tom| 国产精品51麻豆cm传媒| 色一情一乱一区二区| 日韩国产大片| 欧美美女黄色网| www.日韩av| 波多野结衣二区三区| 中文字幕日韩精品在线观看| 亚洲成人高清| 日本男女交配视频| 97久久久精品综合88久久| 四虎成人在线观看| 色偷偷噜噜噜亚洲男人| 欧美一区一区| 国产中文字幕免费观看| 久久精品无码一区二区三区| 国产女优在线播放| 久久影院模特热| 欧美黄色影院| 91日韩视频在线观看| 亚洲精品中文在线影院| 三级网站免费观看| 国产成人在线精品| 亚洲有吗中文字幕| av无码一区二区三区| 欧美自拍偷拍午夜视频| 黄网站免费在线观看| 国产亚洲情侣一区二区无| 老司机久久99久久精品播放免费| 人与动物性xxxx| 亚洲电影在线看| 国产在视频一区二区三区吞精| 97超碰国产精品| 亚洲国产高清在线观看视频| 99热这里只有精品在线| 欧美亚洲午夜视频在线观看| 欧美wwwww| 成年人在线观看av| 欧美欧美欧美欧美| 一根才成人网| 国产激情片在线观看| 久久久精品天堂| 亚洲精品97久久中文字幕|