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

漫談Cassandra客戶端的使用

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文將介紹的是關(guān)于NoSQL數(shù)據(jù)庫Cassandra客戶端的使用,希望本文能對大家有所幫助。

51CTO數(shù)據(jù)庫頻道之前也曾有過《NoSOL:關(guān)系型數(shù)據(jù)庫終結(jié)者?》專題,希望大家能更深入的了解NoSQL。

最近試用了一段時(shí)間Cassandra,將Oracle中的數(shù)據(jù)導(dǎo)入進(jìn)來,遇到了問題然后解決問題,收獲挺大。在這個(gè)過程中,除了設(shè)計(jì)一個(gè)合理的數(shù)據(jù)模型,再就是使用Cassandra API進(jìn)行交互了。

Cassandra在設(shè)計(jì)的時(shí)候,就是支持Thrift的,這意味著我們可以使用多種語言開發(fā)。

對于Cassandra的開發(fā)本身而言,這是使用Thrift的好處:支持多語言。壞處也是顯而易見的:Thrift API功能過于簡單,不具備在生產(chǎn)環(huán)境使用的條件。

在Cassandra Wiki頁面上,也有基于Thrift API開發(fā)的更加高級的API,各個(gè)語言都有,具體信息可以參考:http://wiki.apache.org/cassandra/ClientExamples。

這次只談?wù)勏旅鎯深怞ava的客戶端:

1 Thrift Java API

2 hector

Thrift Java API

這個(gè)是Cassandra自帶的最簡單的一類API,這個(gè)文件在apache-cassandra-0.5.1.jar中包含了。可以直接使用。我們也可以自己安裝一個(gè)Thrift,然后通過cassandra.thrift文件自動生成。

如果你要使用Cassandra,那么我們必須要了解Thrift API,畢竟所有的其他更加高級的API都是基于這個(gè)來包裝的。

提供的功能

插入數(shù)據(jù)

插入數(shù)據(jù)需要指定keyspace,ColumnFamily, Column,Key,Value,timestamp和數(shù)據(jù)同步級別。(如何需要了Cassandra的解數(shù)據(jù)模型,可以參考《大話Cassandra數(shù)據(jù)模型》)

  1. /** * Insert a Column consisting of (column_path.column, value, timestamp)   
  2. at the given column_path.column_family and optional   
  3. * column_path.super_column. Note that column_path.column is here required,   
  4. since a SuperColumn cannot directly contain binary   
  5. values -- it can only contain sub-Columns.   
  6. *    
  7. * @param keyspace   
  8. * @param key   
  9. * @param column_path   
  10. * @param value   
  11. * @param timestamp   
  12. * @param consistency_level   
  13. */public void insert(String keyspace, String key, ColumnPath column_path, byte[] value, long timestampint consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException;   
  14. /** * Insert Columns or SuperColumns across different Column Families for the same row key. batch_mutation is a   
  15. * map<string, list<ColumnOrSuperColumn>> -- a map which pairs column family names with the relevant ColumnOrSuperColumn   
  16. * objects to insert.   
  17. *    
  18. * @param keyspace   
  19. * @param key   
  20. * @param cfmap   
  21. * @param consistency_level   
  22. */public void batch_insert(String keyspace, String key, Map<String,List<ColumnOrSuperColumn>> cfmap, int consistency_level) throws InvalidRequestException, UnavailableException 

讀取數(shù)據(jù)

獲取一個(gè)查詢條件精確的值。

  1. /** * Get the Column or SuperColumn at the given column_path. If no value is present, NotFoundException is thrown. (This is   
  2. * the only method that can throw an exception under non-failure conditions.)   
  3. *  * @param keyspace   
  4. * @param key   
  5. * @param column_path   
  6. * @param consistency_level   
  7. */public ColumnOrSuperColumn get(String keyspace, String key, ColumnPath column_path,   
  8. int consistency_level) throws InvalidRequestException, NotFoundException, UnavailableException, TimedOutException, TException;   
  9. /** * Perform a get for column_path in parallel on the given list<string> keys. The return value maps keys to the   
  10. * ColumnOrSuperColumn found. If no value corresponding to a key is present, the key will still be in the map, but both   
  11. * the column and super_column references of the ColumnOrSuperColumn object it maps to will be null.   
  12. *  * @param keyspace   
  13. * @param keys * @param column_path   
  14. * @param consistency_level   
  15. */public Map<String,ColumnOrSuperColumn> multiget(String keyspace, List<String> keys,   
  16. ColumnPath column_path, int consistency_level) throws InvalidRequestException 

獲取某一個(gè)keyspace,Key,ColumnFamily,SuperColumn(如果有的話需要指定)下面的相關(guān)數(shù)據(jù):只查詢Column的name符合條件的相關(guān)數(shù)據(jù)(SlicePredicate)。

  1. /** * Get the group of columns contained by column_parent (either a ColumnFamily name or a ColumnFamily/SuperColumn name   
  2. * pair) specified by the given SlicePredicate. If no matching values are found, an empty list is returned.   
  3. *  * @param keyspace   
  4. * @param key   
  5. * @param column_parent   
  6. * @param predicate   
  7. * @param consistency_level   
  8. */public List<ColumnOrSuperColumn> get_slice(String keyspace, String key, ColumnParent column_parent, SlicePredicate predicate,   
  9. int consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException; /*  
  10. * * Performs a get_slice for column_parent and predicate for the given keys in parallel.   
  11. *    
  12. * @param keyspace   
  13. * @param keys   
  14. * @param column_parent   
  15. * @param predicate   
  16. * @param consistency_level   
  17. */public Map<String,List<ColumnOrSuperColumn>> multiget_slice(String keyspace, List<String> keys, ColumnParent column_parent,   
  18. SlicePredicate predicate, int consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException; 

查詢Key的取值范圍(使用這個(gè)功能需要使用order-preserving partitioner)。

  1. /** * @deprecated; use get_range_slice instead   
  2. *    
  3. * @param keyspace   
  4. * @param column_family   
  5. * @param start   
  6. * @param finish   
  7. * @param count   
  8. * @param consistency_level   
  9. */public List<String> get_key_range(String keyspace, String column_family,   
  10. String start, String finish, int countint consistency_level) 
  11. throws InvalidRequestException, UnavailableException, TimedOutException, TException; /*  
  12. *   
  13. returns a subset of columns for a range of keys.   
  14. *    
  15. * @param keyspace   
  16. * @param column_parent   
  17. * @param predicate   
  18. * @param start_key   
  19. * @param finish_key   
  20. * @param row_count   
  21. * @param consistency_level   
  22. */public List<KeySlice> get_range_slice(String keyspace, ColumnParent column_parent,   
  23. SlicePredicate predicate, String start_key, String finish_key, int row_count 

查詢系統(tǒng)的信息。

  1. /**   
  2. * get property whose value is of type string.   
  3. *    
  4. * @param property   
  5. */public String get_string_property(String property) throws TException; /*  
  6. *   
  7. * get property whose value is list of strings.   
  8. *    
  9. * @param property */public List<String> get_string_list_property(String property) throws TException; /*  
  10. *   
  11. * describe specified keyspace   
  12. *    
  13. * @param keyspace   
  14. */public Map<String,Map<String,String>> describe_keyspace(String keyspace)   
  15. throws NotFoundException, TException; 

通過這些操作,我們可以了解到系統(tǒng)的信息。

其中一個(gè)比較有意思的查詢信息是:token map,通過這個(gè)我們可以知道哪些Cassandra Service是可以提供服務(wù)的。

刪除數(shù)據(jù)

  1. /**   
  2. * Remove data from the row specified by key at the granularity specified by column_path,   
  3. and the given timestamp. Note   
  4. * that all the values in column_path besides column_path.column_family are truly optional: you can remove the entire   
  5. * row by just specifying the ColumnFamily, or you can remove a SuperColumn   
  6. or a single Column by specifying those levels too.   
  7. *    
  8. * @param keyspace   
  9. * @param key   
  10. * @param column_path   
  11. * @param timestamp   
  12. * @param consistency_level   
  13. */public void remove(String keyspace, String key, ColumnPath column_path,   
  14. long timestampint consistency_level) throws InvalidRequestException, UnavailableException 

這里需要注意的是,由于一致性的問題。這里的刪除操作不會立即刪除所有機(jī)器上的該數(shù)據(jù),但是最終會一致。

程序范例

  1. import java.util.List;  
  2. import java.io.UnsupportedEncodingException;   
  3. import org.apache.thrift.transport.TTransport;  
  4. import org.apache.thrift.transport.TSocket;  
  5. import org.apache.thrift.protocol.TProtocol;  
  6. import org.apache.thrift.protocol.TBinaryProtocol;  
  7. import org.apache.thrift.TException;  
  8. import org.apache.cassandra.service.*;   
  9. public class CClient{      
  10. public static void main(String[] args)      
  11. throws TException, InvalidRequestException,   
  12. UnavailableException, UnsupportedEncodingException, NotFoundException      
  13. {          
  14. TTransport tr = new TSocket("localhost", 9160);   
  15.  TProtocol proto = new TBinaryProtocol(tr);          
  16. Cassandra.Client client = new Cassandra.Client(proto);          
  17. tr.open();           
  18. String key_user_id = "逖靖寒的世界";          
  19.  // insert data          
  20. long timestamp = System.currentTimeMillis();       
  21.  client.insert("Keyspace1", key_user_id,                       
  22.  new ColumnPath("Standard1"null"網(wǎng)址".getBytes("UTF-8")),                       
  23.  "http://gpcuster.cnblogs.com".getBytes("UTF-8"), timestamp,ConsistencyLevel.ONE);         
  24.  client.insert("Keyspace1", key_user_id,                        
  25. new ColumnPath("Standard1"null"作者".getBytes("UTF-8")),                        
  26. "逖靖寒".getBytes("UTF-8"), timestamp, ConsistencyLevel.ONE);          
  27.  // read single column          
  28. ColumnPath path = new ColumnPath("Standard1"null"name".getBytes("UTF-8"));     
  29.  System.out.println(client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));           
  30. // read entire row         
  31.  SlicePredicate predicate = new SlicePredicate(nullnew SliceRange(new byte[0], new byte[0], false, 10));   
  32. ColumnParent parent = new ColumnParent("Standard1"null);         
  33.  List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1", key_user_id, parent, predicate, ConsistencyLevel.ONE);         
  34.  for (ColumnOrSuperColumn result : results)        {              
  35. Column column = result.column;              
  36. System.out.println(new String(column.name, "UTF-8") + " -> " + new String(column.value, "UTF-8"));         
  37.  }          
  38.  tr.close();     
  39.  }} 

優(yōu)點(diǎn)與缺點(diǎn)

優(yōu)點(diǎn):簡單高效

缺點(diǎn):功能簡單,無法提供連接池,錯誤處理等功能,不適合直接在生產(chǎn)環(huán)境使用。

Hector

Hector是基于Thrift Java API包裝的一個(gè)Java客戶端,提供一個(gè)更加高級的一個(gè)抽象。

程序范例

  1. package me.prettyprint.cassandra.service;   
  2. import static me.prettyprint.cassandra.utils.StringUtils.bytes;  
  3. import static me.prettyprint.cassandra.utils.StringUtils.string;   
  4. import org.apache.cassandra.service.Column;  
  5. import org.apache.cassandra.service.ColumnPath;   
  6. public class ExampleClient {     
  7. public static void main(String[] args) throws IllegalStateException, PoolExhaustedException,        
  8. Exception {      
  9. CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();    CassandraClient client = pool.borrowClient("localhost", 9160);      
  10. // A load balanced version would look like this:      
  11. // CassandraClient client = pool.borrowClient(new String[] {"cas1:9160", "cas2:9160", "cas3:9160"});       
  12. try {        
  13. Keyspace keyspace = client.getKeyspace("Keyspace1");        
  14. ColumnPath columnPath = new ColumnPath("Standard1"null, bytes("網(wǎng)址"));         
  15. // insert        
  16. keyspace.insert("逖靖寒的世界", columnPath, bytes("http://gpcuster.cnblogs.com"));         
  17. // read        
  18. Column col = keyspace.getColumn("逖靖寒的世界", columnPath);       System.out.println("Read from cassandra: " + string(col.getValue()));       
  19. finally {       
  20.  // return client to pool. do it in a finally block to make sure it's executed        
  21. pool.releaseClient(client);     
  22.  }  }} 

優(yōu)點(diǎn)

1 提供連接池。

2 提供錯誤處理:當(dāng)操作失敗的時(shí)候,Hector會根據(jù)系統(tǒng)信息(token map)自動連接另一個(gè)Cassandra Service。

3 編程接口容易使用。

4 支持JMX。

缺點(diǎn)

1 不支持多線程的環(huán)境。

2 keyspace封裝過多(數(shù)據(jù)校驗(yàn)和數(shù)據(jù)重新封裝),如果進(jìn)行大量的數(shù)據(jù)操作,這里的消耗需要考慮。

3 錯誤處理不夠人性化:如果所有的Cassandra Service都非常繁忙,那么經(jīng)過多次操作失敗后,最終的結(jié)果失敗。

總結(jié)

Hector已經(jīng)是一個(gè)基本足夠使用的Java客戶端了,但是還是缺乏一些相關(guān)的功能,比如:

1 線程安全。

2 支持自動的多線程查詢和插入,提高操作效率。

3 人性化的錯誤處理機(jī)制。

4 避免過多的封裝。

原文標(biāo)題:談?wù)凜assandra的客戶端

鏈接: http://www.cnblogs.com/gpcuster/archive/2010/03/23/1692794.html

【編輯推薦】
  1. 詳解NoSQL數(shù)據(jù)庫Apache Cassandra的配置
  2. 2009年云數(shù)據(jù)庫的開發(fā)和應(yīng)用前景
  3. 關(guān)系數(shù)據(jù)庫的末日是否已經(jīng)來臨
  4. 超越關(guān)系型數(shù)據(jù)庫 pureXML技術(shù)應(yīng)用及展望
  5. 新興數(shù)據(jù)庫打破整個(gè)舊規(guī)則
  6. 探尋關(guān)系數(shù)據(jù)庫和ORM的***替代者
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2011-08-17 10:10:59

2011-03-21 14:53:36

Nagios監(jiān)控Linux

2011-04-06 14:24:20

Nagios監(jiān)控Linux

2012-10-11 17:02:02

IBMdw

2010-05-12 15:46:51

Subversion客

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2012-01-13 10:29:37

ibmdw

2010-06-01 13:54:42

TortoiseSVN

2020-04-23 09:32:33

zookeeperCP系統(tǒng)

2011-04-06 14:24:27

Nagios監(jiān)控Linux

2010-06-01 14:11:11

TortoiseSVN

2010-12-17 10:16:33

OpenVAS

2009-06-08 20:16:15

Eclipse客戶端多線程

2021-08-01 23:18:21

Redis Golang命令

2010-05-31 10:11:32

瘦客戶端

2011-10-26 13:17:05

2011-03-24 13:00:31

配置nagios客戶端

2011-03-02 14:36:24

Filezilla客戶端

2010-12-21 11:03:15

獲取客戶端證書

2011-03-29 16:07:32

CACTISNMP
點(diǎn)贊
收藏

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

精品处破学生在线二十三| 91美女福利视频| 在线成人欧美| 国产精品久久久久aaaa樱花| 国产日韩欧美在线看| 秋霞欧美一区二区三区视频免费 | 香蕉成人av| 中文字幕国产精品一区二区| 国产在线观看91精品一区| 国产午夜手机精彩视频| 久久狠狠久久| 欧美性大战xxxxx久久久| 在线视频亚洲自拍| 免费av一级片| 日本成人在线一区| 久久综合电影一区| 成人三级做爰av| 久久男人天堂| 国产精品电影一区二区三区| 国产精品一区视频| 这里只有久久精品视频| 黄色精品免费| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 欧美亚洲愉拍一区二区| 黄色免费高清视频| 天天舔天天干天天操| 日本欧美在线观看| 韩国视频理论视频久久| 日韩毛片无码永久免费看| 欧美影院精品| 在线观看日韩毛片| 日本精品久久久久久久久久| 2019中文字幕在线视频| 成人免费高清在线观看| 国产精品直播网红| 亚洲精品国产精品乱码| 亚洲经典一区| 一本大道亚洲视频| 中文乱码人妻一区二区三区视频| 亚洲毛片在线免费| 成人污污www网站免费丝瓜| 欧美一区网站| 国产亚洲欧洲黄色| 亚洲v在线观看| 日韩精品一级毛片在线播放| 欧美日韩一区免费| 国产黄色激情视频| 日本高清在线观看wwwww色| 91丨九色丨黑人外教| 91视频网页| 一级黄色片在线看| 天堂久久久久va久久久久| 久久久噜噜噜久久中文字免| 91 在线视频| 免费毛片在线不卡| 亚洲国产精品小视频| 69久久精品无码一区二区| 国产精品久久久久久久久免费高清 | 久久精品国产99国产| 日本精品久久久久影院| 亚洲精品www久久久久久| 日韩av片子| 中文字幕精品网| 实拍女处破www免费看| 免费福利视频一区| 精品国产乱码久久久久久老虎| 91亚洲精品久久久蜜桃借种| 91亚洲精品| 欧美日韩精品电影| 国产福利在线免费| 日韩久久99| 4438x成人网最大色成网站| www.亚洲高清| 国产激情欧美| 欧美精品一级二级三级| 欧美日韩在线观看不卡| 不卡亚洲精品| 7777精品伊人久久久大香线蕉的 | 欧美日本韩国一区二区三区| 国产日韩精品在线观看| 国产精品白丝喷水在线观看| 99久久婷婷国产综合精品电影√| 日韩在线视频观看| 亚洲天堂黄色片| 欧美va亚洲va日韩∨a综合色| 麻豆成人在线看| 久久久精品视频在线| 欧美特黄一级| 57pao成人国产永久免费| 天天爽夜夜爽夜夜爽精品| 久久精品天堂| 国产欧美久久久久久| 一区二区国产欧美| 国产宾馆实践打屁股91| 麻豆亚洲一区| 亚洲天天影视| 国产精品久久午夜| 美女在线免费视频| 成人ssswww在线播放| 精品欧美一区二区三区| 无人在线观看的免费高清视频| 九色成人搞黄网站| 日韩一卡二卡三卡四卡| 国产一卡二卡三卡四卡| 国产免费播放一区二区| 精品国产一区二区三区久久久狼| 91视频免费在线看| 日韩图片一区| 国产美女高潮久久白浆| 成人毛片在线免费观看| 久久久久国产成人精品亚洲午夜| 久久婷婷开心| 男人久久精品| 国产精品传媒视频| 久久成人福利视频| 福利一区二区| 亚洲精品久久久久久久久久久久久| 国产精品密蕾丝袜| 欧美日韩精品| 国产精品草莓在线免费观看| 国产美女主播在线观看| 91在线观看污| 国产 欧美 日本| 性欧美1819sex性高清| 欧美日韩aaa| 精品人妻一区二区三区日产乱码卜| 欧美久久综合网| 欧美成人精品在线播放| xxxx.国产| 国产成人在线看| 午夜精品一区二区在线观看 | 91精品国产乱码久久久竹菊| 亚洲欧美综合图区| 青青草精品在线视频| 久久最新视频| 国产精品免费在线| 69视频在线| 欧美日韩中文字幕日韩欧美| 制服下的诱惑暮生| 97偷自拍亚洲综合二区| 欧美精品成人91久久久久久久| 成人一二三四区| 99久久99久久综合| 99热这里只有精品免费| 黄色精品视频网站| 亚洲视频网站在线观看| 奇米影视第四色777| 国产精品一区久久久久| 在线不卡日本| 视频精品导航| 一二美女精品欧洲| 午夜婷婷在线观看| 99精品视频在线观看免费| 欧美日韩在线免费观看视频| 国产精品亲子伦av一区二区三区| 亚洲欧洲黄色网| 啦啦啦免费高清视频在线观看| 国内精品偷拍| 国产一区欧美二区| 免费国产一区二区| av老司机在线观看| 精品1区2区在线观看| 麻豆精品一区二区三区视频| 丝袜脚交一区二区| 日本福利一区二区三区| 午夜日韩成人影院| 亚洲色图50p| 天天干天天色综合| 久久久国产精华| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 天堂在线资源库| 性感美女极品91精品| 中文字幕在线视频播放| 亚洲国产第一| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 日韩在线一区二区三区| 欧美在线视频二区| av成人亚洲| 亚洲欧美国产va在线影院| 国产精品99精品无码视| 99久久综合国产精品| 国产婷婷一区二区三区| 欧美aaaaaaaa牛牛影院| 欧美亚洲日本黄色| 番号在线播放| 69堂国产成人免费视频| 欧美国产精品一二三| 国产成人啪免费观看软件| 精品无码国产一区二区三区av| 久久亚州av| 日本久久久久久久久久久| 国产精品一区二区婷婷| 欧美日韩久久久一区| 日韩黄色免费观看| 国内精品第一页| 手机成人av在线| 一区二区三区欧洲区| 69影院欧美专区视频| 黄色美女网站在线观看| 欧美色大人视频| 免费人成在线观看| 久久亚洲一级片| 岛国av在线免费| 亚洲精品1区| 四虎影院一区二区三区| 中文字幕一区二区三区日韩精品| 欧美大片免费看| 三年中国中文在线观看免费播放| 菠萝菠萝蜜在线视频免费观看| 日韩精品一区二区三区中文不卡 | 97精品视频在线观看| 黄网在线免费| 欧美不卡一区二区三区四区| 国产一级免费视频| 夜夜精品视频一区二区| 亚洲av无码成人精品国产| 久久 天天综合| 亚洲国产精品久久久久婷蜜芽| 欧美h版在线| 精品国产第一页| 91精品国产色综合久久不卡粉嫩| 91国语精品自产拍在线观看性色| 1024视频在线| 亚洲第一视频网站| 91久久精品无码一区二区| 午夜电影久久久| 成年人二级毛片| 国产偷v国产偷v亚洲高清| 潘金莲一级淫片aaaaa| 日本成人中文字幕在线视频 | 中文字幕 欧美 日韩| 国产精品视频久久一区| 国产91在线亚洲| 色无极亚洲影院| 免费成人看片网址| theporn国产在线精品| 国产欧美精品久久久| 色帝国亚洲欧美在线| 中文字幕国产日韩| 韩日视频在线| 日韩精品视频三区| 亚洲精品久久久久久无码色欲四季 | 国产欧美韩国高清| 黄瓜视频成人app免费| 久久久免费精品视频| 蜜桃视频网站在线观看| 亚洲性夜色噜噜噜7777| 欧美日韩影视| 亚洲国产精品va在线观看黑人| 99久久国产免费| 欧美日韩精品免费观看视频| 最近日韩免费视频| 亚洲91久久| 日韩情涩欧美日韩视频| 久久久久久久亚洲| 精品久久久免费| 日韩少妇裸体做爰视频| 亚洲国产成人av网| 欧美日韩在线视频免费播放| 国产日产欧产精品推荐色| a级在线观看视频| 99久久精品费精品国产一区二区 | 粉嫩av亚洲一区二区图片| 欧美一级特黄aaa| 国产综合久久久久久久久久久久| 在线不卡一区二区三区| 麻豆成人免费电影| 欧美伦理片在线观看| 免费成人av资源网| 日韩爱爱小视频| 精品一区二区久久| 欧美在线a视频| 国产精品123| 色悠悠在线视频| www.av精品| 99riav国产精品视频| 不卡视频一二三四| 免费在线观看成年人视频| 久久中文字幕电影| 男人的天堂av网| 亚洲欧美综合在线精品| 国产suv精品一区二区68| 一区二区三区精品视频| 日韩欧美视频在线免费观看| 欧美日韩国产色视频| 中文在线第一页| 欧美系列一区二区| 国产又粗又黄又爽| 亚洲精品在线免费播放| 性xxxxbbbb| 中文字幕在线日韩 | 国产精品青草综合久久久久99| 中文字幕成人动漫| 亚洲天堂精品在线观看| 国产一级片免费观看| 欧美午夜激情小视频| 久久久久久久极品| 欧美日韩一区三区四区| 精品区在线观看| 亚洲精选一区二区| 成人免费在线观看| 久久艹在线视频| 二区三区不卡| 国产v综合ⅴ日韩v欧美大片| 欧洲亚洲精品久久久久| 国产伦精品一区二区三区视频孕妇 | www.色精品| 亚洲成人黄色av| 亚洲免费视频中文字幕| 中文字幕在线观看免费视频| 在线电影院国产精品| 亚洲av电影一区| 欧美猛交免费看| 欧美日韩免费电影| 日韩av一级大片| 一区二区毛片| 中文字幕永久免费| 成人免费小视频| 艳妇乳肉豪妇荡乳av无码福利 | 欧美福利视频| 男操女免费网站| 久久人人超碰精品| 日本中文字幕免费观看| 欧美一级黄色大片| 毛片在线看网站| 国产精品91一区| 午夜精品影视国产一区在线麻豆| 黄色a级片免费看| 国产一区免费电影| 91传媒免费观看| 欧美日韩国产一级二级| 成人免费视频| 国产精品第二页| 九九热线有精品视频99| 日本久久久精品视频| av电影在线观看不卡| 国产精品6666| 精品88久久久久88久久久| 任你弄在线视频免费观看| 91九色偷拍| 欧美日韩网址| 91超薄肉色丝袜交足高跟凉鞋| 一区二区三区四区乱视频| www男人的天堂| 久久91精品国产91久久久| 精品视频在线观看免费观看| 日韩 欧美 自拍| 国产精品亚洲一区二区三区在线| 色偷偷www8888| 欧美一区二区三区公司| 影音先锋在线播放| 国产91亚洲精品一区二区三区| 极品中文字幕一区| 日韩精品视频一区二区| 精品动漫一区二区| 午夜视频免费在线| 国产91精品在线播放| 国产欧美高清视频在线| gogogo高清免费观看在线视频| 国产精品入口麻豆原神| 国产手机av在线| 欧美成人sm免费视频| y111111国产精品久久久| 男女私大尺度视频| 久久久天堂av| 在线观看国产黄| 欧美成人久久久| 欧美尿孔扩张虐视频| 黄www在线观看| 亚洲国产精华液网站w | 国产麻豆日韩欧美久久| 久久久久免费看| 免费成人av| 中文字幕日韩一区二区三区不卡| 国产在线播放一区二区三区| 日本三级理论片| 亚洲一区二区黄| 精品中文字幕一区二区三区| 水蜜桃色314在线观看| 久久九九影视网| 99久久久国产精品无码免费| 97av在线播放| 波多野结衣在线播放一区| 日韩精品视频网址| 黑人巨大精品欧美一区二区一视频| 国产黄在线观看| 99久久国产免费免费| 久久午夜激情| 黄色一级片在线免费观看| 亚洲欧美精品一区二区| 成人精品视频在线观看| 亚洲 高清 成人 动漫| 中文字幕一区二区三区四区不卡| 蜜臀久久99精品久久久| 国产精品免费在线免费| 欧美另类专区| www.涩涩爱| 亚洲黄色成人网| 日韩成人一区| 国产免费一区二区三区视频|