日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Rocksdb 通过ingestfile 来支持高效的离线数据导入

發布時間:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rocksdb 通过ingestfile 来支持高效的离线数据导入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 使用方式
    • 實現原理
    • 總結

前言

很多時候,我們使用數據庫時會有離線向數據庫導入數據的需求。比如大量用戶在本地的一些離線數據,想要將這一些數據導入到已有的數據庫中;或者說NewSQL場景中部分機器離線,重新上線之后的數據增量/全量同步 等場景。這個時候 我們并不想要讓這一些數據占用過多的系統資源,更不希望他們對正常的線上業務有影響,所以盡可能高效得完成這一些數據的同步就需要深入設計一番。

而如果底層引擎使用的是rocksdb,那就非常省事了,只需要組織好你們的數據調用接口就完事了,剩下的導入過程由引擎完成。 tikv便是通過 rocksdb的這個功能完成集群異常恢復之后 region之間的全量增量同步的。回到今天我們要討論的主題,便是rocksdb的這個數據導入過程是如何盡可能快、盡可能高效得完成的。

使用方式

講解實現原理之前我們先看看如何使用這個功能,功能的易用性也很重要,用戶還是希望盡可能得少寫代碼來完成這個工作。使用上主要是兩部分:創建SST文件 和 導入SST文件。

  • 創建sst文件:這一步主要是通過一個sst_filter_writer,將需要導入的 k/v 數據轉換成sst文件

    需要注意的是:

    1. 用戶k/v 數據需要按照options.comparator 嚴格有序,默認是按照key的字典序
    2. 這里的options 建議和db寫入的options用一套(壓縮選項,sst文件相關選項等)
    Options options;SstFileWriter sst_file_writer(EnvOptions(), options);
    // 指定形成的sst文件的路徑
    std::string file_path = "/home/usr/file1.sst";// open file_path
    Status s = sst_file_writer.Open(file_path);
    for (...) {// 寫入sst,用戶保證k/v 的順序s = sst_file_writer.Put(key, value);if (!s.ok()) {printf("Error while adding Key: %s, Error: %s\n", key.c_str(),s.ToString().c_str());return 1;}
    }// 完成寫入
    s = sst_file_writer.Finish();
    
  • 導入sst文件:這個步驟就是將創建好的一個或者多個sst文件導入到db中,也允許向多個cf中導入

IngestExternalFileOptions ifo;
// Ingest the 2 passed SST files into the DB
// 導入數據
Status s = db_->IngestExternalFile({"/home/usr/file1.sst", "/home/usr/file2.sst"}, ifo);

使用還是比較簡單的,整體的使用過程如下:

#include <iostream>
#include <vector>#include <gflags/gflags.h>#include <rocksdb/db.h>
#include <rocksdb/env.h>
#include <rocksdb/sst_file_writer.h>#define DATA_SIZE 10
#define VALUE_SIZE 1024using namespace std;// 比較函數
bool cmp(pair<string, string> str1,pair<string, string> str2) {if(str1.first < str2.first) {return true;} else if (str1.first == str2.first && str1.second < str2.second) {return true;} else {return false;}
}// 隨機字符串
static string rand_data(long data_range) {char buff[30];unsigned long long num = 1;for (int i = 0;i < 4; ++i) {num *= (unsigned long long )rand();}sprintf(buff, "%llu", num % (unsigned long long)data_range );string data(buff);return data;
}// 構造有序數據
void construct_data(vector<pair<string,string>> &input) {int i;string key;string value;for (i = 0;i < DATA_SIZE; i++) {if(key == "0") {continue;}key = rand_data(VALUE_SIZE);value = rand_data(VALUE_SIZE);input.push_back(make_pair(key, value));}
}void traverse_data(vector<pair<string,string>> input) {int i;for(auto data : input) {cout << data.first << " " << data.second << endl;}
}// 創建sst文件
int create_sst(string file_path) {vector<pair<string,string>> input;vector<pair<string,string>>::iterator input_itr;rocksdb::Options option;/* open statistics and disable compression */option.create_if_missing = true;option.compression = rocksdb::CompressionType::kNoCompression;rocksdb::SstFileWriter sst_file_writer(rocksdb::EnvOptions(), option);rocksdb::Status s = sst_file_writer.Open(file_path);if (!s.ok()) {printf("Error while opening file %s, Error: %s\n", file_path.c_str(),s.ToString().c_str());return 1;}// 需要保證數據有序后再寫入construct_data(input);sort(input.begin(), input.end(), cmp);traverse_data(input);// Insert rows into the SST file, note that inserted keys must be // strictly increasing (based on options.comparator)for (input_itr = input.begin(); input_itr != input.end();input_itr ++) {rocksdb::Slice key(input_itr->first);rocksdb::Slice value(input_itr->second);s = sst_file_writer.Put(key, value);if (!s.ok()) {printf("Error while adding Key: %s, Error: %s\n",key.ToString().c_str(),s.ToString().c_str());return 1;}}// Close the files = sst_file_writer.Finish();if (!s.ok()) {printf("Error while finishing file %s, Error: %s\n", file_path.c_str(),s.ToString().c_str());return 1;}return 0;
}static rocksdb::DB *db;void create_db() {rocksdb::Options option;/* open statistics and disable compression */option.create_if_missing = true;option.compression = rocksdb::CompressionType::kNoCompression;rocksdb::Status s = rocksdb::DB::Open( option,"./db", &db);if (!s.ok()) {printf("Open db failed : %s\n", s.ToString().c_str());return;}
}void db_write(int num_keys) {rocksdb::WriteOptions write_option;write_option.sync = true;rocksdb::Slice key;rocksdb::Slice value;rocksdb::Status s;int i;printf("begin write \n");for (i = 0;i < num_keys; i++) {key = rand_data(VALUE_SIZE);value = rand_data(VALUE_SIZE);s = db->Put(write_option, key, value);if (!s.ok()) {printf("Put db failed : %s\n", s.ToString().c_str());return;}}db->Flush(rocksdb::FlushOptions());printf("finish write \n");
}int main() {// 先寫入一批數據create_db();db_write(100000);// 創建sst文件if (create_sst("./test.sst") == 0) {printf("creates sst success !\n");} else {printf("creates sst failed !\n");}// 導入數據rocksdb::IngestExternalFileOptions ifo;// Ingest the 2 passed SST files into the DBprintf("Ingest sst !\n");rocksdb::Status s = db->IngestExternalFile({"test.sst"}, ifo);if (!s.ok()) {printf("Error while adding file test.sst , Error %s\n",s.ToString().c_str());return 1;}return 0;
}

運行輸出如下:

begin write 
finish write
# consturct data,需按照字典序,如果沒有按照字典序構造的話會報錯
1008 232
240 880
288 63
410 768
506 56
534 256
640 180
72 248
800 672
944 217
creates sst success !

通過db日志可以看到我們創建的sst文件test.sst被成功導入到db,形成了./db/000020.sst,且在db目錄中。

╰─$ cat db/LOG |grep ingested
[AddFile] External SST file test.sst was ingested in L0 with path ./db/000020.sst (global_seqno=200012)╰─$ ls db
000017.log               000020.sst               IDENTITY                 LOG                      LOG.old.1618643738564935 OPTIONS-000008
000019.sst               CURRENT                  LOCK                     LOG.old.1618123487361092 MANIFEST-000013          OPTIONS-000016

實現原理

從如何使用這個功能上我們能夠感覺到這一些數據并不是通過rocksdb正常的I/O流程寫入的。如果使用正常的接口,那我們用戶不需要排序,而是直接通過db->Put接口將k/v寫入,凡事都有但是,但是這樣來導入離線數據在rocksdb內部后續的flush/compaction 都會消耗大量的系統資源,而這并不是我們想要的高效。所以,rocksdb提供的ingest接口肯定不會讓這一些要導入的數據消耗過多的資源,接下來我們一起看看底層的詳細實現。

為了更形象得告訴大家在rocksdb作為存儲引擎的場景,如果通過傳統的put接口導入數據會多出哪一些I/O,如下圖

其中紅色的尖頭 是ingest file 相比于傳統的put接口 少的I/O部分,可以說ingest方式導入數據極大得節約了整個系統資源的開銷(包括但不限于I/O , CPU 資源的開銷)。

下面主要介紹的是有了sst文件,接下來如何導入到db中的過程。關于通過sst_file_writer創建具體的sst文件的過程就不多說了,也就是按照sst文件的格式(datablock,index block…footer)等將有序的數據一個個添加進去而已。

主要有如下幾步:

  1. 為待插入的sst文件創建file link到db目錄,或者直接拷貝進去
  2. 停止寫入,需要保證即將導入的sst文件在db中擁有一個安全合理的seqno,如果持續寫入,那這個seqno可能不會全局遞增了。
  3. 檢查導入的sst文件是否和memtable中的key-range有重疊,有的話需要flush memtable
  4. 為這個sst文件 按照其key-range挑選一個合適的level放進去
  5. 為這個問天添加一個全局的seqno
  6. 恢復db的寫入

其中停止寫入到恢復寫入這段時間對于用戶來說越小越好,所以ingest的性能很重要。

接下來看看詳細的源代碼實現:

導入數據的函數入口是DBImpl::IngestExternalFiles

導入的sst文件最后都需要形成一個db內部的sst文件,因為這個時候已經停止寫入了,所以會從最新的sst文件編號之后取一個文件編號,后續的其他要導入的sst文件會不斷追加。

Status DBImpl::IngestExternalFiles(const std::vector<IngestExternalFileArg>& args) {...// 構造文件編號到next_file_number中Status status = ReserveFileNumbersBeforeIngestion(static_cast<ColumnFamilyHandleImpl*>(args[0].column_family)->cfd(), total,pending_output_elem, &next_file_number);if (!status.ok()) {InstrumentedMutexLock l(&mutex_);ReleaseFileNumberFromPendingOutputs(pending_output_elem);return status;}...
}

有了在db內部的合法文件編號,我們就可以進行文件遷移了,將待導入的sst文件遷移到db內部已經構造好的sst文件編號之中。

會為每一個cf構造一個ingest_job, 將待導入文件拷貝/移動到 db內部的sst文件中,這個過程是在接下來的Prepare函數中。

  uint64_t start_file_number = next_file_number;for (size_t i = 1; i != num_cfs; ++i) {start_file_number += args[i - 1].external_files.size();auto* cfd =static_cast<ColumnFamilyHandleImpl*>(args[i].column_family)->cfd();SuperVersion* super_version = cfd->GetReferencedSuperVersion(this);// prepare 函數exec_results[i].second = ingestion_jobs[i].Prepare(args[i].external_files, start_file_number, super_version);exec_results[i].first = true;CleanupSuperVersion(super_version);}

看看Prepare的函數實現:

  1. 拿著輸入的多個sst文件,如果有多個,則需要檢查這一些文件之間是否有重疊key,有的話就不支持了(rocksdb除了l0,其他層不允許有重疊key)。
  2. 根據用戶指定的ingest option: move_files 是否為true,來將待導入文件move到db中, 如果move失敗了就拷貝文件。
Status ExternalSstFileIngestionJob::Prepare(const std::vector<std::string>& external_files_paths,uint64_t next_file_number, SuperVersion* sv) {// 解析文件信息for (const std::string& file_path : external_files_paths) {IngestedFileInfo file_to_ingest;status = GetIngestedFileInfo(file_path, &file_to_ingest, sv);if (!status.ok()) {return status;}files_to_ingest_.push_back(file_to_ingest);}// 確保導入的多個sst文件之間沒有重疊......} else if (num_files > 1) {// Verify that passed files dont have overlapping rangesautovector<const IngestedFileInfo*> sorted_files;for (size_t i = 0; i < num_files; i++) {sorted_files.push_back(&files_to_ingest_[i]);}std::sort(sorted_files.begin(), sorted_files.end(),[&ucmp](const IngestedFileInfo* info1, const IngestedFileInfo* info2) {return sstableKeyCompare(ucmp, info1->smallest_internal_key,info2->smallest_internal_key) < 0;});// 如果有重疊的話,ingest也無法支持,因為在db中大于level0的更高層level內部的// sst文件之間是不允許有重疊的,加速更高層的二分查找。for (size_t i = 0; i < num_files - 1; i++) {if (sstableKeyCompare(ucmp, sorted_files[i]->largest_internal_key,sorted_files[i + 1]->smallest_internal_key) >= 0) {files_overlap_ = true;break;}}}......// 根據用戶參數move文件if (ingestion_options_.move_files) {status = env_->LinkFile(path_outside_db, path_inside_db);...} else { // 否則就拷貝文件f.copy_file = true;}if (f.copy_file) {TEST_SYNC_POINT_CALLBACK("ExternalSstFileIngestionJob::Prepare:CopyFile",nullptr);// CopyFile also sync the new file.status = CopyFile(env_, path_outside_db, path_inside_db, 0,db_options_.use_fsync);}...
}

到此,文件就已經進入到了rocksdb 之中,ingest_job的prepare流程就結束了。

接下來 就到了我們前面介紹總步驟的第二步,停止用戶對當前db的寫入:

DBImpl::IngestExternalFilesWriteThread::EnterUnbatched

其中WriteThread::EnterUnbatched函數會讓當前db的寫入線程都處于wait狀態。

接下來就是檢查當前要導入的文件是否和memtable中的key-range有重疊,函數調用如下:

DBImpl::IngestExternalFilesExternalSstFileIngestionJob::NeedsFlushColumnFamilyData::RangesOverlapWithMemtables

這個函數ColumnFamilyData::RangesOverlapWithMemtables會拿著從ingest files中構造好的key-range和memtable中的 key-range 進行對比,如果有重疊key,則會將memtable flush置為true

Status ColumnFamilyData::RangesOverlapWithMemtables(const autovector<Range>& ranges, SuperVersion* super_version,bool* overlap) {...Status status;// 拿著ingest files的range中的每一個key,看是否能夠從memtable中找到for (size_t i = 0; i < ranges.size() && status.ok() && !*overlap; ++i) {auto* vstorage = super_version->current->storage_info();auto* ucmp = vstorage->InternalComparator()->user_comparator();InternalKey range_start(ranges[i].start, kMaxSequenceNumber,kValueTypeForSeek);// 從memtable中找memtable_iter->Seek(range_start.Encode());status = memtable_iter->status();ParsedInternalKey seek_result;if (status.ok()) {if (memtable_iter->Valid() &&!ParseInternalKey(memtable_iter->key(), &seek_result)) {status = Status::Corruption("DB have corrupted keys");}}// 找到了,則置overlap為trueif (status.ok()) {if (memtable_iter->Valid() &&ucmp->Compare(seek_result.user_key, ranges[i].limit) <= 0) {*overlap = true;} else if (range_del_agg.IsRangeOverlapped(ranges[i].start,ranges[i].limit)) {*overlap = true;}}}...
}

在后續的DBImpl::FlushMemTable函數中會flush memtable,不同的cf是分開進行的

DBImpl::IngestExternalFilesDBImpl::FlushMemTable

接下來就開始了第四步和第五步的處理邏輯,需要為每一個落到db中的sst文件挑選合適的level以及分配全局seqno,處理邏輯在Run函數中:

DBImpl::IngestExternalFilesExternalSstFileIngestionJob::Run

主要處理邏輯如下:

一個一個ingest file進行處理

  1. 選擇一個合適的level,將ingest file插入進去
    如果user配置了allow_ingest_behind=true,即允許導入的數據直接插入到最后一層的文件位置,且ingest的時候配置的ingest option中ingest_behind=true,則會先嘗試插入到bottomest level,如果最后一層的文件和待插入的文件有重疊,則插入失敗。處理邏輯在CheckLevelForIngestedBehindFile函數之中。

    否則逐層遍歷,找到第一個和這一些key-range有重疊的level即可。函數AssignLevelAndSeqnoForIngestedFile

  2. 找到了合適的level的同時會記錄一個assigned_seqno,是在當前last_sequence的基礎上+1得到的。函數AssignLevelAndSeqnoForIngestedFile之中。

  3. 為當前ingest_file 寫入一個global seq no, 并執行fsync/sync。函數AssignGlobalSeqnoForIngestedFile之中。

  4. 最后就是將當完成更新的ingest file的元信息更新到VersionEdit之中。

接下來就進入尾聲了:

  1. 將更新的VersionEdit寫入到MANIFEST文件之中
  2. 更新每個ingest file對應的cf信息,并且調度compaction/flush, 因為之前ingest file時找的是有重疊key的一層。
  3. 恢復db的寫入
     	// 將`VersionEdit`寫入到MANIFEST文件之中status =versions_->LogAndApply(cfds_to_commit, mutable_cf_options_list,edit_lists, &mutex_, directories_.GetDbDir());}if (status.ok()) {for (size_t i = 0; i != num_cfs; ++i) {auto* cfd =static_cast<ColumnFamilyHandleImpl*>(args[i].column_family)->cfd();if (!cfd->IsDropped()) {//更新每個ingest file對應的cf信息,并且調度compaction/flush, 因為之前ingest file時找的是有重疊key的一層InstallSuperVersionAndScheduleWork(cfd, &sv_ctxs[i],*cfd->GetLatestMutableCFOptions());...}}}// 恢復db的寫入,喚醒db的其他所有的writerwrite_thread_.ExitUnbatched(&w);

到此,整個ingest就算是結束了。

總結

通過ingest的實現,我們能夠看到rocksdb通過ingest的方式支持離線數據導入確實能夠極大得降低系統資源的開銷。不需要一個key在LSM中被反復的寫入、讀取。

總結

以上是生活随笔為你收集整理的Rocksdb 通过ingestfile 来支持高效的离线数据导入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

最近日本中文字幕a | 中文成人字幕 | 中文字幕乱码电影 | 欧美精品黑人性xxxx | 亚洲春色综合另类校园电影 | 99久久综合狠狠综合久久 | 欧美日韩国产成人 | 在线观看国产区 | 97在线免费观看 | 久久久精品国产一区二区三区 | 亚洲国产精品小视频 | 精品一区三区 | 国产精品第10页 | 国产91免费在线观看 | 久久精品免费 | 伊人天天色| 国产精品丝袜久久久久久久不卡 | 精品久久久久久久久亚洲 | 国产伦理一区二区三区 | 成人av久久| 欧美91av | 国产亚洲人成网站在线观看 | 亚洲国产精品va在线看黑人动漫 | 国产区 在线 | 91精品国产自产91精品 | 丁香六月久久综合狠狠色 | 日本精品一区二区三区在线播放视频 | 成人黄色av免费在线观看 | 欧美性黄网官网 | 久久激情小说 | 日本色小说视频 | 黄色99视频| 日日夜夜人人精品 | 一级片免费视频 | 一区 在线 影院 | 精品一区二区免费在线观看 | 在线观看日韩av | 国产在线一区观看 | 婷婷六月丁 | 成人福利在线观看 | 九九热在线精品视频 | 91成年视频 | 天天躁日日 | 成人网页在线免费观看 | 久久69精品| 久久激情视频 | 欧美激情综合五月色丁香 | 久久欧洲视频 | 国产精品美女999 | 国产999精品久久久久久麻豆 | 天天玩夜夜操 | 国产精品a级 | 深爱综合网 | 精品国产免费av | 中文字幕激情 | 狠狠色丁香婷婷综合久小说久 | www.天天草 | 午夜精品久久久99热福利 | www.五月婷 | 97福利社 | 日韩在线一区二区免费 | 日韩在线看片 | 狠狠狠狠狠操 | 亚洲午夜在线视频 | 国产成人在线观看 | 免费观看国产精品视频 | 久久中文字幕视频 | 免费在线激情视频 | 精品一区二区精品 | 欧美日韩高清在线 | 久久免费在线观看视频 | 免费视频你懂得 | 欧美日韩一区二区在线观看 | 国产高清中文字幕 | 日韩成人免费在线 | 99高清视频有精品视频 | 美女视频黄,久久 | 国产区在线看 | 国色综合| 国产中文字幕在线视频 | 国产精品男女 | 国产黄色片久久 | 亚洲另类视频在线观看 | av在线免费不卡 | 成人黄色小说在线观看 | 精品一区二区三区香蕉蜜桃 | 亚洲午夜精品久久久久久久久久久久 | www.天天射.com | 成人动图 | 8x成人在线| 国产美女精彩久久 | 欧美一级日韩免费不卡 | 婷婷亚洲综合五月天小说 | 欧美视频二区 | 伊人开心激情 | 日韩欧美一区二区在线 | 亚州国产精品 | 日本中文不卡 | 99精品国产亚洲 | 免费的黄色的网站 | 日韩视频中文字幕在线观看 | 欧美一级片免费观看 | 99re在线视频观看 | 日韩视频中文字幕 | 成人av视屏 | 人人干在线 | 国产亚洲精品久久19p | 91久久精品一区 | 综合色站| 久久精品日韩 | 99精品国产一区二区三区麻豆 | 久久久久电影网站 | 亚洲精品午夜aaa久久久 | 中文字幕 在线看 | .国产精品成人自产拍在线观看6 | 片网址 | 亚欧洲精品视频在线观看 | 久草网视频在线观看 | 日韩在线免费 | 黄a在线观看 | 女人久久久久 | 亚洲视频专区在线 | 久草影视在线观看 | 91久久精品一区二区二区 | 视频一区二区精品 | 天天弄天天操 | 9999国产精品 | 国产精品免费观看视频 | 欧美日韩中文字幕综合视频 | 色婷婷88av视频一二三区 | 久久国色夜色精品国产 | 久久免费视频6 | 免费观看91视频大全 | 亚洲第二色 | 天天天天天天天操 | 日本99久久| 久久精品久久国产 | 国产精品欧美久久久久天天影视 | 久久人人97超碰国产公开结果 | 久久精品福利视频 | 久久精品欧美一区 | 亚洲精品免费在线视频 | 超碰免费成人 | 美女天天操 | 久久国产高清视频 | 一区二区av | 成人在线观看资源 | 日韩 精品 一区 国产 麻豆 | 黄色视屏在线免费观看 | 国产一级二级在线观看 | 欧美 日韩 性 | 在线精品视频免费观看 | 亚洲91精品 | 色噜噜在线观看 | 久久九九久久 | 欧美激情第八页 | 一级欧美一级日韩 | 久久精品久久99精品久久 | 免费黄色网址大全 | 中文字幕av电影下载 | www.久久久久 | 日韩中文字幕在线不卡 | 日韩精品免费一线在线观看 | 日韩视频免费播放 | 亚洲高清视频在线观看免费 | 欧美少妇xxxxxx| 性色av一区二区三区在线观看 | 欧美小视频在线 | 91精品视频一区二区三区 | 日韩在线观看你懂的 | 激情综合五月婷婷 | 黄色三级视频片 | 午夜123| 天堂网一区 | 精品一区二区三区四区在线 | 开心激情五月网 | 精品国产伦一区二区三区免费 | 91精品资源 | 九热在线 | 色www精品视频在线观看 | 久草精品视频 | av一区二区三区在线播放 | 国产精品美女久久久久久久久久久 | 亚洲久草在线 | 日韩欧美一区二区在线播放 | 天天爽夜夜爽精品视频婷婷 | 国产黄色a | www.伊人色.com | 成年人视频在线免费 | 色综合 久久精品 | 成人精品国产 | 国产精品涩涩屋www在线观看 | 亚av在线| 久久久精品国产免费观看同学 | 天天操天天爽天天干 | 欧美成人h版在线观看 | 97高清视频 | 国产美女主播精品一区二区三区 | 亚洲 精品在线视频 | 一级黄色在线免费观看 | 天天干天天草 | 国产精品久久久久国产精品日日 | 五月婷综合网 | 成人a免费 | 在线观看国产www | av丝袜制服| 久在线观看视频 | 国内精品久久久久久久影视麻豆 | av在线免费观看黄 | 日韩一区二区三区观看 | 国产精品视频在线观看 | 99精品免费在线观看 | 91香蕉嫩草 | 91精品在线看| 九九色综合 | 人人玩人人爽 | 国产黄色片免费观看 | 黄色av三级在线 | 欧美狠狠色 | 日韩大片在线播放 | 黄色动态图xx | 中文字幕丰满人伦在线 | 五月天激情综合 | 中文字幕在线播放日韩 | 国产一区二区三区视频在线 | 日韩精品一区在线播放 | 久久在视频 | 免费看一级一片 | 激情久久久久久久久久久久久久久久 | 午夜精品影院 | 久久精品成人欧美大片古装 | 三级黄色片子 | 狠狠狠狠狠色综合 | 国产精品18久久久久白浆 | 精品亚洲视频在线 | 日日夜夜天天综合 | 中文在线免费观看 | 午夜视频一区二区三区 | 久久美女电影 | 日本黄色免费电影网站 | 国产精品九九九九九 | 在线观看的a站 | 国产美女视频免费 | 欧美色图视频一区 | 国产人在线成免费视频 | 大型av综合网站 | 久久综合色播五月 | 亚洲国产综合在线 | 久久久91精品国产一区二区精品 | 国产精品国产三级国产不产一地 | 欧美ⅹxxxxxx | 久久免费高清 | 色婷婷av国产精品 | 免费精品国产va自在自线 | 黄色国产在线观看 | 免费在线观看av | 黄色大片中国 | 国产理论一区二区三区 | 开心色插| 黄色网址av| 日韩色爱| av成人在线观看 | 久草在线久| 99九九视频 | 国产精品一区二区av麻豆 | 亚洲区精品视频 | 久久人人爽人人爽 | 久久久99精品免费观看乱色 | 中文字幕亚洲精品在线观看 | 欧美久久久影院 | 亚洲妇女av | 成人免费视频在线观看 | 精品视频免费观看 | 最近2019好看的中文字幕免费 | 欧美精品国产综合久久 | 干av在线 | 日本中文字幕在线播放 | 日韩在线视频网 | 国产尤物在线视频 | 国精产品一二三线999 | 日本一区二区三区视频在线播放 | 久久久久久国产精品久久 | 伊人伊成久久人综合网站 | 在线观看中文字幕av | 最新中文字幕在线资源 | 国产在线观看av | 在线精品在线 | 午夜性盈盈 | 国产成人黄色av | 91资源在线视频 | 91精品免费在线 | 亚洲高清在线视频 | 天天伊人狠狠 | 欧美黄网站 | av成人在线播放 | 久久久久久久av | 午夜婷婷在线观看 | 97精品国产97久久久久久免费 | 天天干天天拍 | 国产无套精品久久久久久 | 91探花国产综合在线精品 | 久草视频视频在线播放 | 日韩免费b | 久久国产剧场电影 | 99视频免费看 | 99精品视频在线观看播放 | 97国产超碰 | 免费看的av片 | 国产成人性色生活片 | 天天色天天爱天天射综合 | 91人人爽久久涩噜噜噜 | 激情五月婷婷综合 | 人人爽人人爽人人爽 | 色老板在线 | 午夜视频黄 | 久久精品久久精品久久 | 免费观看性生活大片 | 日韩黄色软件 | av黄在线播放 | 日韩三级视频在线观看 | 欧美成人亚洲成人 | 欧美乱熟臀69xxxxxx | av在线影片 | 国产成人久久精品一区二区三区 | 国产在线第三页 | 在线播放视频一区 | 欧美性大战久久久久 | 白丝av免费观看 | 天天操天天谢 | www.黄色| a天堂免费 | 亚洲一区二区视频在线播放 | 夜夜看av| 人人爽人人爽人人爽学生一级 | 香蕉国产91 | 99这里只有精品99 | 天天插一插 | 黄色av影视| 久久久久久久国产精品影院 | 中文字幕一区二区三区乱码在线 | 亚洲小视频在线 | 天天爱天天操天天爽 | 在线亚洲欧美日韩 | 成人亚洲欧美 | 亚洲日本va午夜在线影院 | 国产伦理剧 | 九九一级片 | 久草在线在线精品观看 | 麻豆视频免费入口 | 日本韩国精品一区二区在线观看 | 久草com| 视频国产精品 | 色婷婷欧美 | 97超碰在线久草超碰在线观看 | 色国产精品一区在线观看 | 欧美一区二区三区免费看 | 国产精品美女久久久久久网站 | 国产精品久久久久久久久费观看 | 亚洲黄色在线观看 | 色在线免费 | 综合精品在线 | 91麻豆视频| 亚洲精品国产综合99久久夜夜嗨 | 热九九精品 | 国产免费一区二区三区最新6 | 国产理论免费 | 免费人人干 | 国语精品久久 | 免费黄色在线播放 | 中文字幕国内精品 | av在线永久免费观看 | 日韩在线欧美在线 | 在线观av | 中文字幕永久免费 | av网站免费线看精品 | 日韩美在线 | 精品久久九九 | 欧美va在线观看 | 精品久久久久一区二区国产 | 欧美激情片在线观看 | 欧美亚洲精品在线观看 | 国产精品久久久久婷婷二区次 | 波多野结衣一区二区三区中文字幕 | 婷婷激情网站 | 国产不卡在线观看视频 | 国产手机视频 | av在线色 | 日日夜夜狠狠干 | 在线播放精品一区二区三区 | 色偷偷888欧美精品久久久 | 香蕉视频在线视频 | 99热这里只有精品1 av中文字幕日韩 | 国产私拍在线 | 亚洲精品久 | 欧美在线观看小视频 | 欧美一区二区三区不卡 | 亚洲精品视频第一页 | 久久美女免费视频 | 日韩高清dvd | 中文字幕中文 | 国产91粉嫩白浆在线观看 | 精品99在线视频 | 国产成人av一区二区三区在线观看 | 中文高清av | 丝袜美腿在线视频 | 夜夜干夜夜 | 日本久久精品视频 | 超碰在线人人草 | 日韩久久久久久 | 中文字幕在线观看第三页 | 国产精品白丝jk白祙 | 国产一区福利在线 | 天天射天天射天天 | 999久久国精品免费观看网站 | 国产高清视频网 | 成人av在线资源 | 久久午夜网| 高清精品视频 | 91麻豆高清视频 | 久久美女视频 | 91激情视频在线播放 | 亚洲精品乱码久久久久久 | 国产99在线免费 | 亚洲美女久久 | 天天射日| 日韩高清不卡一区二区三区 | 日三级在线 | 91九色九色 | 免费看的黄网站 | 亚州精品天堂中文字幕 | 久草在线费播放视频 | 91丨九色丨高潮丰满 | 国产一区av在线 | 日韩在线观看三区 | 国产五月婷婷 | 日韩精品在线免费观看 | 91精品一区在线观看 | 激情丁香综合五月 | 天天干,天天草 | 狠狠狠色丁香综合久久天下网 | 亚洲综合视频网 | 久久人人97超碰国产公开结果 | 国产精品女人久久久 | 日韩在线一级 | 免费在线观看国产精品 | av三级av| 日韩在线第一 | 免费看搞黄视频网站 | 亚洲国产av精品毛片鲁大师 | 伊人六月| 一级黄色a视频 | 日韩欧美在线一区二区 | 西西444www大胆无视频 | 免费高清在线视频一区· | 欧美性免费| 四虎成人精品 | 毛片视频网址 | 日韩免费中文 | 国产九九热 | 国产精品毛片久久蜜 | 欧美天堂久久 | 在线中文字幕网站 | 99re国产视频 | 超碰人人做 | 国产精品高潮呻吟久久av无 | 久久人人爽人人爽人人 | 91爱爱网址 | 成年美女黄网站色大片免费看 | 日韩av视屏在线观看 | 人人狠狠综合久久亚洲 | 久久久久福利视频 | 久久免费视频在线观看30 | 91超碰在线播放 | 久久久国产成人 | 日本久久久久久久久 | 在线小视频你懂的 | 亚洲精品男人天堂 | 色综合久久88色综合天天人守婷 | 久久综合五月天 | 日韩av电影免费观看 | 91九色porny在线 | 伊人狠狠操 | 国产午夜精品一区 | 又黄又爽的视频在线观看网站 | 经典三级一区 | 丁香九月激情综合 | 亚洲成人动漫在线观看 | 激情综合网在线观看 | 国产精品精 | 日韩在线一二三区 | 亚洲高清视频在线观看 | www.久久久精品 | 亚洲国产成人久久综合 | 婷婷在线不卡 | 日韩最新在线 | 丝袜美腿亚洲 | 热久久这里只有精品 | 激情文学综合丁香 | 91av国产视频 | 亚洲视频在线免费看 | 欧美日韩在线免费观看视频 | 久久影院中文字幕 | 亚洲精品视 | 日韩在线视频不卡 | 久久久精品国产一区二区 | 中文字幕乱在线伦视频中文字幕乱码在线 | 色小说在线 | 国产女人40精品一区毛片视频 | 国产在线观看污片 | 久久久久国产一区二区 | 国产在线观看污片 | 国产亚洲精品bv在线观看 | av解说在线观看 | 日韩欧美一区二区三区视频 | 狠狠地操 | 日本黄网站 | 99热这里是精品 | 日韩网站一区二区 | 午夜精品久久久99热福利 | 很污的网站| 96精品在线| 午夜视频一区二区三区 | avav片| 伊人婷婷网 | 精品国产亚洲一区二区麻豆 | 91福利社在线观看 | 午夜久久久精品 | 欧美日韩二区在线 | 国产一级黄大片 | 中文字幕在线一区观看 | 久久成人久久 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 中文字幕视频免费观看 | 欧美精品中文在线免费观看 | 久草精品网 | 91免费国产在线观看 | 中文字幕一区二区三区在线观看 | 丁香在线观看完整电影视频 | 在线黄色av电影 | 麻豆国产视频下载 | 日韩精品一区二区在线观看 | 天天干天天操天天拍 | 久久久国产精品人人片99精片欧美一 | 中文字幕在线有码 | 婷婷香蕉 | 国产精品久久久久久久久久 | 中文字幕在线国产精品 | 欧美激情视频在线观看免费 | 国产成人av| 在线а√天堂中文官网 | 一级黄色大片在线观看 | 国产一区二区三区高清播放 | 午夜电影久久 | 欧美性大战 | 日韩欧美网址 | 西西4444www大胆无视频 | 久热色超碰| 最近2019年日本中文免费字幕 | 亚洲女人av| 久青草视频在线观看 | 西西444www大胆高清图片 | 精品免费一区二区三区 | 亚洲美女精品区人人人人 | 九九久久久久久久久激情 | 97免费视频在线播放 | 日本中文字幕一二区观 | 五月天激情视频在线观看 | 97理论电影 | 国产日韩欧美综合在线 | 久久久久女人精品毛片九一 | 国产精品视频内 | 在线小视频你懂得 | 日本精品久久久久中文字幕5 | 日本中文在线观看 | 日日夜夜网 | 91亚洲精品久久久蜜桃 | 玖玖精品在线 | 午夜av激情 | 国产免费xvideos视频入口 | 国产高清在线免费视频 | 欧美巨大荫蒂茸毛毛人妖 | av免费线看| 成人免费电影 | 伊人狠狠干| 国产高清视频在线免费观看 | 亚洲精选在线 | 国产日韩精品在线观看 | 国产精品视频地址 | 91在线观看高清 | 久久久久久免费视频 | 婷婷综合视频 | 成年人免费观看在线视频 | 欧亚久久 | 99国产在线观看 | 天天爽夜夜爽人人爽曰av | 伊人导航 | 亚洲丁香久久久 | 在线观看aaa | 天天操天天弄 | 欧美一级特黄aaaaaa大片在线观看 | 色久天| 成人在线免费观看视视频 | 中文字幕在线观看的网站 | av看片网址 | 日韩二三区 | 亚洲欧美国内爽妇网 | 日韩精品免费一线在线观看 | 久久69精品久久久久久久电影好 | 欧美综合在线视频 | 狠狠色噜噜狠狠狠 | 欧美精品在线一区 | 91精品国产网站 | 国产剧情一区二区在线观看 | 国内亚洲精品 | 美女视频黄是免费的 | 国产免费久久av | 婷婷色av| 国产视频二区三区 | 97国产精品 | zzijzzij亚洲日本少妇熟睡 | 日韩高清黄色 | 在线观看亚洲精品 | 91精品国产乱码久久桃 | 国产黄大片 | 蜜臀av性久久久久蜜臀av | 成人av影视在线 | 丰满少妇一级片 | 久久99精品视频 | 精品国产一区二区三区蜜臀 | 亚洲激情六月 | 中文字幕一区二区三区四区在线视频 | 亚洲一区二区三区在线看 | 美女网站在线播放 | 2018好看的中文在线观看 | 国产免费小视频 | 亚洲精品自在在线观看 | 国产性天天综合网 | 91亚洲国产 | 香蕉视频91| 国产一区国产二区在线观看 | 91麻豆精品91久久久久同性 | 久草爱 | 日韩免费在线观看 | 五月婷视频 | 日韩毛片在线播放 | 不卡av电影在线观看 | 最近中文字幕在线中文高清版 | 中文字幕91在线 | 免费a级黄色毛片 | 久操视频在线观看 | 久久人人爽视频 | 亚洲在线视频网站 | 欧美韩日视频 | 偷拍精品一区二区三区 | 日韩欧美视频在线观看免费 | 欧美精品九九99久久 | 国内视频在线观看 | 四虎永久免费在线观看 | 成人av高清 | 最新中文在线视频 | 九色精品免费永久在线 | 欧美午夜寂寞影院 | 欧美福利在线播放 | 91精品一区二区三区蜜臀 | 日韩高清无线码2023 | 在线观看 亚洲 | 九月婷婷人人澡人人添人人爽 | 国产精品中文字幕在线观看 | 91网免费看 | 国产精品女 | 亚洲免费高清视频 | 国产精品18久久久久久久 | 免费欧美精品 | 国产视频综合在线 | 国产精品k频道 | 成人app在线免费观看 | 制服丝袜一区二区 | 久久久久麻豆 | 成人国产精品入口 | 国产免费嫩草影院 | 在线a亚洲视频播放在线观看 | 99久久久国产精品免费99 | 国产丝袜网站 | 亚洲观看黄色网 | 久久天天躁夜夜躁狠狠85麻豆 | 在线观看午夜av | 国产一二三在线视频 | 激情久久影院 | 亚洲欧美日韩国产一区二区 | 国产资源av | 一区二区三区高清 | 亚洲 欧洲av | 日日夜夜av | 国产码电影 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 一级片视频免费观看 | 午夜男人影院 | 在线 你懂 | 天天操天天射天天爽 | 国产成人精品一区二区在线 | 懂色av一区二区三区蜜臀 | 色噜噜狠狠狠狠色综合 | 欧美日韩在线观看一区二区 | 中文字幕日本在线观看 | 国产高清第一页 | 97视频资源 | 免费视频区 | 免费看污污视频的网站 | 天天射天天搞 | 亚洲国产剧情av | 久久久久久高潮国产精品视 | 久草视频免费看 | 国产精品一区二区三区电影 | 国产91免费看| 中文字幕在线国产 | 热99在线视频 | 久久成人国产精品免费软件 | 天天插天天色 | 婷婷亚洲最大 | 久久婷婷一区二区三区 | 91福利试看| 伊人网av | 国产欧美精品在线观看 | 香蕉视频在线网站 | 天天综合成人 | 免费看黄视频 | 成人免费xyz网站 | 91亚洲精| 日韩亚洲在线 | 国产r级在线观看 | 欧美激情视频久久 | 国产一级久久久 | 黄色tv视频| 精品国产乱码久久久久久1区二区 | 久久国产成人午夜av影院宅 | 日韩免费电影一区二区 | 欧美色图亚洲图片 | 国产精品 999 | 在线观看视频一区二区三区 | 91在线精品一区二区 | 中文字幕av免费在线观看 | 国产护士hd高朝护士1 | 久久天天躁夜夜躁狠狠躁2022 | 国产成人免费精品 | 久久丁香网 | 天天操天天添 | 97超碰人人 | 国产精品99久久久久 | 久久久精品欧美一区二区免费 | 国产精品久久久久久五月尺 | 久久99九九99精品 | 97视频在线观看网址 | 久久综合九色综合97_ 久久久 | 日韩在线视频播放 | 精品国产123 | 大胆欧美gogo免费视频一二区 | 91免费视频黄 | 欧美成人精品欧美一级乱 | 国产在线观看av | 日本久久久影视 | 国产精品第一页在线观看 | 久久理论视频 | 97精品在线视频 | 亚洲区视频在线观看 | 亚洲国产无 | 久久综合一本 | 日韩av进入 | 亚洲在线视频观看 | 精品视频亚洲 | 天天操操操操操操 | 91精品久久久久久久91蜜桃 | 亚洲综合色av | 一区二区精| 一级黄网 | 精品国产一区二区三区四区在线观看 | 在线观看av国产 | av一区二区三区在线播放 | 亚洲精品午夜国产va久久成人 | 在线看岛国av | 亚一亚二国产专区 | 国产精品丝袜久久久久久久不卡 | 国产精品对白一区二区三区 | 久久久视频在线 | 91精品蜜桃 | 在线免费观看黄色 | 深爱激情五月网 | 欧美成人亚洲成人 | 色综合天天综合网国产成人网 | 国产精品视频永久免费播放 | 色a综合 | 国产精品区一区 | 91精彩视频在线观看 | 国产成人一区二区三区久久精品 | 国产精品正在播放 | 日韩欧美一区二区在线 | 精品国产综合区久久久久久 | 深夜福利视频一区二区 | 久久久国产毛片 | 久久免费毛片视频 | 很黄很污的视频网站 | 青青河边草免费直播 | av在线一级 | 91一区一区三区 | 成全免费观看视频 | 2019中文字幕第一页 | 久久艹久久 | 日韩性片 | 成人免费网站在线观看 | 亚洲欧美国产精品va在线观看 | 91久久国产综合精品女同国语 | 午夜精品区 | 91成人在线视频 | 国产精品区二区三区日本 | 久久免费激情视频 | 亚洲黄色区 | 探花视频在线版播放免费观看 | 亚洲欧洲av | 国产va饥渴难耐女保洁员在线观看 | 国产在线视频在线观看 | 精品视频久久久 | 国产手机在线精品 | 国产精品欧美久久 | 天天天天天天操 | 欧美一级黄大片 | 国产午夜三级一区二区三 | 久久黄页| 久久久久久久久久久福利 | 欧美色伊人 | 91视频观看免费 | 狠狠婷婷| www.com.黄| 中文字幕久久精品一区 | 免费在线播放黄色 | 亚洲欧美国内爽妇网 | 亚洲va男人天堂 | 91精品国自产在线偷拍蜜桃 | 一区二区三区精品在线 | 精品国产91亚洲一区二区三区www | 成人一区电影 | 国产69精品久久99的直播节目 | 日韩电影一区二区在线观看 | 黄色网在线播放 | 久久久久国产成人精品亚洲午夜 | 又湿又紧又大又爽a视频国产 | 日韩av在线高清 | 日韩精品久久久久久久电影竹菊 | 亚洲精品在线资源 | 成年人免费观看在线视频 | 激情视频国产 | 看av免费 | 婷婷激情五月 | 免费在线观看一区二区三区 | 日韩激情片在线观看 | 又黄又爽的视频在线观看网站 | 99精品视频观看 | 久久视频免费在线观看 | 人人盈棋牌 | www.com黄色| 天天综合导航 | 国产成人免费高清 | 五月婷婷六月综合 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产综合福利在线 | 久草免费在线观看视频 | 91精品老司机久久一区啪 | 日日干夜夜草 | 国产成人亚洲精品自产在线 | 天天色综合1 | 午夜精品一区二区国产 | 一区二区三区 亚洲 | 国模吧一区 | 成人免费 在线播放 | 激情网五月天 | 在线激情小视频 | 欧美极品久久 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲aⅴ一区二区三区 | 成片免费观看视频大全 | 99热日本| 国产精品九九久久99视频 | 国产中文字幕一区二区 | 西西444www高清大胆 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 五月天激情综合 | 98久久| 超碰99人人 | 丝袜美女在线观看 | 91成人短视频在线观看 | 亚洲激情一区二区三区 | 色婷婷六月天 | 西西4444www大胆视频 | 久久噜噜少妇网站 | 91黄色小视频 | 日韩在线 一区二区 | 综合激情久久 | 国产一区高清在线 | 免费在线电影网址大全 | 国产福利一区二区三区在线观看 | 91丨九色丨蝌蚪丰满 | 婷婷五月色综合 | 国产精品一区二区av影院萌芽 | 97小视频 | 99久久精品一区二区成人 | 精品国精品自拍自在线 | av色网站| 最近中文字幕国语免费高清6 | 久久久久人人 | 成人在线播放免费观看 | 成人a视频片观看免费 | 亚洲欧洲国产日韩精品 | 香蕉视频在线视频 | 麻花天美星空视频 | 国产一卡久久电影永久 | 久久爽久久爽久久av东京爽 | 高清精品久久 | 免费久草视频 | 久久综合久色欧美综合狠狠 | 中文字幕在线观看第一区 | 欧美亚洲国产精品久久高清浪潮 | 日韩高清不卡在线 | 手机在线看a | 天天干夜夜爽 | 97视频人人 | 亚洲黄色免费 | 91成年人网站| av黄色av| 91中文字幕 | 免费日韩 精品中文字幕视频在线 | 成人h在线播放 | 亚洲成年人免费网站 | 中文在线资源 | 免费日韩高清 | 精品在线视频播放 | 99久久www免费| 精品一区二区三区四区在线 | 国产精品久久久久久久久久免费 | 免费在线观看一区二区三区 | 日韩在线免费 | 香蕉在线视频播放网站 | 97超碰人人模人人人爽人人爱 | 狠狠色噜噜狠狠狠狠 | 国产手机视频在线 | 91视视频在线直接观看在线看网页在线看 | 久久精品毛片基地 | 在线电影 一区 | 中文字幕在线专区 | 91精品国产综合久久婷婷香蕉 | 在线免费av电影 | 精品国产一区二区三区久久影院 | 精品一区二区视频 | 国产精品99久久久久久人免费 | 九九热久久久 | 国产一区欧美在线 | 亚洲激情精品 | 91漂亮少妇露脸在线播放 | 香蕉视频在线观看免费 | 国产色妞影院wwwxxx | 9797在线看片亚洲精品 | 一区三区视频在线观看 | 成人9ⅰ免费影视网站 | 五月婷婷色播 | 亚洲精品乱码白浆高清久久久久久 | 国产麻豆精品传媒av国产下载 | 国产xxxx做受性欧美88 | 久久国产免 | 黄色av一区| 97精品国产97久久久久久久久久久久 | 在线观看免费国产小视频 | 欧美日一级片 | 亚洲欧美日韩一区二区三区在线观看 | 天堂资源在线观看视频 | 久久久影院一区二区三区 | 欧美aa一级 | 色婷婷激情网 | 久久国产视屏 | www.夜夜骑.com | 在线视频在线观看 | 国产精品免费一区二区三区 | 97超碰在线人人 | 在线国产欧美 | 国产精品麻豆99久久久久久 | 日本精品免费看 | 在线视频在线观看 | 午夜精品久久久久久久99 | av超碰免费在线 | 中文在线a天堂 | 99久久精品免费 | 成人91在线| 综合天天久久 | 久久国产视屏 | 丁香激情视频 | 久久久久久久久久久黄色 | 午夜精品电影一区二区在线 | 在线免费观看视频a | 婷婷综合导航 | www.久久精品视频 | 久青草影院 | 午夜精品久久久久久久爽 |