日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > MongoDB > 正文

基于Mongodb分布式存儲物理文件

2023-06-23 14:40:21
字體:
來源:轉載
供稿:網友

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

 接著看一下要配置的測試環境(與前一篇中類似):

模擬2個shard服務和一個config服務, 均運行在10.0.4.85機器上,只是端口不同:

Shard1:27020
       Shard2:27021
       Config:27022

Mongos啟動時默認使用的27017端口

在C,D,E磁盤下分別建立如下文件夾:

mongodb/bin

mongodb/db

然后用CMDming令行依次打開相應文件夾下的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配置服務器)

啟動mongos時,默認開啟了27017端口

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

然后打開mongo:

E:/mongodb/bin>mongo   回車  (有時加端口會造成下面的addshardming令出問題)

> 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,此處設置比較小的數值只為演示sharding效果

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

注:如果要移除sharding,可用下面寫法

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

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

> 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 } } )  --此處與之前的數據存儲方式有些不同,目前shard似乎僅支持files_id
       { "collectionsharded" : "dnt_mongodb.attach_gfstream.chunks", "ok" : 1 }
      
       注:運行上面ming令之前需要設置files_id為唯一索引[unique index]。        
       
       創建完sharding和設置相應信息后,我們加載一下測試數據,我用下面代碼來讀取要本地文件,然后批量向mongodb中添加(通過循環修改文件名來添加相同大小的文件)。       
        
 
/// <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個文件)之后,mongodb開始把sharding出來的chunk從shard0000分布到shard0001上,我們可以用下面指令來進行驗證:       
      
       > 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 }

  
      當前,綜合比較,發現還是chunks的值要遠大于files集合所占用的磁盤空間(前者存儲文件二進制流信息,后者存儲結構化數據信息(如文件名稱大小等):
      
      

    
  
     

      下面是一個測試,用于讀寫shard0001(注意不是shard0000)上的圖片數據,因為mongos可以很好的管理sharding下各分區下的數據chunk,所以我們只要告訴它要取的文件名稱即可:)
     
      比如要獲取"2010/09/07/2/2856090617370.gif6243"這個文件(帶日期型文件路徑只是一種格式,因為我們的產品會將上傳的附件放到相應磁盤目錄下,這種帶路徑的命名方式會方便與磁盤路徑進行對應),其目前位于shard0001中,我們只要通過下面html代碼即可獲取圖文件信息:      
      

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

       
      相應的getfile.aspx.cs 代碼參見如下:       
    

 
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設置主要用于squid反向加速,更多內容參見  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");
         
                
// 需要讀的數據長度
                long dataToRead = gfs.Length;
                
int length;
                
while (dataToRead > 0)
                {
                    
// 檢查客戶端是否還處于連接狀態
                    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
                    {
                        
// 如果不再連接則跳出死循環
                        dataToRead = -1;
                    }
                }
                gfs.Dispose();
                
this.Mongo.Disconnect();
                HttpContext.Current.Response.End();                
            }
        }
    }

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

   

  可以使用如下ming令行來查看 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上進行sharding時的信息:

     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

如果訪問的圖片分別位于shard0000和shard0001時,mongos會自行將請求調度到相應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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲高清免费一级二级三级| av午夜在线| 精品日韩av| 日韩高清在线不卡| 国产激情三区| 91精品婷婷国产综合久久竹菊 | 日韩视频精品| 精品播放一区二区| av中文网站| 国产日韩综合| 中文字幕五月天| 午夜伊人狠狠久久| 日韩av中文字幕一区| 国产一区深夜福利| 一区二区不卡视频| 欧美日韩国产首页| 欧美日韩亚洲综合| 日韩欧美国产三级| 91精品免费看| 久久久99久久精品欧美| 久久久99精品久久| √天堂资源中文www| 日韩中文字幕视频网| 国产欧美日韩第一页| 在线中文字幕网站| 久久久99精品久久| 欧美在线视频第一页| 欧美专区中文字幕| 三级网站免费观看| 久久精品日韩无码| 国产在线观看色| 国产黄色在线播放| 中文字幕亚洲欧美| 日本精品在线| 日韩欧美国产午夜精品| 国产视频二区| 一本一道综合狠狠老| 中文字幕亚洲欧美| 欧美xxxx中国| 不卡在线视频| 国产欧美久久久精品影院| 国产在线黄色| 色www精品视频在线观看| 婷婷精品视频| 一级免费a一片| 91久久久久| 国产蜜臀在线| 日韩欧美久久| 91精品综合久久久久久| 国产导航在线| 婷婷综合福利| 天天综合天天| 欧美日韩国产免费观看视频| 亚洲黄页一区| 91久久精品视频| av中文在线播放| 91精品在线观看视频| 国产乱国产乱300精品| 91久久中文| 在线看av的网址| 亚洲一区日韩精品中文字幕 | 日韩中文字幕综合| 国产在线看一区| 日韩高清不卡一区二区| 精品极品三级久久久久| 欧美日韩在线视频免费观看| 91精品久久久久久蜜臀| 精品视频—区二区三区免费| 一本大道一区二区三区| 亚洲成av人综合在线观看| 精品久久久网| 日韩视频免费直播| 国产91一区| 在线观看91精品国产入口| 日韩中文字幕| 国产视频中文字幕在线观看| 欧美婷婷久久| 国产1区在线| 国产69精品久久久久孕妇国产69久久| 亚洲三级免费看| av免费观看国产| 中文字幕欧美日韩精品| 日本精品福利视频| 久草视频在线看| 在线不卡一区二区| 日韩中文字幕视频在线| 欧美日韩在线网站| 伊人网站在线| 91欧美日韩| 精品网站999www| 日韩欧美在线看| 黄色一级大片在线免费看国产一| 国产视频一区二| 一区二区视频在线观看免费的| 国产一级免费| 日韩欧美专区在线| 日韩欧美国产成人一区二区| 亚洲综合视频一区| 久99久视频| 日韩精品午夜| 亚洲免费在线观看av| 国产一级片在线| 白嫩少妇丰满一区二区| 国产三级中文字幕| 国产高清在线观看| 精品极品三级久久久久| 日韩精品乱码av一区二区| 91久久精品网| 亚洲电影中文字幕在线观看| 91亚洲国产| 日韩三级一区| 国产三级第一页| 在线一区免费| 日韩免费视频一区二区| 欧美熟妇乱码在线一区| 亚洲大片精品永久免费| 精品一二三四| 蜜臀久久精品| av免费观看网站| 欧美乱大交xxxxx另类| 日韩字幕在线观看| 亚洲成a人片在线www| 国产一级视频在线播放| 亚洲中午字幕| 日本不卡一区在线| 国产一级免费在线观看| 亚洲欧美日本另类| 二区中文字幕| 婷婷中文字幕综合| 欧美乱大交xxxxx免费| 日韩视频第二页| 亚洲精品欧美二区三区中文字幕| 久久婷婷亚洲| 三级精品视频| 中文字幕日韩视频| 欧美日韩国产综合网| 欧美日韩国产高清| 精品播放一区二区| 欧美在线日韩精品| 日韩国产欧美在线视频| 国产一区在线观看视频| 日韩中文字幕久久| 欧美日韩一二| 欧美一级在线观看| 日韩欧美国产片| 一区二区在线观| 精品视频1区2区3区| 最近高清中文在线字幕在线观看1| 久久精品欧美日韩精品| 日本a口亚洲| 不卡视频一区二区| 日韩亚洲国产欧美| 欧美日韩国产片| 在线视频亚洲| 91精品xxx在线观看| 91精品久久久久久久久久| 午夜国产视频| 久久久精品午夜少妇| 日韩av一区在线| 天堂在线视频中文网| 国产九九在线| 日韩.欧美.亚洲| 一区二区三区中文字幕在线观看| 伊人亚洲视频| 天天综合色天天| 欧美日韩在线视频首页| 高清不卡一区二区| 一区二区在线观| 国产三级精品在线观看| 亚洲国产www| 黄色欧美日韩| 国产欧美日韩在线观看| 国产乱国产乱老熟300部视频| 天天摸日日摸狠狠添| 亚洲最大黄色| 中文在线一区| 久久精品国产成人一区二区三区| 久久精品日韩欧美| 久久久另类综合| 91国内精品在线视频| 国产成人精品亚洲| 精品久久久视频| 亚洲免费专区| 国产在线第一页| 日韩三级视频在线看| 日韩欧美一二三| 国产不卡视频在线| 91精品综合久久久久久| 天天综合天天做| 日本免费在线视频不卡一不卡二| 97国产视频| 一区二区在线看| 日本黄色一区二区三区| 日韩视频在线免费播放| 日韩精品高清不卡| 国产日韩免费| 91精品在线看V| 中文字幕精品国产| 亚洲综合日韩欧美| 国产91久久久久蜜臀青青天草二| 天堂中文在线视频| 国产三级做爰在线观看| 国产在线观看精品| 国产成人精品三级| 一区二区日韩视频| 日韩在线视频免费观看| 日韩久久99| 中文字幕日韩欧美在线视频| 日韩一级免费视频| 欧美自拍一区| 日韩三级视频在线| 91精品国产91久久久久青草| 中文字幕日韩在线视频| 日韩在线播放一区二区| 欧美日韩国产首页在线观看| 精品日韩av一区二区| 先锋男人资源站| 麻豆精品99| 一区二区视频在线观看免费的| 国产日韩精品在线| 91精品观看| 日韩在线高清视频| 亚洲一区在线观看视频| 欧美日韩视频免费看| 日韩精品在线免费观看| 日韩一级二级三级| 三级精品视频| 日韩欧美色综合网站| 久久精品一二三| 久久精品人妻一区二区三区| 中文字幕日韩亚洲| 日韩精品乱码av一区二区| 一区二区视频国产| 欧美日韩国产一二| 日本精品在线播放| 一区二区三区久久| 欧美日韩视频免费播放| 国产欧美日韩在线播放| xxxcom在线观看| 日韩精品丝袜在线| 日韩三级视频在线看| 日本精品国语自产拍在线观看| 高清一区二区| 久久av免费| 日韩高清不卡| 91精品国产综合久久蜜臀 | 在线观看区一区二| 91精品视频国产| av免费在线网站| 视频一区三区| 日韩中文在线中文网三级| 日韩精品在线网站| 国产日韩第一页v| 精品福利一区二区三区| 国产蜜臀在线| 日韩精品在线网站| 欧美中文字幕在线视频| 国产区视频在线观看| 在线视频一区二区三区在线播放| 日本国产在线视频| 国产91久久久久蜜臀青青天草二 | 中文字幕第一页在线播放| 91精品国产自产在线| 日本а中文在线天堂| 日韩中文字幕视频在线| 色妇色综合久久夜夜| 一区二区在线视频播放| 91精品国产乱码久久蜜臀| 日韩精品视频在线播放| 精品视频1区2区3区| 亚洲中文字幕在线一区| 91精品视频观看| 国产 欧美 在线| 中文字幕精品www乱入免费视频| 中文字幕日韩在线视频| 不卡一二三区| 欧美日韩在线观看一区| 99国产一区| 国产乱码午夜在线视频| 亚洲欧洲综合另类| 欧美久久久久久蜜桃| 久久久水蜜桃| 欧美在线中文字幕| 日本黄色一区二区| 午夜国产福利一区二区| 免费视频国产一区| 白嫩少妇丰满一区二区| 国产欧美日韩精品高清二区综合区 | 人人做人人澡人人爽欧美| 国产中文在线视频| 日韩精品三级| 精品一二三区| 国产伦精品免费视频| 欧美色欧美亚洲高清在线视频| 欧美亚洲国产免费| 国产在线播放一区二区| 精品日韩在线播放| 国内精品99| 91精品久久久久久蜜臀| 最近中文字幕在线中文视频| 日韩高清在线一区二区| 精品国产乱码久久久久久蜜臀| 日韩国产高清一区| 欧美激情一区二区三区在线| 福利一区二区| 91精品免费观看| 一级特黄大欧美久久久| 高清1区2区| 1区2区3区在线视频| 国产日韩精品在线观看| 麻豆一区二区99久久久久| 婷婷中文字幕一区三区| 国产视频2区| 日本国产在线视频| 久久91精品国产91久久小草| 欧美另类专区| 国产网站av| 国产在成人精品线拍偷自揄拍| 欧美亚洲视频在线看网址| 亚洲第一中文字幕在线观看| a视频免费在线观看| 91精品国产综合久久久久久| 欧美1234区| 不卡av免费在线| 精品网站999| 日韩视频在线观看一区| 91精品蜜臀在线一区尤物| 一区二区不卡视频在线观看| 亚洲综合日韩欧美| 中文字幕五月天| 狠狠色噜噜狠狠狠狠97| 亚洲羞羞网站| 欧美1区免费| 欧美日韩第一区日日骚| 亚洲影视资源网| 亚洲欧洲日产国码av系列天堂| 99在线精品视频免费观看20| 国产欧美日韩在线| 欧美日韩午夜在线| 国产91久久久久蜜臀青青天草二| 日韩国产一区久久| 国内精品99| 中文天堂在线一区| 视频一区视频二区中文| 欧美日韩精品久久久| 国产真实乱子伦精品视频| 日韩视频不卡中文| 精品中文字幕视频| 欧美日韩亚洲综合| 欧美亚洲天堂| 午夜av一区二区| 国产中文在线播放| 一区二区三区在线免费| 国产精品一区二三区| 精品中文在线| 91精品视频观看| 日本免费在线视频不卡一不卡二| 国产三级第一页| 国产欧美日韩精品综合| 亚洲va韩国va欧美va精品| 欧美日韩精品综合在线| 久本草在线中文字幕亚洲欧美| 久久久精品欧美| 欧美日韩在线视频首页| 在线欧美日韩精品| 亚洲第一中文字幕| 欧美三级在线看| 快she精品国产999| 国产色在线 com| 91精品国产综合久久久久久| 在线亚洲免费| 玖玖在线免费视频| av中文网站| 日韩一级中文字幕| 日韩精品三级| 内射国产内射夫妻免费频道| 一区二区三区在线|网站| 成人无遮挡免费网站视频在线观看| 99久热re在线精彩视频| 欧美 日韩 国产 高清| 国产不卡的av| 日本不卡一区在线| 国产三级精品网站| 国产婷婷色一区二区三区| 久久91精品久久久久久秒播| 99精品999| 国产永久在线观看| 中文精品在线| av免费不卡国产观看| 视频一区二区国产| 国产91欧美| 一区二区三区鲁丝不卡| 91精品国产全国免费观看| 日韩三级高清在线| 99精品电影| 在线国产日本| 中文精品在线| 亚洲欧美中文字幕| 亚洲国产福利视频| 欧美日韩综合在线观看|