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

如何從0-1使用 Apache Arrow 構建新數據系統

大數據
我們正處于一個數據系統的黃金時代。有許多新的數據庫正在不斷出現。根據 DBDB(Database of Databases)的統計,自 2020 年以來已經出現了 124 個新的數據庫。這意味著幾乎每周都會有一個新的數據系統問世。

為了應對大規模數據處理中的性能和互操作性挑戰。Arrow 致力于提供一種高效的跨平臺數據交換機制,使數據能夠在不同操作系統和編程語言之間迅速、一致地流動。其設計注重性能優化,并得到開源社區廣泛的支持,成為許多數據處理項目的核心組件,推動了數據科學和分析領域的創新。本文將分享如何使用 Apache Arrow 來構建一個完整的數據系統。

一、為什么要構建新的數據系統

首先需要回答的問題就是為什么要構建一個新的數據系統。

1. One Size Fits All or Not?

圖片

據圖靈獎得主 Stonebraker 在 2005 年的一篇論文中指出,"One Size Fits All" 的概念已經過時。這意味著使用一個通用的數據系統(如 Oracle 或 MySQL)無法完全滿足所有問題的需求。因此,許多領域都需要特定的專用系統。一個明顯的例子是交易場景中的 OLTP(聯機事務處理)和分析場景中的 OLAP(聯機分析處理)的分離。此外,還有眾多由于數據處理模型的不同而產生的新系統,如適合實時計算的流處理和更適應云計算的 NoSQL 等等。然而有些人持不同意見,他們嘗試在一個系統中解決所有問題。例如,試圖同時處理 OLTP 和 OLAP 的 HTAP,還有流批一體、NewSQL 等新概念。無論是否支持"One Size Fits All"的觀點,新的想法和概念總是不斷涌現, 所以也需要不斷構建新的數據系統。

2. 數據庫的黃金時代

圖片

當前,我們正處于一個數據系統的黃金時代。有許多新的數據庫正在不斷出現。根據 DBDB(Database of Databases)的統計,自 2020 年以來已經出現了 124 個新的數據庫。這意味著幾乎每周都會有一個新的數據系統問世。

圖片

有了這么多數據系統,我們為什么還需要構造一個新的數據系統,這是否是重復造輪子呢?

3. 讀時建模

圖片

我們面對的場景是通用的日志處理,這是一項頗具挑戰的任務,因為不同廠商,甚至同一廠商不同應用的日志格式各不相同,而且一個尚處于開發中的系統的日志格式也會經常變動。常見的方法之一是寫時建模,即通過在數據庫中預先定義表結構或者模式來存儲日志數據。然后,通過一些 ETL 工具,將數據轉化為所需的表格類型。然而,當面對不同類型的數據時,例如日志來自 Nginx、Apache 和 Windows IIS 等不同系統,就需要維護多個 ETL 流程來處理它們。另一種解決方案是讀時建模,即先將原始數據存儲起來,不進行 ETL 處理,在實際使用時對字段進行抽取。例如圖中查詢 1,就是從這三類日志數據中抽取出各自的 method、time 和 client 字段,并實時構建一個新的結果表格。這種方法更適合處理多樣化的、不固定的數據模式。有興趣可以掃描上圖中的二維碼,它提供了一個有關讀時建模更加詳細的分享。

圖片

讀時建模的關鍵是有一個支持動態數據表模式的數據查詢引擎,才能夠在沒有預先定義數據模式的情況下查詢各種類型的數據。

下面介紹一下動態數據表模式可能是什么樣子的。在我們收集的數據中,可能有不同格式的日志。例如,有以鍵值對表示的日志,如綠色框所示;也可能有以 JSON 格式表示的日志,如紅色框所示。在支持動態數據表模式的系統中,可以在同一數據集中同時查詢到這兩種類型的日志。

圖片

接下來,我們可以通過字段提取的方式對這兩類數據進行格式化處理,從而得到一個合并在一起的二維表結構。

圖片

最后,可以使用一些函數對數據進行歸一化和合并。這樣做可以得到一個直觀明確的數據表,便于后續機器學習系統和報表系統進行處理。在這個過程中,我們可能會遇到同一個字段有不同類型的情況。例如,某個同名字段在某類日志中可能以整數形式存儲,而在另一個日志中可能以浮點數形式存儲;或者在導入數據時沒有進行適當處理,導致某些字段被導入為字符串類型。因此,同一個字段中可能同時包含多種不同類型的數據。

圖片

構建數據庫是一項復雜的工程,其中包含許多子任務??梢赃x擇改造一個開源項目,也可以從頭開始構建?,F有項目要么無法滿足讀時建模的需求,要么架構相對陳舊,不適合現代云計算服務的架構。而且改造現有系統,難度也比較大,因為具有固定的模式是很多系統的前置條件。因此,我們決定從頭開始構建這個系統,第一步就是定義內存中的數據格式。

二、什么是 Apache Arrow,為什么是 Apache Arrow

下面介紹一下什么是 Apache Arrow,我們為什么選擇了 Apache Arrow,以及我們要用它來做一些什么事情。

1. 內存數據格式

圖片

內存中的數據可以根據分布的不同,分為行式存儲和列式存儲。在行式存儲中,數據按照行的方式排列,類似于 C 或 C++ 中的二維數組,每一行連續存儲,將相關的信息放在一起。而在列式存儲中,同一列的數據放在一起,構成一個長數組。圖中是包含三個屬性(session_id,timestamp 和 ip)的二維表,左邊是它在行式存儲中的內存表示,右邊是它在列式存儲中的內存表示。

圖片

在事務處理的場景中,行式存儲是非常自然的選擇。因為大部分操作都是以一行為單位進行的,可以使用 session_id 構建 B 樹或 B+ 樹等索引,通過這個索引很快定位到 session_id 對應的具體的某一行,然后進行刪除或修改操作。

但在分析型場景中,用戶通常不會使用所有屬性,而是只會對某些屬性進行運算。例如,如果想知道表中有多少個不同的 IP 地址時,只需要關心 ip 這一列,而不關心 session_id 或 timestamp。在這種情況下,列式存儲就更為適合,因為只需讀取 ip 這一列數據,從而避免讀取其他不必要數據的開銷,減少了 IO 和內存的消耗。而且,列式存儲的數據在磁盤或內存中都是連續存儲的,可以更好保證數據的局部性,從而充分利用現代 CPU 的緩存和 SIMD(單指令多數據)向量化等運算機制。另外,相同屬性的數據放在一起可以更好地進行壓縮。例如,可以使用字典或其他高效的壓縮算法將這些具有相同屬性的數據放在一起進行壓縮。對于日志處理這種分析型的應用來說,列存儲是更合適的選擇。

2. Apache Arrow 的優勢

圖片

那么我們還要不要繼續造輪子?還是定義一套自己的列式存儲內存格式?

圖片

現在許多系統都定義了自己的內存數據格式,這帶來了數據轉換的問題。試想,如果我們想在 pandas 中調用 Spark 進行數據處理,那么要從 pandas 基于的 Python 環境轉換到 Spark 基于的 Java 環境,其中需要經過 Py4J、JVM 和 Spark 三層數據轉換。同樣地,如果我們定義了自己的內存格式,也會面臨類似的數據轉換問題,特別是在需要與其他系統進行互操作時。幸運的是,借助 Apache Arrow,可以在 PySpark 啟用 Arrow 格式,就可以與 pandas 直接共享內存,實現內存交換。

Arrow 到底是什么呢?Arrow 本身并不是一個數據存儲或執行引擎,而是一種高性能、內存中的列式存儲標準。它與具體的語言或應用程序無關,無論是用 C++、Python 還是 Rust 等語言,都可以進行跨語言跨系統的互操作。因為在任何環境中,Arrow 數據的內存表示是完全一致的,所以在進行跨系統傳輸時,不需要進行內存拷貝、序列化或反序列化等工作,實現了零拷貝。Arrow 沒有發明新的數據存儲方式,比如浮點數仍然按 IEEE 754 標準進行表示,但 Arrow 在標準化方面做了很多工作,例如如何表示空值 NULL、如何處理時間戳以及時區的表示等等。這些細節看起來很微小,但它們的重要性是在任何平臺和任何語言下的標準化。因此,一個全新的數據引擎也無需重新發明這些內存格式。

圖片

使用 Arrow 后,可以實現在不同系統之間共享內存,從而實現零拷貝。這意味著我們不是避免了繁重的數據復制和轉換,而是直接共享內存中的數據,使得數據處理過程更加高效。

圖片

Arrow 還有以下幾個好處。

首先,Arrow 原生實現了七種程序語言,并在此基礎上實現了更多語言的綁定,包括 Rust、C++、C、Python 等,基本覆蓋了主流的程序語言。并且得到大量數據系統的支持,如 PyTorch、Spark、ClickHouse 和 DuckDB 等,在這些系統中,數據可以采用 Arrow 格式進行輸出。

其次,Arrow 的性能表現不錯。有一個 Benchmark 對比了基于 Arrow 的數據引擎 DataFusion、Polars 與 DuckDB 的性能,雖然前兩者稍慢于 DuckDB,但仍然是可接受的成績。盡管看起來 Arrow 在每個小功能點上沒有什么創新,但綜合起來,它提供了一個相對完整的解決方案,并且模塊化做得非常好,API 對于系統的侵入性也較小。

此外,Arrow 的擴展性較強,比如可以擴展 Arrow 的類型,將機器學習中的一些類型如 tensor 在 Arrow 中實現;也可以使用 API 擴展自定義的計算函數。

總而言之,Arrow 的主要貢獻在于為列式存儲提供了一個標準和生態系統,因此對開發者和用戶來說,它可以作為一個現代數據技術棧的標準和基礎。

圖片

Arrow 擁有非?;钴S的開源社區。除了 Arrow Rust 等相關項目外,截至 2023 年 10 月,Arrow 本身已經得到了超過一萬兩千個 GitHub 的 star。上圖展示了 Arrow 在最近一個月的活躍程度,包括 PR、issue 以及貢獻者等方面的數據,足以看到 Arrow 是一個非常活躍的項目,并不需要擔心它的持續性和穩定性,可以預期 Arrow 能夠長期存在并會持續完善。

圖片

Arrow 通過幫助標準化內存格式,為構建數據系統提供了一個起點。然而,這只是開始,還有許多其他任務有待完成。例如,需要聚合、排序等更多的算子;需要開發客戶端 API 和數據交換功能;需要支持新的硬件,尤其是在信創領域,需要考慮對 ARM 指令集和國產硬件的兼容。

如此一來,構建一個數據系統變得非常復雜。上述工作也只能初步構建一個勉強滿足小規模使用的數據系統,而完成這個階段可能需要 10 年甚至更長時間。如果我們想要構建一個更大規模、分布式和高可用的數據系統,所需要的時間可能是前一階段的幾倍甚至更長。

按照人月神話的理論,投入更多的人力并不能線性地減少完成時間。因此,構建新的數據庫是一個非常昂貴的事情,需要巨大的時間、人力和經濟成本,這也是為什么新的數據庫創業公司需要籌集大量資金和足夠的時間。

雖然現在是數據庫的黃金時代,但也是最具挑戰性的時期。如果新的想法不能迅速實現,很難在市場上生存。好在有 Arrow。Arrow 不僅提供了基本的內存數據格式和模型,還提供了一些算子和計算功能,以及持久化、數據交換和跨平臺執行等模塊。通過使用 Arrow,能夠大大節省構建數據系統的時間和開發成本。

三、使用 Apache Arrow 構建數據系統

下面介紹 Arrow 如何助力數據系統的開發以及如何使用 Arrow 構建一個數據系統。

1. 數據系統執行流程

圖片

一個數據系統的執行流程通常包括以下幾個步驟。

首先,當系統接收到用戶的查詢請求時,會利用存儲和索引來獲取相關資源。

接下來,系統會根據用戶查詢生成一個邏輯計劃,該計劃表示了執行查詢所需的關系代數和操作的抽象。

然后,邏輯計劃會在經過優化之后轉為物理計劃,即如何真正執行查詢的計劃。

之后,在執行引擎中,系統會執行具體的操作,如表達式執行、聚合、排序和物化視圖等算子。

最后,系統將結果保存到用戶指定的路徑或傳輸到用戶的客戶端。

2. 數據存儲

圖片

我們的數據存儲模型是基于事件的,即基本的存儲單元抽象成了事件,類似于日志中的每一條日志。每個事件都有時間戳、原始信息和其他基本屬性,比如主機名、數據類型等。這些都是事件的元信息定義,我們將其抽象出來,并進行索引。

對于日志中的其他內容,我們將其作為原始數據存儲。底層存儲使用了 Parquet 這一列式持久化存儲標準,其對 Arrow 有很好的支持。Parquet 還會存儲一些元數據,比如每列的存儲位置和一些統計信息,如最大值和最小值等。這樣就可以支持一些查詢的下推操作。如果數據中存儲了多列,但只想訪問某一列,可以直接定位到該列的存儲位置,而不需要將整個文件都讀入內存中。

然而,Parquet 需要預先給定數據的模式,即存儲數據時需要先定義一個模式,無法直接支持動態模式或者無模式數據。為了支持動態模式的數據,在 Parquet 的基礎上我們進行了一些擴展,這樣就可以在 Arrow 和 Parquet 的基礎上進行簡單的修改,從而完成數據存儲。

圖片

數據存儲之后,需要讀入到內存中。每個數據在內存中會以 Arrow 定義的 Record Batch 形式存在。這種表示方法用于描述一組數據,并由其 Schema 指定數據的模式。

例如,有一列包含 session_id 字段的 Int64 類型數據,一列包含 datetime 字段的String 類型數據,還有一列包含 source_ip 字段的 String 類型數據,Schema 中定義并存儲了這些字段的類型,而具體的數據存儲在 Arrow Array 中,不同 Record Batch 的 Schema 是可以變動的。例如,在下一個 Record Batch 中,session_id 字段可能變成 String 類型,而 time 字段可能變成 Timestamp 類型。

通過不同模式 Record Batch 的組合,就可以獲得不同模式的數據。這樣,就實現了從數據存儲到內存表示的映射關系。

3. 索引/代碼/硬件資源

圖片

Arrow 并不是一個完整的查詢引擎。它缺少索引和用戶自定義函數等功能的支持,在我們的系統中,我們使用了時間戳索引和倒排索引,這樣用戶可以通過關鍵字和時間來定位到日志的位置。至于用戶自定義函數方面,我們向 Arrow 提交了一系列 PR,使其能夠支持用戶自定義函數。Arrow 在硬件資源方面有一些簡單的實現,比如內存管理和線程池。但是,如果想要進行更細粒度的管理,例如限制每個查詢的內存使用或設置不同查詢任務的優先級,仍然需要自己開發。所以,從這個角度來看,Arrow 在這方面還有繼續完善的空間。

4. SQL 解析/計劃生成/執行與傳輸

圖片

Arrow 也沒有提供將用戶的 SQL 語句解析成抽象語法樹的功能,但是我們可以使用一些開源工具,比如 ANTLR 和 Calcite,將 SQL 語句轉換成抽象語法樹。我們選擇使用 ANTLR 而不是 Calcite,是因為 Calcite 過于復雜且基于固定數據模式的假設,在處理動態模式時不太適用。

圖片

之后可以將抽象語法樹進一步轉換成邏輯計劃,邏輯計劃描述了數據執行的具體操作。在進行查詢優化時,我們可以調整邏輯計劃來提高性能。

例如想要找到特定 ip 的最新訪問時間,首先需要從數據集中讀取相關數據。然后,根據指定的條件(這里是 ip 等于某個特定字符串)進行數據過濾,并將需要的數據篩選出來。接下來,對過濾后的數據進行聚合運算計算其時間的最大值。

在此過程中,可以進行一些優化,其中一個常見的優化是下推操作。通過下推,可以將讀取 ip 和 _time 兩個字段的操作下推到表掃描階段,從而每次讀取數據時都跳過其他不必要的字段。此外,我們還可以將條件表達式(例如,ip 等于特定字符串)嵌入到操作中,這樣每次讀取時只會讀取與我們需要的 ip 相匹配的數據。

通過在表掃描階段進行這些優化,可以節省大量的 IO 開銷和內存資源,提高查詢性能。

圖片

邏輯計劃是一個抽象層,不包含在 Arrow 中,因此需要自己編寫邏輯計劃的代碼。

相對而言,邏輯計劃相對簡單,因為大多數 SQL 查詢語言及關系代數和邏輯計劃可以相互對應。物理計劃則相對復雜,因為它與底層機器有關,需要處理線程、并發和各種硬件。

最近,Arrow 提供了一個查詢執行引擎——Acero,可以提供很大幫助。Acero 是一個基于推送(Push)的引擎,其最小執行單元是 execution node,它的代碼非常清晰,并且具有清晰的 API 接口,包括如何處理其上游輸入和下游輸出,如何處理接收到的數據和停止接收數據,以及暫停和繼續運行等功能。

如果需要擴展,只需按照 API 定義自己的節點,并在 Acero 中注冊即可,就可以借助 Acero 進行計算的調度和執行,而不需要修改 Arrow 代碼。

圖片

我們注意到 Arrow 在處理動態數據模式方面存在一些限制,因此對 Arrow 進行了一些擴展。例如,添加了支持動態模式的匯聚節點 Schemaless SinkNode,它可以消除數據模式方面的一些限制。通過使用這個節點,可以處理沒有嚴格定義模式的數據。這允許我們更靈活地處理各種數據類型,而不僅僅限于特定的固定模式。

圖片

在這個過程中,我們得到了一個支持動態模式物理計劃的執行節點。此外,Arrow 的另一個限制在于執行節點創建時就需要預先定義數據的輸出模式。為了克服這個限制,我們進行了一些改造,將數據輸出模式延遲到實際輸出時動態生成。這樣,就能更好地支持動態模式的數據引擎。另外,我們也對 Arrow 提供的一些聚合函數和標量函數進行了動態模式的擴展。

圖片

這樣就可以使用 Arrow 來處理動態模式數據,并使用它執行并調度查詢的。目前,Acero 還不支持物化視圖,但對于大規模數據來說,物化視圖非常重要。物化視圖可以預先計算并且儲存一些耗時或復雜場景的結果,在查詢時可以快速訪問和利用這些預先計算的結果。同樣,我們對 Acero 進行了一些擴展,添加了中間狀態的處理方式,以便在 Arrow 中實現物化視圖,我們也計劃將這些一系列擴展提交給 Arrow。

圖片

最后,當查詢結束時,需要進行數據傳輸,可以是傳輸給用戶的客戶端,也可以是傳輸到用戶前端進行顯示。如果直接使用 ODBC 或者 JDBC,因為 ODBC 和 JDBC 本質上只能處理行式數據,行列的轉換無法避免,我們可以使用 Arrow Flight 和 Arrow Flight SQL 來規避這個問題。

Arrow Flight 是 Arrow 提供的基于 gRPC 或者 REST  的列式數據交換框架,無需復雜的開發,直接使用其 API 即可實現列式數據傳輸,而避免了數據轉換。在 Arrow Flight 之上得到了與 SQL 數據庫交互的協議 Arrow Flight SQL。這樣我們就可以利用與 SQL 兼容的現有客戶端直接進行查詢。

將來,Arrow 還將推出一個類似于 Arrow 自己的 JDBC 或者 ODBC 的工具,稱為 Arrow ADBC。這樣,原本與 ODBC 和 JDBC 兼容的數據庫客戶端將無需或只需極少修改代碼,就可以直接與 Arrow 進行通信。

Arrow 幫助我們實現了數據存儲、物理計劃和傳輸這三個方面的重要功能。如果在自己的數據系統實現中不是動態模式的,而僅僅是針對特定領域開發固定模式的新系統,那么只需構建索引、解析用以查詢的 SQL 或 Dataframe API,并轉換成邏輯計劃,然后使用 Calcite 的優化器將其轉換為 Arrow 的物理計劃,最后直接使用 Arrow 執行即可,需要構建的東西非常少。

四、一些 Tips

我們在 Arrow 的使用中積累了一些經驗和教訓。作為一個新的數據產品或數據產品的底座,Arrow 還存在不少問題。

1. 踩過的一些坑

圖片

首先更新頻繁是 Arrow 社區活躍的體現,意味著會有新的功能和改進,但同時它的接口還是不夠完善,我們建議盡量少修改原始代碼,而是向 Arrow 社區貢獻改進并多做擴展。Arrow 代碼庫可以分為三個層次:

  • Core 層:提供數據類型表示,這一層非常穩定,新版本可以完全保證和之前版本的兼容。
  • Compute 層:提供計算算子,相對穩定但可能有一些 bug,當使用一些比較高級的指令集如 AVX512 指令集可能會有一些內存對齊的問題。
  • Acero 層:是最新的執行引擎,不夠穩定而更適合開發測試。

Arrow 對于復雜類型的處理還不夠完備,比如 Union、List、JSON 等,需要額外的代碼實現。另外,Arrow 始于 2016 年,仍需要時間和大規模數據的驗證。各個相關項目(包括 DuckDB 等)主要使用的是 Core 部分,對于 Arrow 的 Compute 和 Acero 等部分,仍然需要在更大規模的數據上進行進一步的驗證。我們在開發過程中遇到了一些問題已經修復并向 Arrow 社區提交了改進。目前看來,Arrow 處于相對穩定的狀態。

2. DATA FUSION

圖片

最后,對于追求安全和現代化的考慮,我們建議使用 Arrow Rust 的實現。而且 Arrow 在 Rust 實現的基礎上推出了一個完整的數據引擎 DataFusion,它提供了比 Arrow 更強大的功能。DataFusion 在 Arrow 內存格式的基礎上提供了 SQL 解析和查詢計劃等功能,也支持子查詢和其他高級函數。此外,DataFusion 也繼承了 Arrow 出色的模塊化和可擴展的代碼風格,基于 DataFusion 構建新的數據引擎可以減少開發所需的時間,同時也能在開源社區獲得更多支持。

責任編輯:姜華 來源: DataFunTalk
相關推薦

2022-12-23 08:03:45

西瓜業務SEO前端

2023-10-30 07:30:08

VeCDP火山引擎

2023-06-26 19:25:18

效率消息中心業務線

2017-10-23 12:55:46

項目設計師流程

2017-01-18 09:33:07

數據構建價值

2016-01-14 13:07:20

美團壓測工具工具

2022-07-13 11:17:00

大數據規劃

2021-04-13 07:58:38

背包代碼模式

2022-07-06 07:27:52

32Core樹莓派集群

2019-12-13 09:00:58

架構運維技術

2022-01-17 13:31:53

value背包解法

2021-03-16 21:39:47

區塊鏈DEMOGo

2021-03-12 19:17:38

區塊鏈GoPython

2021-03-17 20:29:36

區塊鏈DEMOPython

2017-01-20 08:44:53

Apache Flum抓取數據

2017-08-10 09:11:38

規則引擎構建

2022-09-02 09:09:25

項目ReactES6

2025-05-26 10:00:00

TkinterGUIPython

2025-03-20 14:50:24

2023-05-10 10:45:06

開源工具庫項目
點贊
收藏

51CTO技術棧公眾號

日本电影一区二区| bl视频在线免费观看| 久久精品久久久精品美女| 久久精品视频在线播放| 中文字幕在线播放一区二区| 18video性欧美19sex高清| 国产欧美日本一区二区三区| 成人黄色av播放免费| 久久综合亚洲色hezyo国产| 久草在线成人| 欧美成人欧美edvon| 农村妇女精品一二区| 在线你懂的视频| 久久婷婷国产综合国色天香| 91视频国产一区| 亚洲婷婷综合网| 欧美 日韩 国产 一区| 亚洲人午夜精品免费| 中文字幕无人区二| 国产福利91精品一区二区| 亚洲一区中文日韩| 亚洲国产精品综合| 日韩av成人| 国产成人午夜视频| 91精品久久久久久久久久入口| 日韩av黄色片| 雨宫琴音一区二区三区| 在线精品视频视频中文字幕| 精品国产人妻一区二区三区| 狂野欧美xxxx韩国少妇| 欧美三级三级三级爽爽爽| 国产av天堂无码一区二区三区| 国产一二三区在线观看| 中文字幕乱码久久午夜不卡| 六月婷婷久久| 免费观看a视频| 国产精品18久久久久久久久 | 91成人福利视频| 精品久久久中文字幕| 日韩av在线免费| 色噜噜狠狠一区二区三区狼国成人| 欧美xo影院| 精品久久久久久电影| 欧美这里只有精品| av毛片在线看| 亚洲美女视频一区| 黄色一级片网址| 日本免费中文字幕在线| 中文字幕av一区 二区| 日本一区二区视频| 国产综合视频一区二区三区免费| 99免费精品视频| 国产在线精品一区二区中文| 韩国av免费在线| 国产宾馆实践打屁股91| 成人精品水蜜桃| 黄色av一区二区三区| 成人免费va视频| 国产女主播一区二区三区| 免费av网站在线播放| 成人国产一区二区三区精品| 国产原创精品| 能在线看的av| 国产精品色在线| 一区二区三区欧美成人| 黄色网在线看| 亚洲一区二区中文在线| 激情伊人五月天| 成人爱爱网址| 欧美探花视频资源| 亚洲妇熟xx妇色黄蜜桃| 大伊香蕉精品在线品播放| 精品久久五月天| aaaaaav| 日韩中出av| 伊是香蕉大人久久| 国产精品精品软件男同| 欧美日一区二区在线观看| 午夜精品视频网站| 久久久久久无码精品大片| 免费一级片91| 97久久夜色精品国产九色| 囯产精品一品二区三区| 久久综合九色综合久久久精品综合| 日本一区二区三区www| 欧美精品hd| 亚洲一区二区在线免费看| 久久久噜噜噜www成人网| aaaa欧美| 欧美精品一区二区三区蜜臀 | 成人欧美一区二区三区白人 | 午夜在线播放视频欧美| 国产精品激情自拍| 国内老熟妇对白xxxxhd| 26uuu国产电影一区二区| 婷婷四房综合激情五月| 日韩三级免费| 日本乱人伦一区| 国产精品一二区| 久久成人精品电影| 手机av在线免费| 99re8这里有精品热视频8在线| 日韩高清a**址| 永久免费看片视频教学| 国产精品一站二站| 国产丝袜精品第一页| 波多野结衣有码| 成人激情电影在线| 91极品视觉盛宴| 一区二区不卡视频| 久草在线资源福利站| 欧美精选一区二区| 亚洲最大成人网站| 国色天香一区二区| www.日韩av.com| 久视频在线观看| 久久97超碰色| 欧美午夜精品久久久久免费视| 你懂的视频在线播放| 亚洲午夜免费福利视频| 97碰在线视频| 国产成人77亚洲精品www| 日韩黄在线观看| 免费人成年激情视频在线观看| 日韩精品一二三四| av资源一区二区| 麻豆影视在线观看_| 日本福利一区二区| 精品人妻伦一二三区久| 欧美一区久久| 成人xxxx视频| 免费又黄又爽又色的视频| 黄色网页在线观看| 精品日本美女福利在线观看| 激情在线观看视频| 精品免费一区二区| 午夜精品福利视频| av资源在线免费观看| 国产欧美二区| 国产一区在线观| 97超碰在线免费| 欧美一区二区三区色| 在线视频第一页| 影音先锋在线一区| 国产日韩专区在线| 自拍视频在线网| 精品视频在线视频| 不用播放器的免费av| 香蕉综合视频| 国产精品久久精品| а天堂8中文最新版在线官网| 色av一区二区| 蜜桃av免费观看| 美腿丝袜亚洲综合| 狠狠色综合色区| 蜜臀久久99精品久久久| 欧美日韩国产在线播放| 漂亮人妻被黑人久久精品| 亚洲精品色图| 欧美日韩精品不卡| 亚洲日本在线观看视频| 久久精品国产精品| 国产按摩一区二区三区| 亚洲综合久久av| 亚洲图片综合网| 日韩制服丝袜先锋影音| 亚洲欧美日韩综合一区| 久久视频社区| 91精品国产乱码久久久久久蜜臀| 亚洲色图狠狠干| 欧美性生交片4| 日本黄色片免费观看| 国产凹凸在线观看一区二区| 播放灌醉水嫩大学生国内精品| 亚洲资源网你懂的| 成人黄色短视频在线观看| 美洲精品一卡2卡三卡4卡四卡| 亚洲国内精品在线| 91porny九色| 亚洲天堂久久久久久久| 大乳护士喂奶hd| 欧美aaaaa成人免费观看视频| 中文字幕中文字幕在线中心一区 | 在线观看91精品国产入口| 免费91在线观看| 成人在线一区二区三区| 男人透女人免费视频| 91国语精品自产拍| 久久亚洲午夜电影| 国产精品国产三级在线观看| 午夜精品久久久久久久久久久久| av亚洲在线| 精品国产一二三| 九九热最新视频| 亚洲一区二区三区三| 影音先锋男人在线| 成人免费视频一区| www.se五月| 国产精品乱看| 日本一道在线观看| 狠狠色丁香婷婷综合影院| 不卡视频一区二区三区| 福利视频亚洲| 91精品国产91久久| 97超碰资源站在线观看| 亚洲天堂av电影| 噜噜噜久久,亚洲精品国产品| 在线欧美一区二区| 国产无遮挡又黄又爽又色| 国产精品不卡一区二区三区| 扒开jk护士狂揉免费| 国产不卡一区视频| 天堂av2020| 日韩高清在线不卡| 香港三级韩国三级日本三级| 91精品国产麻豆国产在线观看| 鲁鲁狠狠狠7777一区二区| 一区二区三区四区视频免费观看| 国产精品主播视频| 电影一区二区三区| 97碰在线观看| 欧美xxx黑人xxx水蜜桃| 久久久精品久久久| 午夜视频成人| 中文字幕av一区二区三区谷原希美| 色综合久久久久久| 日韩三区在线观看| 国产日韩精品suv| 欧美在线免费视屏| 欧美h在线观看| 欧美日韩国产色视频| 日本a在线观看| 亚洲日本青草视频在线怡红院| 麻豆精品免费视频| 91麻豆蜜桃一区二区三区| 中文字幕人妻一区二区三区| 国产成人精品亚洲日本在线桃色 | 成人精品视频一区| 欧美激情第一区| 国内精品视频一区二区三区八戒| 亚洲国产高清av| 免费观看一级特黄欧美大片| 国产超碰在线播放| 日韩中文字幕一区二区三区| 成人中文字幕av| 日本大胆欧美人术艺术动态 | 国产一区日韩二区欧美三区| 九一精品久久久| 久久99久久久欧美国产| 亚洲一级免费在线观看| 久久国产剧场电影| 国产精品自在自线| 国产精品一区不卡| 亚洲精品第二页| av电影在线观看一区| 懂色av粉嫩av蜜乳av| 国产日产欧美一区| 久久精品色妇熟妇丰满人妻| 亚洲色图视频网站| 国产亚洲精久久久久久无码77777| 亚洲一区二区精品视频| 国产精品xxxx喷水欧美| 色综合久久久久综合99| 国产99免费视频| 337p亚洲精品色噜噜| www.五月婷婷| 精品呦交小u女在线| 番号在线播放| 久久亚洲国产成人| 成人免费观看在线观看| 国产成人一区二区三区小说| 欧美一级网址| 国产另类自拍| 国产成人精品免费视| 一本一生久久a久久精品综合蜜| 午夜欧美精品久久久久久久| 亚洲 高清 成人 动漫| 久久av影视| 亚洲tv在线观看| 成人永久在线| 国产亚洲欧美另类一区二区三区| 99久久久国产| 激情五月综合色婷婷一区二区| 欧美先锋资源| 日韩精品中文字幕一区二区三区 | 久久久久国产精品人| 黄色录像免费观看| 久久久国产午夜精品| 91嫩草国产丨精品入口麻豆| aa亚洲婷婷| 国内外成人免费在线视频| 成av人片一区二区| 黄大色黄女片18免费| 亚洲大片在线观看| 伊人成年综合网| 天天色图综合网| 免费毛片视频网站| 国产精品久久久久久亚洲毛片| 私库av在线播放| 在线观看国产日韩| 日本一区二区网站| 欧美色视频在线| 香蕉久久国产av一区二区| 亚洲网站视频福利| 国产高清自产拍av在线| 91精品国产综合久久久久久久久| 精品素人av| 三级网在线观看| 日韩国产在线一| 一区二区视频观看| 欧美 日韩 国产 一区| 久久精品国产欧美激情| 黄页网站在线| 成人在线播放av| 成人一二三区| 僵尸世界大战2 在线播放| 久久99精品久久久| 亚洲精品成人无码熟妇在线| 国产精品国产三级国产aⅴ入口 | 欧美色视频日本版| 国产一级片免费视频| 亚洲精品永久免费| 999av小视频在线| 99re视频| 欧美在线亚洲| 亚洲精品久久久久久宅男| 91免费观看在线| 日韩成人av毛片| 日韩一区二区三区在线| 黄色在线播放网站| 国产欧美一区二区三区四区| 草草视频在线| 波多野结衣一区二区三区在线观看| 色中色综合网| 国产精品人人爽人人爽| www国产精品av| www.av欧美| 在线看国产日韩| 爱久久·www| 国产精品色悠悠| 久久不卡国产精品一区二区 | 日韩欧美一区二区三区四区| 欧美日韩一卡| 日韩少妇一区二区| 性欧美大战久久久久久久久| 蜜桃视频污在线观看| 久久久久久亚洲| 久久综合社区| 日韩avxxx| 国产网站一区二区| 色婷婷久久综合中文久久蜜桃av| 一本色道久久88亚洲综合88| 成人在线观看免费播放| 亚洲国产激情一区二区三区| 精品影视av免费| 国产性xxxx| 亚洲第一天堂无码专区| 狼人综合视频| 日本一区二区三区www| 美女网站一区二区| 人妻人人澡人人添人人爽| 欧美不卡一二三| 亚洲小少妇裸体bbw| 视频一区视频二区视频三区视频四区国产| 秋霞电影一区二区| 尤物在线免费视频| 欧美xxxxx牲另类人与| 欧美激情护士| 深田咏美在线x99av| 国产乱子轮精品视频| 国产第一页在线播放| 亚洲视频视频在线| 不卡的国产精品| 男女猛烈激情xx00免费视频| 久久精品日产第一区二区三区高清版| 在线观看国产一区二区三区| 久久中文字幕在线视频| 少妇久久久久| 亚洲欧洲日本精品| 亚洲国产日韩综合久久精品| 免费在线性爱视频| 91久久久在线| 亚洲美女毛片| 少妇高潮惨叫久久久久| 欧美电影免费观看完整版| 在线天堂资源www在线污| 亚洲综合欧美日韩| 99久久久免费精品国产一区二区| 欧美亚洲另类小说| 精品中文字幕在线2019| 一区三区在线欧| 久久精品亚洲天堂| 欧美性极品xxxx娇小| 1区2区3区在线视频| 日本一区二区三区视频在线观看| 国产精品一区二区久激情瑜伽| 国产婷婷色一区二区在线观看| 久久中文精品视频| 精品av一区二区| 中文字幕99页|