多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 數(shù)據(jù)庫(kù) > 數(shù)據(jù)庫(kù)應(yīng)用 > mondrian使用測(cè)試

mondrian使用測(cè)試

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-03-18 10:04:58 閱讀次數(shù):5477次
     mondrian是1個(gè)OLAP引擎,和OLTP不同的是,OLAP是建立在物理表以上的1個(gè)邏輯模型,稱為1個(gè)立方體,這個(gè)立方體的建立是通過(guò)指定可選的維度和度量,每個(gè)維度有1個(gè)維度表,維度有層次信息。OLAP的查找是通過(guò)1種MDX表中實(shí)現(xiàn)的,類似于OLTP的sql語(yǔ)法,MDX有自己的語(yǔ)法,不過(guò)它只規(guī)范了查詢語(yǔ)句,由于OLAP中不會(huì)對(duì)數(shù)據(jù)進(jìn)行修改,因此OLAP履行的進(jìn)程中有兩個(gè)方面,首先就是對(duì)模型的定義,在mondrian中,邏輯模型的定義是通過(guò)xml的方式交給mondrian解析的,對(duì)這個(gè)模型的查詢是通過(guò)MDX格式的語(yǔ)句完成的,下面通過(guò)1個(gè)實(shí)例調(diào)用mondrian接口看1下mondrian的使用。
package mondrianTest; import java.io.PrintWriter; import mondrian.olap.Connection; import mondrian.olap.DriverManager; import mondrian.olap.Query; import mondrian.olap.Result; public class TestMDX { public void testQuery(){ Connection connection = DriverManager.getConnection("Provider=mondrian;" + "Jdbc=jdbc:mysql://10.241.20.157:3306/foodmart?user=root&password=root;" + "Catalog=C:UsersAdministratorDesktop rtpFoodMart.xml;", null, false); Query query = connection.parseQuery("select {[Measures].[業(yè)務(wù)量]} on columns from MsgBusi"); Result result = connection.execute(query); PrintWriter pw = new PrintWriter(System.out); result.print(pw); pw.flush(); } public static void main(String[] args) { TestMDX a = new TestMDX(); System.out.println("調(diào)用mondrian api進(jìn)行查詢"); a.testQuery(); } }

這段代碼是自己從網(wǎng)上down下來(lái)的,要想運(yùn)行它需要加1些履行進(jìn)程中需要的jar包,最少需要以下幾個(gè)包:


接著運(yùn)行出現(xiàn)以下毛病:
Exception in thread "main" mondrian.olap.MondrianException: Mondrian Error:Internal error: while parsing catalog C:UsersAdministratorDesktop rtpFoodMart.xml at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:755) at mondrian.olap.Util.newInternal(Util.java:1083) at mondrian.olap.Util.newError(Util.java:1099) at mondrian.rolap.RolapSchema.load(RolapSchema.java:303) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:213) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:76) at mondrian.rolap.RolapSchema$Pool.get(RolapSchema.java:835) at mondrian.rolap.RolapSchema$Pool.get(RolapSchema.java:657) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:148) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:79) at mondrian.olap.DriverManager.getConnection(DriverManager.java:122) at mondrian.olap.DriverManager.getConnection(DriverManager.java:87) at mondrian.olap.DriverManager.getConnection(DriverManager.java:55) at mondrianTest.TestMDX.testQuery(TestMDX.java:13) at mondrianTest.TestMDX.main(TestMDX.java:41) Caused by: org.eigenbase.xom.XOMException: In Schema: In Cube: In Measure: In MeasureExpression: In SQL: Value 'infobright' of attribute 'dialect' has illegal value 'infobright'. Legal values: {generic, access, db2, derby, firebird, hsqldb, mssql, mysql, oracle, postgres, sybase, teradata, ingres, luciddb} at mondrian.olap.MondrianDef$Schema.<init>(MondrianDef.java:134) at mondrian.rolap.RolapSchema.load(RolapSchema.java:289) ... 11 more

這1步是解析模式定義的xml文件出現(xiàn)了毛病,根據(jù)提示,查看了1下infobright是甚么發(fā)現(xiàn)它也是1種數(shù)據(jù)倉(cāng)庫(kù)的解決方案,可能當(dāng)前版本的mondrian不支持它,所以將出現(xiàn)他的xml標(biāo)簽都注釋掉算了,反正我們這里只使用mysql(要確保mysql的連接驅(qū)動(dòng)的jar包已加入到工程的classpath下),不關(guān)心其他的。
接著再次運(yùn)行出現(xiàn)以下毛病:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1137) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:355) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2490) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2527) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2309) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:419) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at mondrianTest.TestMysql.main(TestMysql.java:17) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:305) ... 15 more

這個(gè)毛病從堆棧上看是connect引發(fā)的,通過(guò)http://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai的解析發(fā)現(xiàn)時(shí)由于沒連上服務(wù)器致使的,但是明明服務(wù)器的3306端口已打開了啊,而且在服務(wù)器上使用mysql客戶端就能夠連接上去啊。這是怎樣回事,使用tcpdump抓包發(fā)現(xiàn)每次SYN要求都會(huì)被服務(wù)器無(wú)情的回復(fù)RST報(bào)文,這說(shuō)明該端口確切沒有打開,使用netstat查看該端口發(fā)現(xiàn)的確:



原來(lái)服務(wù)器只接收本地的連接,怪不得我在windows上1直連不上呢,解決的方法就是修改mysql的配置文件my.conf,把其中的bind-address從原來(lái)的127.0.0.1修改成0.0.0.0,這樣就能夠從遠(yuǎn)程連接到mysql了。
接側(cè)重新運(yùn)行又出現(xiàn)這樣的毛病:
Exception in thread "main" mondrian.olap.MondrianException: Mondrian Error:Failed to parse query 'select {[Measures].[業(yè)務(wù)量]} on columns from MsgBusi' at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:755) at mondrian.olap.ConnectionBase.parseQuery(ConnectionBase.java:77) at mondrian.olap.ConnectionBase.parseQuery(ConnectionBase.java:59) at mondrianTest.TestMDX.testQuery(TestMDX.java:18) at mondrianTest.TestMDX.main(TestMDX.java:37) Caused by: mondrian.olap.MondrianException: Mondrian Error:Error while parsing MDX statement 'select {[Measures].[業(yè)務(wù)量]} on columns from MsgBusi' at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:755) at mondrian.olap.Parser.parseInternal(Parser.java:760) at mondrian.olap.ConnectionBase.parseQuery(ConnectionBase.java:74) ... 3 more Caused by: mondrian.olap.MondrianException: Mondrian Error:MDX cube 'MsgBusi' not found or not processed at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:752) at mondrian.rolap.RolapSchema.lookupCube(RolapSchema.java:1067) at mondrian.olap.Query.<init>(Query.java:187) at mondrian.olap.Parser.makeQuery(Parser.java:851) at mondrian.olap.CUP$Parser$actions.CUP$Parser$do_action(Parser.java:1700) at mondrian.olap.Parser.do_action(Parser.java:685) at java_cup.runtime.lr_parser.parse(lr_parser.java:569) at mondrian.olap.Parser.parseInternal(Parser.java:755) ... 4 more

這個(gè)是查詢MDX中出現(xiàn)的毛病了,這說(shuō)明前面的連接mysql,解析xml文件的操作都履行成功了,根據(jù)毛病提示發(fā)現(xiàn)MsgBusi不存在,查看xml文件發(fā)現(xiàn)這個(gè)MsgBusi的確不存在,這才想起來(lái),原來(lái)down下來(lái)的代碼和我用的邏輯模型的定義不是同1個(gè),我這里用的是mondrian提供的1個(gè)示例foodmart,所以我應(yīng)當(dāng)用我這里的邏輯模型定義的立方體和維度等進(jìn)行查詢。所以需要修改1下MDX語(yǔ)句,經(jīng)過(guò)量次測(cè)試以后發(fā)現(xiàn)這樣的語(yǔ)句能夠在當(dāng)前的配置中跑出結(jié)果:SELECT  { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales  WHERE ([Customers].[State Province].[CA]),跑出的結(jié)果以下:
Axis #0: {[Customers].[USA].[CA]} Axis #1: {[Measures].[Unit Sales]} Axis #2: {[Time].[1997]} Row #0: 74,748

但是我發(fā)現(xiàn)mondrian的版本很多,當(dāng)前最新的版本已是4.0版本的了,而能夠剛才使用的版本還是2.x版本的,然后發(fā)現(xiàn)在較新的版本中都在使用olap4j這樣的接口進(jìn)行訪問,這個(gè)接口類似于jdbc訪問數(shù)據(jù)庫(kù)引擎,是1個(gè)java的接口規(guī)范,用于訪問ROLAP引擎,使用mdx語(yǔ)句,因而就換成當(dāng)前最新的穩(wěn)定版本3.9進(jìn)行測(cè)試,換了以后發(fā)現(xiàn)出錯(cuò)了:
Exception in thread "main" java.lang.NoSuchMethodError: mondrian.resource.MondrianResource.getThreadOrDefaultLocale()Ljava/util/Locale; at mondrian.resource.MondrianResource.instance(MondrianResource.java:29) at mondrian.rolap.aggmatcher.AggTableManager.<clinit>(AggTableManager.java:54) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:194) at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:216) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:214) at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:66) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:160) at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:90) at mondrian.olap.DriverManager.getConnection(DriverManager.java:112) at mondrian.olap.DriverManager.getConnection(DriverManager.java:68) at mondrian.olap.DriverManager.getConnection(DriverManager.java:50) at mondrianTest.TestMDX.testQuery(TestMDX.java:13) at mondrianTest.TestMDX.main(TestMDX.java:38)

媽的,找不到這個(gè)函數(shù),真是奇怪了,這個(gè)包也存在,包里面也有這個(gè)類,為何恰恰就沒有這個(gè)函數(shù)呢?!這就是java比較煩人的地方,在C/C++里面編譯期間必須能夠找到所有的函數(shù)定義,雖然有些函數(shù)的實(shí)現(xiàn)沒有找到,在裝載的時(shí)候也會(huì)首先進(jìn)行動(dòng)態(tài)鏈接,而不會(huì)在履行的時(shí)候再進(jìn)行,但是JAVA這類只有在使用的時(shí)候再進(jìn)行l(wèi)oad的方式就極可能出現(xiàn)這類動(dòng)態(tài)的毛病,例如找不到class、找不到method等等,這個(gè)問題查了半天也沒有能夠找出毛病,最后是在沒有辦法了采取最后的方法:查看源碼。幸虧有g(shù)repCode這樣的網(wǎng)站,真的是讓查看java源代碼方便了不知道多少個(gè)數(shù)量級(jí),俗語(yǔ)說(shuō):源碼在手,了無(wú)秘密。有了源碼,甚么問題都不在是問題了,在grepcode中查找mondrian.resource.MondrianResource這個(gè)類,發(fā)現(xiàn)在mondrian中只有3.6.7之前的版本才有,所以又不能不切換回3.6.x版本,這里我用的是3.6.1版本,換了jar包以后發(fā)現(xiàn)這個(gè)毛病還是存在,好吧,看下代碼吧。
     在代碼中,的確是MondrianResource的instance方法中(29)行調(diào)用了getThreadOrDefaultLocale函數(shù),而在當(dāng)前的類中沒有定義這個(gè)函數(shù),那末它1定是繼承另外1個(gè)類,在父類中實(shí)現(xiàn)的,果然,它繼承的是org.eigenbase.resgen.ShadowResourceBundle類,再查看1下這個(gè)類,我擦,在codegrep上根本搜不到這個(gè)類的源碼,這時(shí)候候請(qǐng)教google吧,搜出來(lái)這個(gè)網(wǎng)頁(yè):http://www.java2s.com/Code/Jar/e/Downloadeigenbaseresgenjar.htm,我勒個(gè)咔擦,我之前下載的eigenbase-resgen.jar文件不就是在這里下載的嗎?!而這個(gè)jar包中分明有org.eigenbase.resgen.ShadowResourceBundle類啊(要不然我的代碼編譯都不會(huì)通過(guò)的),1切又繞回來(lái)了,這時(shí)候候該怎樣辦?
     這時(shí)候候我想起來(lái)了,既然mondrian自己能夠編譯通過(guò),順利履行,那末不管是在mondrian的maven依賴包中,還是在saifu中都應(yīng)當(dāng)有這個(gè)包的依賴,而且這個(gè)包應(yīng)當(dāng)就是可使用的,而之前的eigenbase-resgen.jar不能使用多是由于版本問題,查看了mondrian的pom.xml文件,發(fā)現(xiàn)它使用的是以下的版本:

<dependency> <groupId>eigenbase</groupId> <artifactId>eigenbase-resgen</artifactId> <version>1.3.1</version> </dependency>

查看了saiku的pom.xml文件,它使用的是以下的版本:

<dependency> <groupId>eigenbase</groupId> <artifactId>eigenbase-resgen</artifactId> <version>1.3.0.11873</version> </dependency>

雖然這兩個(gè)版本不1樣,但是我想應(yīng)當(dāng)任何1個(gè)都可以吧,因而下了1.3.1版本的,將之前的jar包換了1下以后測(cè)試1下,OK了,得到了一樣的結(jié)果。
雖然得到了相同的結(jié)果,但是這里還是使用mondrian之前的execute接口來(lái)履行MDX語(yǔ)句的,而不是通過(guò)olap4j的方式,代碼中可以看到execute接口已被拋棄了,查看mondrian文檔看到這樣的注釋:
Deprecated. This method is deprecated and will be removed in mondrian⑷.0. It operates by internally creating a statement. Better to use olap4j and explicitly create a statement.
這里說(shuō)這個(gè)接口將在mondrian 4.0以后被移除,建議使用olap4j接口創(chuàng)建statement的方式代替,因而又在網(wǎng)上搜到1片mondrian教程(http://alenzhai.iteye.com/blog/2158953),這里使用的就是olap4j的方式訪問的,把代碼copy下來(lái)以后進(jìn)行修改,保持connection的參數(shù)和mdx語(yǔ)句不變,運(yùn)行過(guò)以后能夠得到相同的結(jié)果,只不過(guò)這類訪問方式更加規(guī)范。附上源代碼:

package mondrianTest; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.olap4j.Cell; import org.olap4j.CellSet; import org.olap4j.OlapConnection; import org.olap4j.OlapException; import org.olap4j.OlapStatement; import org.olap4j.OlapWrapper; import org.olap4j.Position; import org.olap4j.metadata.Member; public class Olap4jTest { /** * 獲得連接Olap的連接 * @param url 連接Olap的URL * @return * @throws ClassNotFoundException * @throws SQLException */ public static OlapConnection getConnection(String url) throws ClassNotFoundException, SQLException{ Class.forName("mondrian.olap4j.MondrianOlap4jDriver"); Connection connection = DriverManager.getConnection(url); OlapConnection olapConnection = connection.unwrap(OlapConnection.class); return olapConnection; } /** * 獲得查詢的結(jié)構(gòu)結(jié)果集 * @param mdx mdx查詢語(yǔ)句 * @param conn Olap連接 * @return * @throws OlapException */ public static CellSet getResultSet(String mdx,OlapConnection conn) throws OlapException{ OlapStatement statement = conn.createStatement(); CellSet cellSet = statement.executeOlapQuery(mdx); return cellSet; } public void testQuery(){ OlapConnection connection = null; try { connection = getConnection("jdbc:mondrian:" + "Jdbc=jdbc:mysql://10.241.20.157:3306/foodmart?user=root&password=root;" + "Catalog=C:UsersAdministratorDesktop rtpFoodMart.xml;"); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String query = "SELECT { [Measures].[Unit Sales] } on columns,{ [Time].[Year].[1997] } on rows FROM Sales WHERE ([Customers].[State Province].[CA])"; //獲得查詢結(jié)果 CellSet cs = null; try { cs = getResultSet(query, connection); } catch (OlapException e) { // TODO Auto-generated catch block e.printStackTrace(); } PrintWriter pw = new PrintWriter(System.out); //處理返回?cái)?shù)據(jù) if(cs.getAxes().size()>1){ for (Position row : cs.getAxes().get(1)) { for (Position column : cs.getAxes().get(0)) { for (Member member : row.getMembers()) { System.out.println("rows:"+member.getUniqueName()); } for (Member member : column.getMembers()) { System.out.println("columns:"+member.getUniqueName()); } final Cell cell = cs.getCell(column, row); System.out.println("values:"+cell.getValue()); System.out.println(); } } }else{ for(Position column:cs.getAxes().get(0)) { for(Member member:column.getMembers()){ System.out.println("columns:"+member.getUniqueName()); } Cell cell=cs.getCell(column); System.out.print("values:"+cell.getValue()); System.out.println(); } } } public static void main(String[] args) { Olap4jTest a = new Olap4jTest(); System.out.println("調(diào)用mondrian api進(jìn)行查詢"); a.testQuery(); } }

履行的輸出結(jié)果以下:
rows:[Time].[1997] columns:[Measures].[Unit Sales] values:74748.0

最后看1下使用的jar包的信息:


ok,測(cè)試完成了。雖然進(jìn)程很曲折,但是也學(xué)到了1些新知識(shí),這里只是對(duì)mondrian做了1個(gè)簡(jiǎn)單的demo,證明了通過(guò)api調(diào)用的方式使用olap4j可使用后真?zhèn)€mysql進(jìn)行olap操作,接下來(lái)還需要了解mondrian對(duì)hive和sql on hbase的支持,今天又發(fā)現(xiàn)1個(gè)新的開源OLAP引擎:Kylin,這個(gè)是eBay開源的,它是1個(gè)MOLAP引擎,和mondrian(ROLAP引擎)不同的是它會(huì)在創(chuàng)建Cube的時(shí)候?qū)⑿枰宫F(xiàn)的維度和度量聚合到1個(gè)表中,并且將這個(gè)表進(jìn)行物化,保存在HBASE中,以后的查詢操作不是通過(guò)MDX標(biāo)準(zhǔn)來(lái)完成的,而是對(duì)物化表的SQL查詢,這樣的優(yōu)點(diǎn)就是查詢速度非常快,但是物化的進(jìn)程需要1定的時(shí)間,并且物化表其實(shí)不1定能夠完全支持所有的cude操作,如果不能支持的話還是通過(guò)ROLAP的方式到hive表中動(dòng)態(tài)查找(類似于mondrian),而mondrian不需要保存任何數(shù)據(jù)(除mondrian的元數(shù)據(jù)),所有的MDX查詢操作都是動(dòng)態(tài)的生成sql,交由后真?zhèn)€數(shù)據(jù)庫(kù)履行完成的,這些sql極可能是多表的join操作,對(duì)hive而言可能性能上是1個(gè)很大的問題。
      我覺得mondrian的學(xué)習(xí)主要在于兩個(gè)方面:cude的定義和MDX查看,所以接下來(lái)還需要學(xué)習(xí)1個(gè)mondrian中生成cube的xml文件的格式,如何定義1個(gè)cube、MDX的語(yǔ)法等,先做1個(gè)后端連接hive的demo吧。


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产免费看网站v片不遮挡 国产免费全部免费观看 | 伊人亚洲综合网 | 欧美xxxx做受欧美 | 日韩欧美一区二区久久黑人 | 日本一区二区三区免费高清在线 | 中文字幕国产在线 | 成人亚洲国产精品久久 | 免费网站黄色 | 性国产videofree极品 | 欧美精品videos | 免费在线观看www | 国产一区二区三区亚洲综合 | 亚洲视频免费播放 | 精品在线观看免费 | 精品伊人久久大香线蕉网站 | 日韩欧美中文字幕出 | 亚洲综合小说久久另类区 | 最近最新中文字幕免费大全3 | 欧美性猛交xxxx免费看手交 | 国产高清在线精品一区二区三区 | 精彩视频一区二区三区 | 欧美精品日韩 | 亚洲国产精品看片在线观看 | 午夜理伦三级播放 | 欧美free hd xxxx movies | 国产精品嫩草影院在线播放 | 欧美亚洲国产精品久久久久 | 天堂亚洲网| 精品久久久中文字幕一区 | 午夜写真福利视频在线观看 | 国内精品网站 | 最近免费中文字幕视频高清在线看 | 日韩高清专区 | 一区二区三区四区日韩 | 波多野结衣四虎精品影库 | 亚州都市春色校园小说另类 | 日韩欧美一级a毛片欧美一级 | 久久精品国产精品亚洲毛片 | 亚洲看片网站 | 男人吃奶摸下面69视频免费 | 亚洲第一页中文字幕 |