999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Hibernate OGM的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一訪問模型的設(shè)計與實現(xiàn)

2016-12-15 02:47:06李東奎鄂海紅
軟件 2016年11期
關(guān)鍵詞:數(shù)據(jù)庫模型

李東奎,鄂海紅

(北京郵電大學(xué),北京 海淀 100876)

基于Hibernate OGM的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一訪問模型的設(shè)計與實現(xiàn)

李東奎,鄂海紅

(北京郵電大學(xué),北京 海淀 100876)

針對將現(xiàn)有的關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫都有自己的專用API的應(yīng)用場景,借助于開源框架Hibernate OG建立了一個統(tǒng)一的存儲SQL數(shù)據(jù)庫和非NoSQL數(shù)據(jù)庫的框架,使其對這兩種數(shù)據(jù)庫的讀寫能在一個框架下按照統(tǒng)一的規(guī)則進(jìn)行,無需進(jìn)行額外的API查看。通過使用JAVA的注解區(qū)別數(shù)據(jù)庫類型、JAVA對象填充數(shù)據(jù)、Hibernate OGM框架自動將JAVA對象解析成點分格式、底層通過原生API封裝寫入數(shù)據(jù)庫的引擎。針對混合使用HBase和MySQL的場景,對以上統(tǒng)一訪問模型進(jìn)行了實驗和驗證。實驗表明,通過JAVA注解區(qū)分?jǐn)?shù)據(jù)庫類型,通過JAVA對象填充數(shù)據(jù),通過Hibernate OGM統(tǒng)一解析數(shù)據(jù)存儲數(shù)據(jù)的這一系列的操作來進(jìn)行對SQL和NoSQL數(shù)據(jù)庫的方案是可行的。

HBase;MySQL;數(shù)據(jù)庫

本文著錄格式:李東奎,鄂海紅. 基于Hibernate OGM的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一訪問模型的設(shè)計與實現(xiàn)[J].軟件,2016,37(11):14-18

0 引言

伴隨著如今互聯(lián)網(wǎng)行業(yè)的高速發(fā)展,各種數(shù)據(jù)格式層出不窮,從而產(chǎn)生了能適應(yīng)各種不同類型數(shù)據(jù)的數(shù)據(jù)庫。由于最開始的數(shù)據(jù)較為簡單且有一定規(guī)律可循,所以從誕生了最開始的關(guān)系型數(shù)據(jù)庫,比如MySQL、PostgreSQL和SQLServer仍然被廣泛使用。隨著互聯(lián)網(wǎng)浪潮的繼續(xù)推進(jìn)和大數(shù)據(jù)時代的到來,要處理的數(shù)據(jù)不再是簡單的扁平數(shù)據(jù)了,而是大量如Key-Value型、JSON型、XML型等新的數(shù)據(jù)類型,從而產(chǎn)生了HBase、MongoDB、Redis等類型的數(shù)據(jù)庫來適應(yīng)新的數(shù)據(jù)類型[1]。NoSQL數(shù)

據(jù)庫不同于傳統(tǒng)的數(shù)據(jù)庫的重要區(qū)別,就是面向文檔、圖形、鍵值對、對象等存儲方式,更適合存儲某些特定類型的數(shù)據(jù)[2],其使用也成為一種潮流和趨勢。因此在本文中,提到的NoSQL[3]數(shù)據(jù)即為非關(guān)系型數(shù)據(jù)庫,提到的SQL數(shù)據(jù)庫即為關(guān)系型數(shù)據(jù)庫。

雖然現(xiàn)有的NoSQL數(shù)據(jù)庫經(jīng)過了十幾年的發(fā)展,已經(jīng)擁有了初步的使用規(guī)模,表現(xiàn)良好,但是SQL數(shù)據(jù)庫經(jīng)歷了數(shù)十年的研究和性能優(yōu)化,很多數(shù)據(jù)都可以使用SQL數(shù)據(jù)庫進(jìn)行很好的建模,所以關(guān)系型數(shù)據(jù)庫不能完全被相對不成熟的NoSQL數(shù)據(jù)庫替代和舍棄[4]。而對于實際使用的數(shù)據(jù)需要存入數(shù)據(jù)庫時,需要判斷其適合使用SQL數(shù)據(jù)庫還是NoSQL數(shù)據(jù)庫,然后使用不同的API訪問,需要花費(fèi)大量的時間去調(diào)研研究各種不同數(shù)據(jù)庫的API使用,尤其是現(xiàn)在NoSQL數(shù)據(jù)庫和SQL數(shù)據(jù)庫的編程模型差異性非常大,增加了編程難度,降低了開發(fā)速度。

SQL數(shù)據(jù)和NoSQL數(shù)據(jù)庫的訪問沒有統(tǒng)一的訪問模型。而使用原生的數(shù)據(jù)庫訪問API將增加應(yīng)用的復(fù)雜性并降低開發(fā)效率和可維護(hù)性。為了克服上述缺點,有必要提出一種解決方案,允許開發(fā)人員無論對于SQL型數(shù)據(jù)庫還是NoSQL數(shù)據(jù)庫使用統(tǒng)一的編程模型進(jìn)行數(shù)據(jù)庫的訪問,不需要了解底層數(shù)據(jù)庫的編程細(xì)節(jié),這既具有理論意義,又具有使用價值。

本文提出的關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫的統(tǒng)一訪問模型旨在為SQL和NoSQL存儲提供統(tǒng)一的編程訪問模型,在HBase[5]和MySQL的數(shù)據(jù)庫之間架起一座橋梁屏蔽底層的數(shù)據(jù)庫的編程模型的差異,即為開發(fā)人員提供一個屏蔽底層的分離的數(shù)據(jù)源的訪問解決方案。

1 基于HibernateOGM的SQL和NoSQL的統(tǒng)一訪問模型的設(shè)計

1.1 HibernateOGM介紹

Hibernate Object/Grid Mapper(OGM)[6]這個項目能夠為NoSQL數(shù)據(jù)庫提供Java Persistence(JPA)支持。它復(fù)用了Hibernate Core引擎將實體持久化至NoSQL數(shù)據(jù)存儲中,而不是關(guān)系型數(shù)據(jù)庫中。它還復(fù)用了Java Persistence Query Language(JP-QL)來搜索數(shù)據(jù)。

通過重寫Datastore provider和GridDialect,使得Hibernate OGM擁有訪問HBase的能力,實現(xiàn)的原理如下,將非結(jié)構(gòu)化壓縮成結(jié)構(gòu)化的數(shù)據(jù)。在Hiberante OGM框架中,Datastore provider扮演了數(shù)據(jù)提供者的角色,任何SQL或者NoSQL數(shù)據(jù)庫,都可以通過重寫Datastore provider來定制自己的數(shù)據(jù)庫訪問方式,因此,可以通過改寫Datastore provider來定制框架,使框架擁有訪問HBase的能力。

圖1 Hibernate OGM架構(gòu)圖Fig.1 HibernateOGM Structure

1.2 JAVA注解

Annotation(注解)是JDK1.5及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時檢查。注解是以‘@注解名’在代碼中存在的,根據(jù)注解參數(shù)的個數(shù),我們可以將注解分為:標(biāo)記注解、單值注解、完整注解三類。它們都不會直接影響到程序的語義,只是作為注解(標(biāo)識)存在,我們可以通過反射機(jī)制編程實現(xiàn)對這些元數(shù)據(jù)(用來描述數(shù)據(jù)的數(shù)據(jù))的訪問。另外,你可以在編譯時選擇代碼里的注解是否只存在于源代碼級,或者它也能在class文件、或者運(yùn)行時中出現(xiàn)(SOURCE/CLASS/RUNTIME)。

通過為類添加注解,可以在程序運(yùn)行時查看某一個對象的注解對應(yīng)哪個數(shù)據(jù)庫,從而實現(xiàn)了程序自動建立對象和數(shù)據(jù)庫之間的聯(lián)系。

1.3 模型架構(gòu)

此部分,介紹模型的架構(gòu)和架構(gòu)的中間件的功能。本架構(gòu)中包含如下中間件:模型解析器、數(shù)據(jù)源分離策略的HBase模型處理器、數(shù)據(jù)源分離策略的MySQL模型處理器。模型架構(gòu)如下圖2所示。

1.3.1 mode parser

此部分為模型架構(gòu)的模型解析器,當(dāng)架構(gòu)存儲

數(shù)據(jù)時,會傳遞JAVA BEAN給mode parser模塊,此模塊判斷運(yùn)行時判斷JAVA BEAN的注解信息,根據(jù)注解信息即可判斷此JAVA BEAN中包含的數(shù)據(jù)將要被傳送到哪個數(shù)據(jù)庫,然后將此JAVA BEAN傳遞到相應(yīng)的MO DE。此模塊是整個數(shù)據(jù)訪問流的中轉(zhuǎn)模塊。當(dāng)讀取數(shù)據(jù)時,此模塊負(fù)責(zé)將數(shù)據(jù)與相應(yīng)的JAVA BEAN做轉(zhuǎn)換。

圖2 模型架構(gòu)圖Fig.2 Mode Structure

1.3.2 HBase mode

此模塊用于模型框架對于HBase的讀取和寫入操作,對于原生的HBase的API做了一次封裝,使得框架上層傳送的數(shù)據(jù)能夠訪問HBase數(shù)據(jù)庫。

Insert handler:此模塊用于執(zhí)行框架數(shù)據(jù)插入HBase數(shù)據(jù),根據(jù)框架上層傳送的JAVA BEAN,此模塊可以解析出將要插入的數(shù)據(jù)庫表的名稱,然后根據(jù)相應(yīng)的插入邏輯,執(zhí)行底層的實際的插入HBase數(shù)據(jù)的操作。

Delete handler:此模塊用于執(zhí)行框架數(shù)據(jù)刪除HBase的數(shù)據(jù),根據(jù)框架上層傳送的JAVA BEAN,從模塊可以解析出將要刪除的數(shù)據(jù)的表的名稱、ROWKEY,然后根據(jù)相應(yīng)的刪除邏輯,執(zhí)行底層的實際的刪除HBase數(shù)據(jù)的操作。

Read Handler:此模塊用于執(zhí)行框架數(shù)據(jù)的讀取查詢HBase的數(shù)據(jù),根據(jù)框架上層傳送的JAVA BEAN,從模塊可以解析出將要讀取的數(shù)據(jù)的表的名稱、ROWKEY,然后根據(jù)相應(yīng)的讀取邏輯,執(zhí)行底層的實際的讀取數(shù)據(jù)的操作。

1.3.3 MySQL mode

此模塊用于模型框架對于MySQL的讀取和寫入操作,對于原生的MySQL的API做了一次封裝,使得框架上層傳送的數(shù)據(jù)能夠訪問HBase數(shù)據(jù)庫。

Insert handler:此模塊用于執(zhí)行框架數(shù)據(jù)插入HBase數(shù)據(jù)。根據(jù)傳遞的信息,解析出數(shù)據(jù)庫名稱,執(zhí)行MYSQL數(shù)據(jù)庫的插入。

Delete handler:此模塊用于執(zhí)行框架數(shù)據(jù)插入HBase數(shù)據(jù)。根據(jù)傳遞的信息,解析出數(shù)據(jù)庫和PRIMARY KEY,執(zhí)行MYSQL數(shù)據(jù)庫的刪除。

Read Handler:此模塊用于執(zhí)行框架數(shù)據(jù)的讀取查詢HBase的數(shù)據(jù),根據(jù)傳遞的信息,從模塊可以解析出將要讀取的數(shù)據(jù)的表的名稱、PRIMARY,KEY,然后根據(jù)相應(yīng)的讀取邏輯,執(zhí)行底層的實際的讀取數(shù)據(jù)的操作。

2 模型實現(xiàn)

此模塊主要介紹次模型框架的實現(xiàn)思路和原理。中間件的實現(xiàn)是通過使用Java語言,HBase API和JDBC API來創(chuàng)建平臺類。中間件層的所有接口都封裝在Platform Class中。在加載過程中,Platform Class首先讀取記錄HBase和MySQL信息的配置文件,來實現(xiàn)和HBase、MySQL數(shù)據(jù)通信來驗證配置信息中的數(shù)據(jù)庫信息。其次,調(diào)用配置模塊進(jìn)行存儲平臺的配置,主要包括HBase的初始化,創(chuàng)建作為Platform類的靜態(tài)變量的MySQL連接池,映射關(guān)系用于完成HBase和MySQL的數(shù)據(jù)關(guān)聯(lián)。然后,用戶程序可以通過調(diào)用由搜索模塊,讀取模塊,寫入模塊和刪除模塊提供的接口來操作數(shù)據(jù)。這些接口遵循數(shù)據(jù)關(guān)聯(lián)模塊中定義的規(guī)則,確保HBase和MySQL中的數(shù)據(jù)關(guān)聯(lián)。框架的加載到運(yùn)行流程圖如下圖3所示:

圖3 模型加載流程Fig.3 Mode load process

2.1 mode parser模塊的實現(xiàn)

框架可以動態(tài)識別傳遞來的BEAN所屬的數(shù)據(jù)

庫,原理是使用了JAVA annotation,通過動態(tài)解析,可以減少框架的配置量,實現(xiàn)過程如下圖4所示:

圖4 mode parser流程Fig.4 mode parser process

2.2 HBase mode模塊的實現(xiàn)

此模塊重寫了Datastore provider和GridDialect,使得Hibernate OGM擁有訪問HBase的能力,實現(xiàn)的原理如下,將非結(jié)構(gòu)化壓縮成結(jié)構(gòu)化的數(shù)據(jù)。在Hiberante OGM框架中,Datastore provider扮演了數(shù)據(jù)提供者的角色,任何SQL或者NoSQL數(shù)據(jù)庫,都可以通過重寫Datastore provider來定制自己的數(shù)據(jù)庫訪問方式,因此,可以通過改寫Datastore provider來定制框架,使框架擁有訪問HBase的能力。對數(shù)據(jù)庫的操作主要是CURD操作,GridDialect作為一個JAVA基類,通過繼承并拓展重寫,可以派生出對某一個特定數(shù)據(jù)庫的CURD操作,重寫GridDialect某一個函數(shù)就是拓展改寫訪問數(shù)據(jù)庫的一種功能,在GridDialect類中定義了豐富的可被改寫的可繼承的函數(shù),通過這些函數(shù)完成了拓展改寫數(shù)據(jù)庫CURD的能力??傊?,通過Datastore provider和 GridDialect完了對某一特定數(shù)據(jù)庫,特定數(shù)據(jù)庫的操作的編程。

2.2.1 Delete handler模塊的實現(xiàn)

這個接口的輸入是一個JAVA BEAN,輸出是成功還是失敗。接口遵循數(shù)據(jù)關(guān)聯(lián)模塊規(guī)則:HBase的表名對應(yīng)于JAVA BEAN的對象名,HBase的列族名對應(yīng)于JAVA BEAN中的內(nèi)嵌對象的名字,HBase列族里的KEY名稱對應(yīng)于JAVA BEAN內(nèi)嵌對象的成員名;MySQL表明對應(yīng)于JAVA BEAN對象名,列名對應(yīng)BEAN中的成員變量名。因此刪除一行數(shù)據(jù),需要ROWKEY和表名。刪除流程如下圖5所示:

圖5 Delete handler流程Fig.5 delete handler process

2.2.2 Insert handler模塊的實現(xiàn)

這個接口的輸入是一個JAVA BEAN,輸出是成功還是失敗。接口遵循數(shù)據(jù)關(guān)聯(lián)模塊規(guī)則:HBase的表名對應(yīng)于JAVA BEAN的對象名,HBase的列族名對應(yīng)于JAVA BEAN中的內(nèi)嵌對象的名字,HBase列族里的KEY名稱對應(yīng)于JAVA BEAN內(nèi)嵌對象的成員名;MySQL表明對應(yīng)于JAVA BEAN對象名,列名對應(yīng)BEAN中的成員變量名。默認(rèn)情況下,HBase和MySQL存儲相同的數(shù)據(jù)模式。插入模塊運(yùn)行時流程如下圖6所示:

圖6 Insert handler流程Fig.6 Insert handler process

2.2.3 Read handler模塊的實現(xiàn)

存儲平臺的讀模塊負(fù)責(zé)從HBase讀取數(shù)據(jù)。 它包括讀取HBase表的所有數(shù)據(jù),讀取HBase表的行數(shù)據(jù)的接口和讀取對應(yīng)于HBase表的MySQL表的所有記錄的接口。讀取模塊運(yùn)行時流程如下圖7所示:

圖7 Read handler流程Fig.7 read handler process

2.3 MySQL mode模塊的實現(xiàn)

MySQLMode的實現(xiàn),與HBase mode的實現(xiàn)大同小異。MySQL的數(shù)據(jù)格式固定,所以數(shù)據(jù)被HibernateOGM轉(zhuǎn)換后是標(biāo)準(zhǔn)的“表名.列名”的格式,分割后可以解析出表名和列名,然后交由需要的處理邏輯進(jìn)行處理。

Insert handler:此模塊用于執(zhí)行框架數(shù)據(jù)插入HBase數(shù)據(jù)。根據(jù)傳遞的信息,解析出數(shù)據(jù)庫名稱,執(zhí)行MYSQL數(shù)據(jù)庫的插入。

Delete handler:此模塊用于執(zhí)行框架數(shù)據(jù)插入HBase數(shù)據(jù)。根據(jù)傳遞的信息,解析出數(shù)據(jù)庫和PRIMARY KEY,執(zhí)行MYSQL數(shù)據(jù)庫的刪除。

Read Handler:此模塊用于執(zhí)行框架數(shù)據(jù)的讀取查詢HBase的數(shù)據(jù),根據(jù)傳遞的信息,從模塊可以解析出將要讀取的數(shù)據(jù)的表的名稱、PRIMARY,KEY,然后根據(jù)相應(yīng)的讀取邏輯,執(zhí)行底層的實際的讀取數(shù)據(jù)的操作。

3 結(jié)論

本文闡釋了基于HibernateOGM框架的SQL和NoSQL統(tǒng)一訪問架構(gòu)的設(shè)計與實現(xiàn),該訪問模型理論上適用于任一種SQL數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫,并選定HBase和MySQL對框架進(jìn)行了完整實現(xiàn),通過框架提出的mode parser,實現(xiàn)了統(tǒng)一訪問中的NoSQL數(shù)據(jù)和MySQL中的SQL數(shù)據(jù)。簡化了編程模式,開發(fā)人員只需專注于數(shù)據(jù)的格式定義,并給出相應(yīng)的BEAN并在BEAN標(biāo)明注解即可,提高了開發(fā)效率和可維護(hù)性。但面對海量數(shù)據(jù)的查詢,該查詢模型的查詢效率還需 進(jìn)一步改進(jìn)和優(yōu)化??偟膩碚f,該統(tǒng)一查詢模型出的理論框架是可行的,達(dá)到了預(yù)期的效果。

致謝(可選)

感謝我的指導(dǎo)老師鄂海紅老師的全心指導(dǎo),用心關(guān)懷。鄂海紅老師積極勤奮,性格開朗,思維嚴(yán)謹(jǐn),工作認(rèn)真負(fù)責(zé),在學(xué)術(shù)上出類拔萃。鄂海紅老師在日常生活和學(xué)習(xí)中給我無微不至的照顧,并且從畢業(yè)論文的開題到最終答辯,一直給我悉心指導(dǎo),提出寶貴的意見。鄂海紅老師認(rèn)真負(fù)責(zé)的態(tài)度、積極勤奮的品格,都將成為我以后人生路上學(xué)習(xí)的榜樣。感謝所有本文參考文獻(xiàn)的作者們,你們的研究給了我很多啟發(fā),對本文的研究有莫大的幫助。

[1] Stonebraker M. SQL databases v. NoSQL databases. Communications of the ACM, 2010, 53(4): 10-11.

[2] Rick Cattell. Scalable SQL and NoSQL Data Stores.ACM Special Interest Group on Management of Data. New York, 2010: 12-27.

[3] Stonebraker M. New sql: An alternative to nosql and old sql for new oltp apps. 2011.

[4] Brynko B. NuoDB: Reinventing the Database. Information Today, 2012, 29(9): 9-9.

[5] Hbase 0.95-SNAPSHOT Reference. http://hbase.apache.org/ xref/index.html.

[6] http://hibernate.org/ogm/

Design and Implementation of Relation Database and Non-Relation Database Unified Access Model Based on HibernateOGM

LIU Dong-kui E Hai-hong
(2. School of Computer Science, Beijing University of Posts and Telecommunications, Beijing 100876, China)

For the existing relational database and non-relational database has its own application-specific API scenarios, with the help of open-source framework Hibernate OG to establish a unified storage SQL database and non-NoSQL database framework, so that both of them Database read and write in a framework in accordance with the unified rules, without additional API view. Through the use of JAVA annotation distinction between the database type, JAVA object to fill data, Hibernate OGM framework automatically JAVA object analysis into point format, the underlying API package written by the original database engine. For the mixed use of HBase and MySQL scenarios, the above uniform access model for the experiment and validation. Experiments show that it is feasible to distinguish database types by JAVA annotation, populate data with JAVA objects, and unify database data storage through Hibernate OGM to implement SQL and NoSQL database.

HBase; MySQL; Database

TP311.13

A

10.3969/j.issn.1003-6970.2016.11.004

國家科技支撐計劃(2014BAK15B01)。

李東奎(1992-),男,碩士研究生,HBase存儲研究。

鄂海紅,副教授,主要研究方向:大數(shù)據(jù)及個性化推薦系統(tǒng)。

猜你喜歡
數(shù)據(jù)庫模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
數(shù)據(jù)庫
財經(jīng)(2017年15期)2017-07-03 22:40:49
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
3D打印中的模型分割與打包
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
FLUKA幾何模型到CAD幾何模型轉(zhuǎn)換方法初步研究
主站蜘蛛池模板: 国产理论精品| 久久无码免费束人妻| 在线看片免费人成视久网下载| 九色最新网址| 2021国产精品自产拍在线| 国产乱子伦手机在线| 欧美亚洲另类在线观看| 男女猛烈无遮挡午夜视频| 久久黄色视频影| 最新无码专区超级碰碰碰| 操美女免费网站| 五月婷婷丁香色| 色婷婷成人| 免费一级全黄少妇性色生活片| 亚洲成a人片77777在线播放| 日韩欧美91| 无码区日韩专区免费系列| 精品视频免费在线| 国产精品网址你懂的| 欧美另类图片视频无弹跳第一页| 免费黄色国产视频| 久久综合伊人77777| 国产成人精品一区二区免费看京| 91精品国产自产91精品资源| 欧美成人午夜视频| 中文字幕亚洲第一| 国产美女无遮挡免费视频| www.91中文字幕| 青草视频免费在线观看| 一本大道香蕉高清久久| 人妻熟妇日韩AV在线播放| 色久综合在线| 伊人久久综在合线亚洲2019| 欧美另类精品一区二区三区| 久久久久无码国产精品不卡 | 国产尤物在线播放| 亚洲专区一区二区在线观看| 91福利在线观看视频| 国产96在线 | 亚洲国内精品自在自线官| 国产午夜在线观看视频| 亚洲国产中文在线二区三区免| 欧美日韩第二页| 真实国产乱子伦视频| 国产男人的天堂| 日韩精品成人在线| 亚洲无线观看| 亚洲第一极品精品无码| 夜夜拍夜夜爽| 成人亚洲国产| 欧美午夜视频| 亚洲精品无码久久毛片波多野吉| 性做久久久久久久免费看| 波多野结衣视频网站| 国产伦精品一区二区三区视频优播 | 亚洲人在线| 婷婷综合缴情亚洲五月伊| 色久综合在线| www亚洲天堂| 91无码国产视频| 久久精品国产亚洲麻豆| 国产麻豆精品久久一二三| 久久久久免费看成人影片| 99热亚洲精品6码| 亚洲成A人V欧美综合天堂| 高清色本在线www| 中文字幕丝袜一区二区| 国产综合网站| 国产精品部在线观看| 91精品国产综合久久不国产大片| 亚洲Av激情网五月天| 久久99久久无码毛片一区二区| 粉嫩国产白浆在线观看| 亚洲精品日产AⅤ| 久久综合伊人 六十路| 亚洲国产精品VA在线看黑人| 中文字幕 欧美日韩| 色婷婷在线影院| 香蕉伊思人视频| 亚洲91在线精品| 国产成人三级在线观看视频| 成人午夜福利视频|