精品欧美一区二区三区在线观看 _久久久久国色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久久久久久网站| 一区二区三区中文字幕电影| 国产精品草莓在线免费观看| 国产第一页浮力| 99久久香蕉| 色欧美日韩亚洲| 亚洲成人动漫在线| 五月天激情婷婷| 蜜桃视频免费观看一区| 久久久久国产精品免费网站| 性猛交ⅹxxx富婆video| www久久久| 第一福利永久视频精品 | 久久精品国产99久久99久久久| 成年人国产在线观看| 久久久国产精品不卡| 成人有码在线播放| 亚洲GV成人无码久久精品| 91精品综合| 亚洲男人天堂久| 女同性αv亚洲女同志| 亚洲成av在线| 天天色天天操综合| 亚洲国产精品女人| 二区三区在线| 久久亚洲一级片| 国产精品国色综合久久| 亚洲午夜精品久久久| 国产精品毛片在线| 久久久久一本一区二区青青蜜月| 国产高清视频免费在线观看| 精品中文一区| 亚洲精品成人免费| 欧美xxxx日本和非洲| 成人黄色免费网站| 一本到一区二区三区| 国产美女在线一区| 在线看女人毛片| 亚洲欧美综合在线精品| 欧美日韩一区二区视频在线观看 | 老汉色影院首页| 9色在线视频网站| 久久精品欧美日韩| 激情视频一区二区| 人妻一区二区三区免费| 国产精品白丝av| 91欧美精品成人综合在线观看| 日本欧美www| 日日夜夜一区二区| 日本高清视频一区| 亚洲不卡在线视频| 麻豆久久婷婷| 国产福利视频一区二区| 国产一区二区视频免费| 天使萌一区二区三区免费观看| 欧美一级在线播放| 亚洲熟女综合色一区二区三区| 亚洲综合激情| 日本精品视频在线观看| 久久99国产综合精品免费| 校园激情久久| 国产精品18久久久久久首页狼| 波多野结衣视频在线观看| 丝袜美腿亚洲综合| 国产精品视频免费在线| 91超薄丝袜肉丝一区二区| 精品一区免费av| 亚洲www永久成人夜色| 99热这里只有精品3| 国产91在线观看丝袜| 国产乱码一区| 欧美美乳在线| 国产精品久久三| 99精品一区二区三区的区别| 久久香蕉av| 精品久久久久久电影| 东京热加勒比无码少妇| 成人免费毛片嘿嘿连载视频…| 欧美日韩高清在线播放| 一级全黄裸体片| 亚洲精品无吗| 日日噜噜噜夜夜爽亚洲精品| 日本少妇高清视频| 亚洲毛片网站| 国产精品三级久久久久久电影| 88av在线视频| 99久久国产综合精品色伊| 日本一区高清不卡| h视频在线免费观看| 午夜电影久久久| 天天干天天草天天| 亚洲性视频在线| 亚洲三级 欧美三级| 三级av在线免费观看| 好看不卡的中文字幕| 国产成人一区三区| 亚洲成人黄色片| 国产视频一区不卡| 日产精品久久久久久久蜜臀| 成人免费福利| 精品久久久三级丝袜| 手机免费看av| 亚洲国产激情| 成人激情黄色网| 亚洲人妻一区二区| 亚洲视频一区在线观看| 日韩精品一区二区三区久久| 亚洲热av色在线播放| 亚洲精品国精品久久99热| 网站永久看片免费| 亚洲专区一区二区三区| 99porn视频在线| 超碰在线影院| 婷婷开心久久网| 精品人妻一区二区三| 精品国产一区二区三区小蝌蚪| 久久人人爽国产| 国产乱叫456在线| 久久久久久99精品| 国产aaa免费视频| 亚洲欧美综合久久久久久v动漫| 精品无人区乱码1区2区3区在线 | 天天操天天干天天综合网| 欧美美女一级片| 九九综合九九| 97免费视频在线播放| 99久久精品国产一区二区成人| 久久精品亚洲精品国产欧美| av日韩一区二区三区| 国产精品亚洲一区二区在线观看 | 一本在线免费视频| 性色一区二区| 好吊色欧美一区二区三区| 亚洲大胆人体大胆做受1| 欧美日韩视频在线观看一区二区三区| jizz欧美性20| 亚洲欧美日韩专区| 精品久久久久久亚洲| 激情在线视频播放| 欧美一个色资源| 日本中文在线视频| 九九视频精品免费| 一本色道久久99精品综合| 欧美亚洲韩国| 亚洲视频在线观看| 日本视频免费观看| 久久久久久久一区| 国产日韩一区二区在线观看| 日韩极品少妇| 日韩免费av片在线观看| 午夜影院在线视频| 丰满岳妇乱一区二区三区| 久久久久久久人妻无码中文字幕爆| 欧美一区不卡| 国产精品国产一区二区| xxx.xxx欧美| 亚洲激情自拍图| 制服.丝袜.亚洲.中文.综合懂色| 99久久精品免费看| 日韩人妻精品无码一区二区三区| 青青一区二区| 国产精品电影在线观看| www.在线播放| 555www色欧美视频| 亚洲色图综合区| 高清在线不卡av| www国产精品内射老熟女| 精品影片在线观看的网站| 国产精品久久久久久久久免费| 一广人看www在线观看免费视频| 欧美男女性生活在线直播观看| 卡通动漫亚洲综合| 成人午夜视频免费看| 日韩av综合在线观看| 精品久久久久久久久久久下田| 国产精品久久久久7777婷婷| h片在线免费观看| 亚洲黄色片网站| 波多野结衣视频免费观看| 亚洲人精品午夜| 欧美xxxxx精品| 日本在线不卡一区| 国产三级中文字幕| 同性恋视频一区| 成人欧美一区二区三区在线 | 欧美日韩国产综合新一区| 90岁老太婆乱淫| 国内精品久久久久影院薰衣草| 欧美大黑帍在线播放| 蜜乳av综合| 成人网址在线观看| 理论不卡电影大全神| 一本一本久久a久久精品牛牛影视| 国产精品自拍电影| 精品久久久久久久久久国产| 俄罗斯毛片基地| youjizz久久| 久久久久久久久久久久久久久国产| 在线欧美福利| 中文字幕av导航| 亚洲欧洲色图| av一区二区三区四区电影| 二吊插入一穴一区二区| 久久久久久999| 亚洲搞黄视频| 亚洲欧美日韩天堂一区二区| 99精品久久久久久中文字幕| 色综合久久99| 日本中文字幕免费| 亚洲免费高清视频在线| 99精品欧美一区二区| 91在线免费播放| 永久av免费在线观看| 日韩福利电影在线| 97国产在线播放| 国产综合自拍| 超碰97免费观看| 日韩一区亚洲二区| 青娱乐国产91| 亚洲男人都懂第一日本| 风间由美一区二区三区| 成人自拍视频| 国产精自产拍久久久久久蜜| 亚洲成a人片| 国产91精品久久久| 日本在线视频网址| 欧美成人精品在线视频| 午夜在线小视频| 国产亚洲日本欧美韩国| 日本韩国精品一区二区| 亚洲精品一区二区三区在线观看| 国产黄色一区二区| 在线播放亚洲一区| 一本大道伊人av久久综合| 在线观看精品一区| 免费av网站在线| 欧美日韩免费在线| 日本中文字幕免费观看| 亚洲国产一二三| 精品无码m3u8在线观看| 一区二区三区欧美| 青娱乐国产精品| 一区二区三区在线播放| 国产97免费视频| 亚洲免费观看视频| 中国一级片在线观看| 国产欧美日韩中文久久| 国产手机在线观看| 国产色综合一区| 色欲狠狠躁天天躁无码中文字幕| 国产视频一区二区在线观看| 国产美女永久免费无遮挡| 久久久青草青青国产亚洲免观| 亚洲激情视频小说| 国产日韩欧美综合在线| 91视频免费在观看| 国产精品女同互慰在线看| 亚洲AV成人无码精电影在线| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩免费做爰视频| 亚洲在线免费播放| 国产精品7777777| 色屁屁一区二区| 亚洲无码精品在线观看| 日韩午夜激情视频| 日本wwwxxxx| 亚洲日韩欧美视频| 免费网站看v片在线a| 久久高清视频免费| 国产福利电影在线播放| 日本一区二区三区四区视频| 亚洲美女色播| 国产欧美韩日| 国产99亚洲| 一区二区在线观看网站| 欧美1区3d| 日韩av在线综合| 精品一区二区三区在线观看| 中文字幕无人区二| 久久久亚洲综合| caoporn91| 欧美视频不卡中文| 中文字幕在线视频免费| 欧美videos大乳护士334| 亚洲人视频在线观看| 久久精品99国产精品酒店日本| 成人免费一区二区三区牛牛| 国产不卡在线观看| 粉嫩一区二区三区在线观看 | 久久影院一区| 97超碰在线人人| 日本不卡的三区四区五区| 日本中文字幕精品| 国产亚洲成aⅴ人片在线观看| 色欲人妻综合网| 欧美日韩亚洲精品内裤| 91免费视频播放| 精品一区二区三区三区| 美女免费久久| 欧美在线www| 亚洲免费一区三区| 亚洲高清在线播放| 亚洲日本视频| 午夜影院免费版| 国产精品午夜电影| 国产污污视频在线观看| 日韩一区二区三区在线视频| 欧美精品少妇| 国内精品久久久久久久久| 亚洲精品伊人| 日韩尤物视频| 亚洲在线黄色| 亚洲色图欧美另类| 亚洲天堂精品视频| 男人天堂av在线播放| 欧美精品一区二区精品网| 国产欧美黑人| 国产免费一区二区三区在线能观看| 亚洲免费专区| 91国视频在线| va亚洲va日韩不卡在线观看| 久久精品第一页| 7777精品久久久大香线蕉| 成人p站proumb入口| 国产91在线播放九色快色| 美女av一区| 久久亚洲精品无码va白人极品| 激情综合五月天| av在线播放中文字幕| 欧洲精品一区二区三区在线观看| 日韩精品一二| 2023亚洲男人天堂| 欧美日韩一本| 日本一道本久久| 99久久99久久精品免费看蜜桃| 国产亚洲第一页| 亚洲成在人线av| 国产777精品精品热热热一区二区| 97netav| 欧美在线三区| 免费黄色在线播放| 亚洲一区日韩精品中文字幕| 亚洲经典一区二区| 久久91亚洲人成电影网站| 精品一区二区三区在线观看视频| 国产奶头好大揉着好爽视频| 激情深爱一区二区| 99久久婷婷国产综合| 日韩美女在线视频 | 久久精品国产亚洲夜色av网站| 亚洲少妇第一页| 亚洲国产成人午夜在线一区| 亚洲中文无码av在线| 中文字幕亚洲精品| 亚洲综合伊人| 国产av熟女一区二区三区| 不卡影院免费观看| 久久久久久久久影院| 亚洲精选一区二区| 四虎4545www国产精品| 神马影院一区二区三区| 极品销魂美女一区二区三区| 久艹视频在线观看| 日韩成人性视频| 日韩一级二级| 26uuu成人| 成人国产精品免费网站| 亚洲精品www久久久久久| 亚洲精品午夜精品| 日韩精品一页| 欧美高清中文字幕| 2021国产精品久久精品| 中文字幕日韩经典| 美女精品视频一区| 日韩三级视频| 午夜免费高清视频| 亚洲精品免费在线| 深夜福利视频在线免费观看| 国产精品观看在线亚洲人成网| 亚洲国产一成人久久精品| 丰满岳乱妇一区二区| 欧美午夜精品久久久久久孕妇| 污污片在线免费视频| 久久久久久九九九九| 久久国产精品99久久久久久老狼| 少妇久久久久久被弄高潮| 日韩经典第一页| 青青青国产精品| 丰满少妇久久久| 国产精品你懂的在线欣赏| 国产综合视频在线| 国产精品亚洲综合天堂夜夜| 国产精品hd| 天堂资源在线视频| 亚洲国产精品va| 亚洲午夜剧场| 国产情侣av自拍| 香港成人在线视频| 毛片在线视频| 日本一区二区三区视频免费看|