亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

基于Mongodb分布式存儲(chǔ)物理文件

2023-06-23 14:40:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在之前的文章中介紹了如何對(duì)關(guān)系型數(shù)據(jù)數(shù)據(jù)通過(guò)auto-sharding進(jìn)行分布式數(shù)據(jù)存儲(chǔ),今天介紹如何對(duì)物理文件(小文件,基本小于100K)進(jìn)行分布式存儲(chǔ)。

 接著看一下要配置的測(cè)試環(huán)境(與前一篇中類(lèi)似):

模擬2個(gè)shard服務(wù)和一個(gè)config服務(wù), 均運(yùn)行在10.0.4.85機(jī)器上,只是端口不同:

Shard1:27020
       Shard2:27021
       Config:27022

Mongos啟動(dòng)時(shí)默認(rèn)使用的27017端口

在C,D,E磁盤(pán)下分別建立如下文件夾:

mongodb/bin

mongodb/db

然后用CMDming令行依次打開(kāi)相應(yīng)文件夾下的mongd文件:

c:/mongodb/bin/mongod --dbpath c:/mongodb/db/ --port 27020

d:/mongodb/bin/mongod --dbpath d:/mongodb/db/ --port 27021

e:/mongodb/bin/mongod --configsvr --dbpath e:/mongodb/db/ --port 27022    (注:config配置服務(wù)器)

啟動(dòng)mongos時(shí),默認(rèn)開(kāi)啟了27017端口

e:/mongodb/bin/mongos --configdb 10.0.4.85:27022

然后打開(kāi)mongo:

E:/mongodb/bin>mongo   回車(chē)  (有時(shí)加端口會(huì)造成下面的addshardming令出問(wèn)題)

> use admin
          switched to db admin
      > db.runCommand( { addshard : "10.0.4.85:27020", allowLocal : 1, maxSize:2 , minKey:1, maxKey:10} ) 

--添加sharding,maxsize單位是M,此處設(shè)置比較小的數(shù)值只為演示sharding效果

 { "shardAdded" : "shard0000", "ok" : 1 }
      > db.runCommand( { addshard : "10.0.4.85:27021", allowLocal : 1, minKey:1000} )
         { "shardAdded" : "shard0001", "ok" : 1 }     

注:如果要移除sharding,可用下面寫(xiě)法

db.runCommand( { removeshard : "localhost:10000" } );

> db.runCommand({listshards:1});   --查看shard節(jié)點(diǎn)列表

> config = connect("10.0.4.85:27022")
      > config = config.getSisterDB("config")
      > dnt_mongodb=db.getSisterDB("dnt_mongodb");
          dnt_mongodb
      > db.runCommand({enablesharding:"dnt_mongodb"})
          { "ok" : 1 }

> db.printShardingStatus()

--- Sharding Status ---
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      {
        "_id" : "shard0000",
        "host" : "10.0.4.85:27020",
        "maxSize" : NumberLong( 2 )
      }
      { "_id" : "shard0001", "host" : "10.0.4.85:27021" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "dnt_mongodb", "partitioned" : true, "primary" : "shard0001" }
 
      > db.runCommand( { shardcollection : "dnt_mongodb.attach_gfstream.chunks", key : { files_id : 1 } } )  --此處與之前的數(shù)據(jù)存儲(chǔ)方式有些不同,目前shard似乎僅支持files_id
       { "collectionsharded" : "dnt_mongodb.attach_gfstream.chunks", "ok" : 1 }
      
       注:運(yùn)行上面ming令之前需要設(shè)置files_id為唯一索引[unique index]。        
       
       創(chuàng)建完sharding和設(shè)置相應(yīng)信息后,我們加載一下測(cè)試數(shù)據(jù),我用下面代碼來(lái)讀取要本地文件,然后批量向mongodb中添加(通過(guò)循環(huán)修改文件名來(lái)添加相同大小的文件)。       
        
 
/// <summary>
        /// 上傳文件到mongodb
        
/// </summary>
        /// <param name="uploadDir">要上傳文件所在路徑</param>
        /// <param name="fileName">要上傳的文件名</param>
        /// <returns></returns>
        public bool UploadFile(string uploadDir, string fileName)
        {
            
for (int i = 1; i < 10000; i++)
            {
                
try
                {
                    Mongo mongo 
= mongoDB;
                    mongo.Connect();
                    IMongoDatabase DB 
= mongo["dnt_mongodb"];

                    
using (FileStream fileStream = new FileStream(uploadDir + fileName, FileMode.Open))
                    {
                        
int nFileLen = (int)fileStream.Length;

                        
byte[] myData = new Byte[nFileLen];
                        fileStream.Read(myData, 
0, nFileLen);

                        GridFile fs 
= new GridFile(DB, "attach_gfstream");
                        
using (GridFileStream gfs = fs.Create(fileName + i))
                        {
                            gfs.Write(myData, 
0, nFileLen);
                        }
                    }
                    mongo.Disconnect();
                }
                
catch { }                
            }
            
return true;
        }

        
        在批量添加約10000次(約10000個(gè)文件)之后,mongodb開(kāi)始把sharding出來(lái)的chunk從shard0000分布到shard0001上,我們可以用下面指令來(lái)進(jìn)行驗(yàn)證:       
      
       > db.printShardingStatus()

 
--- Sharding Status ---
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      {
        "_id" : "shard0000",
        "host" : "10.0.4.85:27020",
        "maxSize" : NumberLong( 2 )
      }
      { "_id" : "shard0001", "host" : "10.0.4.85:27021" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "dnt_mongodb", "partitioned" : true, "primary" : "shard0000" }

                dnt_mongodb.attach_gfstream.chunks chunks:
                        { "files_id" : { $minKey : 1 } } -->> { "files_id" : ObjectId("4c85fd02145a9b1534010d89") } on : shard0001 { "t" : 2000, "i" : 0 }
                        { "files_id" : ObjectId("4c85fd02145a9b1534010d89") } -->> { "files_id" : ObjectId("4c85fdec145a9b0b340005a7") } on : shard0000 { "t" :3000, "i" : 1 }
                        { "files_id" : ObjectId("4c85fdec145a9b0b340005a7") } -->> { "files_id" : ObjectId("4c85fe08145a9b0b34000aaf") } on : shard0001 { "t" :3000, "i" : 4 }
                        { "files_id" : ObjectId("4c85fe08145a9b0b34000aaf") } -->> { "files_id" : ObjectId("4c85fe27145a9b0b34000fb7") } on : shard0001 { "t" :4000, "i" : 1 }
                        { "files_id" : ObjectId("4c85fe27145a9b0b34000fb7") } -->> { "files_id" : ObjectId("4c85fe43145a9b0b340014bf") } on : shard0000 { "t" :4000, "i" : 7 }
                        { "files_id" : ObjectId("4c85fe43145a9b0b340014bf") } -->> { "files_id" : ObjectId("4c85fe61145a9b0b340019c7") } on : shard0000 { "t" :4000, "i" : 8 }
                        { "files_id" : ObjectId("4c85fe61145a9b0b340019c7") } -->> { "files_id" : ObjectId("4c85fe7b145a9b0b34001ecf") } on : shard0000 { "t" :5000, "i" : 1 }
                        { "files_id" : ObjectId("4c85fe7b145a9b0b34001ecf") } -->> { "files_id" : ObjectId("4c85fe9a145a9b0b340023d7") } on : shard0001 { "t" :5000, "i" : 4 }
                        { "files_id" : ObjectId("4c85fe9a145a9b0b340023d7") } -->> { "files_id" : ObjectId("4c85feb7145a9b0b340028df") } on : shard0001 { "t" :6000, "i" : 1 }
                        { "files_id" : ObjectId("4c85feb7145a9b0b340028df") } -->> { "files_id" : ObjectId("4c85feea145a9b0b340032ef") } on : shard0000 { "t" :6000, "i" : 4 }
                        { "files_id" : ObjectId("4c85feea145a9b0b340032ef") } -->> { "files_id" : ObjectId("4c85ff25145a9b0b34003cff") } on : shard0000 { "t" :7000, "i" : 1 }
                        { "files_id" : ObjectId("4c85ff25145a9b0b34003cff") } -->> { "files_id" : ObjectId("4c85ff57145a9b0b3400470f") } on : shard0001 { "t" :7000, "i" : 4 }
                        { "files_id" : ObjectId("4c85ff57145a9b0b3400470f") } -->> { "files_id" : ObjectId("4c85ff87145a9b0b3400511f") } on : shard0001 { "t" :8000, "i" : 1 }
                        { "files_id" : ObjectId("4c85ff87145a9b0b3400511f") } -->> { "files_id" : ObjectId("4c85ffcd145a9b0b34005b2f") } on : shard0000 { "t" :8000, "i" : 16 }
                        { "files_id" : ObjectId("4c85ffcd145a9b0b34005b2f") } -->> { "files_id" : ObjectId("4c85fff7145a9b0b3400653f") } on : shard0000 { "t" :8000, "i" : 17 }
                        { "files_id" : ObjectId("4c85fff7145a9b0b3400653f") } -->> { "files_id" : ObjectId("4c860021145a9b0b34006f4f") } on : shard0000 { "t" :8000, "i" : 18 }
                        { "files_id" : ObjectId("4c860021145a9b0b34006f4f") } -->> { "files_id" : ObjectId("4c86004f145a9b0b3400795f") } on : shard0000 { "t" :8000, "i" : 19 }
                        { "files_id" : ObjectId("4c86004f145a9b0b3400795f") } -->> { "files_id" : ObjectId("4c860080145a9b0b3400836f") } on : shard0000 { "t" :9000, "i" : 1 }
                        { "files_id" : ObjectId("4c860080145a9b0b3400836f") } -->> { "files_id" : ObjectId("4c8600b5145a9b0b34008d7f") } on : shard0001 { "t" :9000, "i" : 7 }
                        { "files_id" : ObjectId("4c8600b5145a9b0b34008d7f") } -->> { "files_id" : ObjectId("4c860115145a9b0b3400a183") } on : shard0001 { "t" :9000, "i" : 8 }
                        { "files_id" : ObjectId("4c860115145a9b0b3400a183") } -->> { "files_id" : ObjectId("4c860198145a9b0b3400b587") } on : shard0001 { "t" :10000, "i" : 1 }
                        { "files_id" : ObjectId("4c860198145a9b0b3400b587") } -->> { "files_id" : ObjectId("4c8601fc145a9b0b3400c98b") } on : shard0000 { "t" :10000, "i" : 11 }
                        { "files_id" : ObjectId("4c8601fc145a9b0b3400c98b") } -->> { "files_id" : ObjectId("4c86025b145a9b0b3400dd8f") } on : shard0000 { "t" :10000, "i" : 12 }
                        { "files_id" : ObjectId("4c86025b145a9b0b3400dd8f") } -->> { "files_id" : ObjectId("4c8602ca145a9b0b3400f193") } on : shard0000 { "t" :10000, "i" : 13 }
                        { "files_id" : ObjectId("4c8602ca145a9b0b3400f193") } -->> { "files_id" : ObjectId("4c860330145a9b0b34010597") } on : shard0000 { "t" :10000, "i" : 14 }
                        { "files_id" : ObjectId("4c860330145a9b0b34010597") } -->> { "files_id" : { $maxKey : 1 } } on : shard0000 { "t" : 10000, "i" : 15 }

  
      當(dāng)前,綜合比較,發(fā)現(xiàn)還是chunks的值要遠(yuǎn)大于files集合所占用的磁盤(pán)空間(前者存儲(chǔ)文件二進(jìn)制流信息,后者存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)信息(如文件名稱(chēng)大小等):
      
      

    
  
     

      下面是一個(gè)測(cè)試,用于讀寫(xiě)shard0001(注意不是shard0000)上的圖片數(shù)據(jù),因?yàn)閙ongos可以很好的管理sharding下各分區(qū)下的數(shù)據(jù)chunk,所以我們只要告訴它要取的文件名稱(chēng)即可:)
     
      比如要獲取"2010/09/07/2/2856090617370.gif6243"這個(gè)文件(帶日期型文件路徑只是一種格式,因?yàn)槲覀兊漠a(chǎn)品會(huì)將上傳的附件放到相應(yīng)磁盤(pán)目錄下,這種帶路徑的命名方式會(huì)方便與磁盤(pán)路徑進(jìn)行對(duì)應(yīng)),其目前位于shard0001中,我們只要通過(guò)下面html代碼即可獲取圖文件信息:      
      

 <img src="getfile.aspx?filename=2010/09/07/2/2856090617370.gif6243"  width="30" />

       
      相應(yīng)的getfile.aspx.cs 代碼參見(jiàn)如下:       
    

 
public partial class getfile : System.Web.UI.Page
    {

        
public Mongo Mongo { getset; }

        
public IMongoDatabase DB
        {
            
get
            {
                
return this.Mongo["dnt_mongodb"];
            }
        }

        
/// <summary>
        /// Sets up the test environment.  You can either override this OnInit to add custom initialization.
        
/// </summary>
        public virtual void Init()
        {
            
string ConnectionString = "Server=10.0.4.85:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=512;MaximumPoolSize=51200;Pooled=true";
            
if (String.IsNullOrEmpty(ConnectionString))
                
throw new ArgumentNullException("Connection string not found.");
            
this.Mongo = new Mongo(ConnectionString);
            
this.Mongo.Connect();         
        }        

        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!string.IsNullOrEmpty(Request.QueryString["filename"]))
            {
                
string filename = Request.QueryString["filename"];
                Init();
                String filesystem 
= "attach_gfstream";

                GridFile fs 
= new GridFile(DB, filesystem);
                GridFileStream gfs 
= fs.OpenRead(filename);

                Byte[] buffer 
= new Byte[gfs.Length];

                
//下面的Expires和Cache-Control設(shè)置主要用于squid反向加速,更多內(nèi)容參見(jiàn)  http://www.cnblogs.com/daizhj/archive/2010/08/19/1803454.html
                HttpContext.Current.Response.AddHeader("Expires", DateTime.Now.AddDays(20).ToString("r"));
                HttpContext.Current.Response.AddHeader(
"Cache-Control""public");
         
                
// 需要讀的數(shù)據(jù)長(zhǎng)度
                long dataToRead = gfs.Length;
                
int length;
                
while (dataToRead > 0)
                {
                    
// 檢查客戶(hù)端是否還處于連接狀態(tài)
                    if (HttpContext.Current.Response.IsClientConnected)
                    {
                        length 
= gfs.Read(buffer, 010000);
                        HttpContext.Current.Response.OutputStream.Write(buffer, 
0, length);
                        HttpContext.Current.Response.Flush();
                        buffer 
= new Byte[10000];
                        dataToRead 
= dataToRead - length;
                    }
                    
else
                    {
                        
// 如果不再連接則跳出死循環(huán)
                        dataToRead = -1;
                    }
                }
                gfs.Dispose();
                
this.Mongo.Disconnect();
                HttpContext.Current.Response.End();                
            }
        }
    }

      
      
     當(dāng)然,上面只是對(duì)chunks進(jìn)行sharding,如果要對(duì)files集合分片時(shí),可以用下面ming令行:            
     > db.runCommand( { shardcollection : "dnt_mongodb.attach_gfstream.files", key : { _id : 1 } } ) 
    
     { "collectionsharded" : "dnt_mongodb.attach_gfstream.files", "ok" : 1 }
     
     在我添加了近50萬(wàn)記錄后,mongos開(kāi)始將新的文件信息保存到shard0001上,如下圖:

   

  可以使用如下ming令行來(lái)查看 shard上的信息:

    > db.printShardingStatus()

       .../省略之前files_id的shard信息

 
              { "filename" : { $minKey : 1 } } -->> { "filename" : "2010//09//08//2//1393993713076.gif1" } on : shard0000 { "t" : 1000, "i" : 6 }
              { "filename" : "2010//09//08//2//1393993713076.gif1" } -->> { "filename" : "2010//09//08//2//2396571814760.gif9999" } on : shard0000 { "t" : 1000, "i" : 7 }
              { "filename" : "2010//09//08//2//2396571814760.gif9999"} -->> { "filename" : "2010//09//08//2//2819270318096.gif25366" } on : shard0000 { "t" : 2000, "i" : 2 }
              { "filename" : "2010//09//08//2//2819270318096.gif25366" } -->> { "filename" : "2010//09//08//2//3100748419355.gif999" } on : shard0000{ "t" : 2000, "i" : 3 }
             { "filename" : "2010//09//08//2//3100748419355.gif999" } -->> { "filename" : { $maxKey : 1 } } on : shard0001 { "t" : 2000, "i" : 0 }

     下面是mongos上進(jìn)行sharding時(shí)的信息:

     Wed Sep 08 17:25:44 [conn5] ns: dnt_mongodb.attach_gfstream.files ClusteredCursor::query ShardConnection had to change attempt: 0
     Wed Sep 08 17:32:34 [conn6] ns: dnt_mongodb.attach_gfstream.files ClusteredCursor::query ShardConnection had to change attempt: 0
     Wed Sep 08 17:38:49 [conn55] autosplitting 
dnt_mongodb.attach_gfstream.chunks size: 188884488 shard: ns:dnt_mongodb.attach_gfstream.chunks at: shard0001:10.0.4.85:27021 lastmod: 11|3 min: { files_id: ObjectId('4c8755b3145a9b16d41d5dc9') } m
ax: { files_id: MaxKey } on: { files_id: ObjectId('4c8759a5145a9b16d42300d7') }(splitThreshold 188743680)
     Wed Sep 08 17:38:49 [conn55] config change: { _id: "4_85-2010-09-08T09:38:49-10", server: "4_85", time: new Date(1283938729648), what: "split", ns: "dnt_mongodb.attach_gfstream.chunks", details: { before: { min: { files_id: ObjectId('4c8755
b3145a9b16d41d5dc9') }, max: { files_id: MaxKey } }, left: { min: { files_id: ObjectId('4c8755b3145a9b16d41d5dc9') }, max: { files_id: ObjectId('4c8759a5145a9b16d42300d7') } }, right: { min: { files_id: ObjectId('4c8759a5145a9b16d42300d7')
}, max: { files_id: MaxKey } } } }
     Wed Sep 08 17:38:49 [conn98] ns: dnt_mongodb.attach_gfstream.chunks ClusteredCursor::query ShardConnection had to change attempt: 0

如果訪(fǎng)問(wèn)的圖片分別位于shard0000和shard0001時(shí),mongos會(huì)自行將請(qǐng)求調(diào)度到相應(yīng)sharding上,比如下面的鏈接文件分別指定shard000和shard0001:

<img src="getfile.aspx?filename=2010/09/08/2/1393993713076.gif5"  width="30" /> 位于shard0000

<img src="getfile.aspx?filename=2010/09/08/2/3197962515515.gif9"  width="30" /> 位于shard0001

好了,今天的文章就先到這里了。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
你懂的在线观看| 日韩精品高清在线观看| 国产精品久久久久久久一区二区| 永久免费精品影视网站| 欧美xxxxxbbbbb| 日本a级片久久久| 国内精品久久99人妻无码| 欧美疯狂xxxx大交乱88av| 日日夜夜精品网站| 国产精品精品一区二区三区午夜版| 久久精品国产一区二区三区不卡| 日本 欧美 国产| 亚洲精品成av人片天堂无码| 免费毛片a线观看| 久久综合九色综合97婷婷| 日本成人中文字幕| 黑人巨大精品欧美一区| 爱情岛论坛亚洲品质自拍视频网站| 992tv免费直播在线观看| 精品中文字幕一区二区三区四区| 亚洲男人天堂网站| 久久一区二区三区超碰国产精品| 国产精品一区二区三区免费视频| 第一区免费在线观看| 成在线人视频免费视频| 久久久精品一区二区毛片免费看| 黄色免费视频| 欧美成人h版| 欧美成人精品福利在线视频| 91精品在线免费视频| 欧美色图另类图片| 男女激情免费视频| 国产成人精品一区二区三区四区| 色戒汤唯在线| 亚洲激情专区| 婷婷五月在线视频| 亚洲一区二区在| 国产精品69xx| 国产极品久久久久久久久波多结野| 欧美成人一级| 米奇777四色精品人人爽| 91免费看片| 日韩有码一区二区三区| 丰满人妻一区二区三区大胸| 日韩成人网免费视频| 色呦呦在线视频| 成人eeuss影院在线观看| 五月天亚洲色图| 免费的很黄很污的视频网站| 波多一区二区| 亚洲午夜精品一区 二区 三区| 林ゆな中文字幕一区二区| 国产精品初高中精品久久| 哺乳一区二区三区中文视频| 翔田千里亚洲一二三区| 亚洲欧美天堂网| 插插插亚洲综合网| 最近免费中文字幕中文高清百度| 黄色一级二级三级| 亚洲影院色无极综合| 亚洲人成在线观看一区二区| 国产精品久久久久永久免费观看| 91九色偷拍| 亚洲色图综合久久| 精品无人区卡一卡二卡三乱码免费卡| 欧美狂野激情性xxxx在线观| av一区在线| 一级黄色录像在线观看| 97视频国产在线| 中文字幕网站视频在线| 欧美久久久久久久久久| 亚洲一区视频在线观看视频| 成人欧美magnet| 精品国内自产拍在线观看| av影音资源网| xxx性欧美在线| 国产探花精品一区二区| 午夜久久99| caoporm超碰国产精品| 欧美美女搞黄| 99在线看视频| 国产激情在线免费观看| 国产农村妇女精品一区二区| 成年人免费大片| 欧美不卡一二三| 天天操天天干天天综合网| 午夜裸体女人视频网站在线观看| 蜜臀一区二区三区| 一区二区三区在线免费播放| 久久中文欧美| 国产成人在线综合| 秘密基地免费观看完整版中文| 欧美性猛交xxxxxxxx| 精品无码久久久久| 日韩精品另类天天更新| 免费人成年激情视频在线观看| 三上悠亚在线观看二区| 性久久久久久久久久久久久久| 精品人妻午夜一区二区三区四区| 国产伦精品一区二区三区视频痴汉| 熟女人妻在线视频| 免费在线观看污视频| 波多野结衣爱爱视频| 性生交免费视频| 欧美不卡一区| 国产自产自拍视频在线观看| 宅男在线观看免费高清网站| 伊人影院蕉久影院在线观看| 国产精品视频久久久久久久| heyzo视频在线播放| 欧美va亚洲va日韩∨a综合色| 成人日韩av| 中文字幕日韩一区二区三区不卡| 亚洲无av在线中文字幕| 亚洲色图插插| 国产一区二区三区免费在线| 东方伊人免费在线观看| 国产97在线 | 亚洲| 亚洲精品护士| 日本熟妇一区二区三区| 91狠狠综合久久久久久| 成人高清在线观看视频| 亚洲精品一卡二卡三卡四卡| 久草视频在线免费| 第一中文字幕在线| 成人免费无遮挡| 日本一区二区三区中文字幕| 日本熟妇毛茸茸丰满| 久久最新免费视频| 五月天激情婷婷| 日韩精品极品毛片系列视频| 欧美最猛黑人xxxx黑人猛交3p| 国产小视频在线播放| 国产美女性感在线观看懂色av| 欧美午夜一区二区三区免费大片| 久久福利综合| 香蕉久久免费电影| 日韩一级在线视频| 久久精品99久久| 色综合色狠狠综合色| 韩国理伦片一区二区三区在线播放| 69精品人人人人| 欧美成人片在线观看| 欧美精品三级在线观看| 视频一区在线免费观看| 中文字幕人妻精品一区| 国产做受高潮69| 免费h精品视频在线播放| 久久久久综合一区二区三区| www欧美xxxx| 九九九九免费视频| 国产高清在线免费| 久久天天躁狠狠躁老女人| 中文字幕av在线| 在线观看免费视频黄| 中文幕av一区二区三区佐山爱| 中文字幕剧情在线观看| 久久精品亚洲精品国产欧美| 久久久亚洲午夜电影| 色综合色综合| 日本韩国免费观看| 欧美成人精品激情在线观看| 黄色av免费看| 日韩成人一级| 精品欧美一区二区久久久| 日本高清视频一区二区| 国产免费电影网站入口| 欧美中文字幕在线视频| 91精品啪在线观看国产18| 白虎精品一区| 成人avav在线| 狠狠色综合欧美激情| 欧美在线影院在线视频| 国产a视频精品免费观看| 国产综合精品在线| 9色国产精品| 欧美久久精品一级黑人c片| 一区二区三区高清视频在线观看| 成人丝袜高跟foot| 日本欧美电影在线观看| 国产精品第七十二页| 成人免费网站视频www| 最新av电影| 日本一区二区在线不卡| 羞羞在线观看网站| 三年片免费观看大全| 国产日韩一区二区| 亚洲在线免费观看| 国产男女猛烈无遮挡在线喷水| 66国产精品| 国产成人亚洲一区二区三区| 午夜精品区一区二区三| 欧美激情国产精品日韩| 日本成本人片免费观看| 国自产精品手机在线观看视频| 天堂网中文在线观看| 亚洲精品成人天堂一二三| 亚洲欧美另类在线观看| 91精品国产91热久久久做人人| 日本视频一区在线观看| 欧美老年两性高潮| youjizzjizz亚洲| 男女爱爱免费网站| 成人午夜免费在线观看| 久久精品视频8| 国产精彩免费视频| 欧美男男同志| 亚洲美女高潮久久久| 国产盗摄女厕一区二区三区| 亚洲中文字幕无码一区| 91精品国产沙发| 久久国产精品久久久久久久久久| 亚洲婷婷久久综合| 欧美国产日韩精品| 天堂入口网站| 日本三级视频在线观看| 日本中文字幕伦在线观看| 欧美日韩视频一区二区| xxxxx99| 四虎国产精品永久| 一级片免费在线| 成人欧美一区二区三区黑人一| 国产在线黄色| 狠狠操精品视频| 一本一本久久a久久精品综合妖精| av在线麻豆| 一区二区国产在线| 亚洲 精品 综合 精品 自拍| 国产一区二区三区高清在线观看| 在线观看日韩中文字幕| 黄色片一区二区| 7m第一福利500精品视频| 911精品美国片911久久久| 黄色成人在线免费观看| 亚洲AV成人无码一二三区在线| 久久综合av| 7777精品久久久久久| 欧美在线观看成人| 亚洲啊啊啊啊啊| 国产亚洲欧洲高清| 欧美精品91| 日日天天狠狠| 久久久久久久久99精品大| 快播亚洲色图| 欧美xxx在线观看| 日韩精品免费在线观看| av免费在线一区二区三区| 国产高清在线观看| 日韩三级视频在线看| 色综合色综合网色综合| 亚欧美在线观看| www日韩av| 在线成人欧美| 不卡伊人av在线播放| 美女视频一区| 色伊人久久综合中文字幕| 亚洲欧美成人网| 欧美日韩在线免费播放| 国产日韩欧美精品综合| 自拍视频一区二区| 国产真实乱偷精品视频| 欧美码中文字幕在线| 精品一区在线视频| 日日摸夜夜夜夜夜添| 亚洲图片欧洲图片日韩av| 中文字幕日本最新乱码视频| 色妞色视频一区二区三区四区| 一区二区三区在线视频观看58| 97在线视频精品| 天天影视天天精品| 欧美在线观看视频免费| 精品久久久久久久久久岛国gif| 欧美日韩在线观看免费| 久久久无码一区二区三区| 国产91富婆露脸刺激对白| 久久精品一区八戒影视| 在线精品亚洲欧美日韩国产| 色片在线免费观看| 色噜噜久久综合伊人一本| 在线观看国产原创自拍视频| 免费看国产黄色片| 好吊色一区二区| 隔壁人妻偷人bd中字| 88在线观看91蜜桃国自产| 国产精品xxxxx| 亚洲成av人电影| 一色屋免费视频| 国产熟妇久久777777| 欧美女人交a| 一级片免费在线播放| 日本视频在线观看| 久久国产视频精品| 日韩av三区| 成年人免费观看的视频| 欧美国产视频| 97精品国产综合久久久动漫日韩| 国产精品尤物视频| eeuss影院www免费视频| 99热99re6国产在线播放| 国产免费拔擦拔擦8x在线播放| 国产精品蜜臀av| 一本到三区不卡视频| 碰碰视频免费| 丁香六月激情综合| 色呦呦在线播放| 精品成人一区二区三区免费视频| 91精品国产91久久| 丁香一区二区三区| 男人天堂2024| jizzjizzjizzjizzjizzjizzjizz| 写真福利片hd在线播放| 国产91丝袜在线播放| 91精品国产乱码久久久久| 高清毛片在线观看| 欧美18一14sex性处hd| 日本不卡免费新一二三区| 日韩在线视频免费| 国产一二三区精品| 日韩一级成人av| 成人免费区一区二区三区| 免费操人视频| 亚洲欧美国产三级| aaaa一级片| 久久精品一区二区三| 国产精品一级无码| 在线色视频观看| 国产精品视频免费在线| 蜜桃精品成人影片|