久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django如何在不停機(jī)的情況下創(chuàng)建索引

瀏覽:177日期:2024-09-24 10:39:38

該框架在管理數(shù)據(jù)庫(kù)更改方面非常強(qiáng)大和有用,但是該框架提供的靈活性受到了一定的限制。為了理解Django遷移的局限性,你將處理一個(gè)眾所周知的問題:在不停機(jī)的情況下,在Django中創(chuàng)建一個(gè)索引。

在本教程中,你將學(xué)習(xí):

Django如何以及何時(shí)生成新的遷移;

如何檢查Django生成的執(zhí)行遷移的命令;

如何安全地修改遷移以滿足你的需求。

本中級(jí)教程是為已經(jīng)熟悉Django遷移(Migration)的讀者設(shè)計(jì)的。

在Django遷移中創(chuàng)建索引的問題

當(dāng)應(yīng)用程序存儲(chǔ)的數(shù)據(jù)增長(zhǎng)時(shí),通常需要進(jìn)行的一個(gè)常見更改就是添加索引。索引可以用來加快查詢速度,并使你的應(yīng)用程序運(yùn)行和響應(yīng)更快。

在大多數(shù)數(shù)據(jù)庫(kù)中,添加索引時(shí)需要對(duì)表使用獨(dú)占鎖。在創(chuàng)建索引時(shí),獨(dú)占鎖會(huì)防止數(shù)據(jù)修改(DML)操作,如UPDATE,INSERT,和DELETE。

數(shù)據(jù)庫(kù)在執(zhí)行某些操作時(shí)會(huì)隱式地獲取鎖。例如,當(dāng)用一個(gè)戶登錄到你的應(yīng)用程序時(shí),Django將更新auth_user表中的last_login字段。要執(zhí)行更新,數(shù)據(jù)庫(kù)首先必須在這個(gè)行上獲得一個(gè)鎖。如果該行當(dāng)前被另一個(gè)連接鎖定,那么你會(huì)得到一個(gè)數(shù)據(jù)庫(kù)異常。

當(dāng)需要在遷移期間保持系統(tǒng)可用時(shí),鎖定表可能會(huì)造成問題。表越大,創(chuàng)建索引所需的時(shí)間就越長(zhǎng)。創(chuàng)建索引所需的時(shí)間越長(zhǎng),系統(tǒng)不可用或?qū)τ脩魺o響應(yīng)的時(shí)間就越長(zhǎng)。

一些數(shù)據(jù)庫(kù)供應(yīng)商提供了一種創(chuàng)建索引而不鎖定表的方法。例如,要在PostgreSQL中創(chuàng)建索引而不鎖定表,你可以使用CONCURRENTLY關(guān)鍵字:

Django如何在不停機(jī)的情況下創(chuàng)建索引

在Oracle中,有一個(gè)ONLINE選項(xiàng)允許在創(chuàng)建索引時(shí)對(duì)表執(zhí)行DML操作:

Django如何在不停機(jī)的情況下創(chuàng)建索引

在生成遷移時(shí),Django不會(huì)使用這些特殊的關(guān)鍵字。按原樣運(yùn)行遷移將使數(shù)據(jù)庫(kù)獲得表上的獨(dú)占鎖,并在創(chuàng)建索引時(shí)防止DML操作。

并發(fā)創(chuàng)建索引有一些注意事項(xiàng)。提前了解特定于數(shù)據(jù)庫(kù)后端的問題是很重要的。例如,PostgreSQL中的一個(gè)警告是并發(fā)創(chuàng)建索引需要更長(zhǎng)的時(shí)間,因?yàn)樗枰M(jìn)行額外的表掃描。

在本教程中,你將使用Django遷移在一個(gè)大型表上創(chuàng)建索引,而不會(huì)導(dǎo)致任何停機(jī)。

注意:要學(xué)習(xí)本教程,建議你使用PostgreSQL后端,Django2.x和python3。

也可以使用其他數(shù)據(jù)庫(kù)后端。在使用PostgreSQL特有的SQL特性的地方,更改SQL以匹配你的數(shù)據(jù)庫(kù)后端。

設(shè)置

你將在一個(gè)名為app的應(yīng)用中使用一個(gè)虛構(gòu)的Sale模型。在現(xiàn)實(shí)生活中,Sale等模型是數(shù)據(jù)庫(kù)中的主要表,它們通常會(huì)非常大,并存儲(chǔ)大量數(shù)據(jù):

Django如何在不停機(jī)的情況下創(chuàng)建索引

創(chuàng)建表,生成初始遷移并應(yīng)用它:

Django如何在不停機(jī)的情況下創(chuàng)建索引

一段時(shí)間之后,sales表變得非常大,用戶開始抱怨速度太慢。在監(jiān)視數(shù)據(jù)庫(kù)時(shí),你注意到許多查詢使用sold_at列。為了加快速度,你決定在列上需要一個(gè)索引。

要在sold_at上添加索引,你需要對(duì)模型進(jìn)行以下更改:

Django如何在不停機(jī)的情況下創(chuàng)建索引

如果按原樣運(yùn)行這個(gè)遷移,那么Django將在表上創(chuàng)建索引,并且它將被鎖定,直到索引完成。在非常大的表上創(chuàng)建索引可能需要一段時(shí)間,你希望避免停機(jī)。

在具有小數(shù)據(jù)集和很少連接的本地開發(fā)環(huán)境中,這種遷移可能是瞬間完成的。然而,對(duì)于具有許多并發(fā)連接的大型數(shù)據(jù)集,獲取鎖并創(chuàng)建索引可能需要一段時(shí)間。

在接下來的步驟中,你將修改Django創(chuàng)建的遷移,以便在不引起任何停機(jī)的情況下創(chuàng)建索引。

偽造遷移

第一種方法是手動(dòng)創(chuàng)建索引。你將生成遷移,但實(shí)際上并不會(huì)讓Django應(yīng)用它。相反,你將在數(shù)據(jù)庫(kù)中手動(dòng)運(yùn)行SQL,然后讓Django認(rèn)為遷移已經(jīng)完成。

首先,生成遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

使用sqlmigrate命令來查看Django將用于執(zhí)行此遷移的SQL:

Django如何在不停機(jī)的情況下創(chuàng)建索引

你希望在不鎖定表的情況下創(chuàng)建索引,因此你需要修改命令。添加CONCURRENTLY關(guān)鍵字并在數(shù)據(jù)庫(kù)中執(zhí)行:

Django如何在不停機(jī)的情況下創(chuàng)建索引

注意,你在執(zhí)行命令的過程中沒有BEGIN和COMMIT部分。省略這些關(guān)鍵字會(huì)在沒有數(shù)據(jù)庫(kù)事務(wù)的情況下執(zhí)行命令。我們將在本文后面討論數(shù)據(jù)庫(kù)事務(wù)。

執(zhí)行命令后,如果你嘗試應(yīng)用遷移,會(huì)出現(xiàn)以下錯(cuò)誤:

Django如何在不停機(jī)的情況下創(chuàng)建索引

Django會(huì)提示你該索引已經(jīng)存在,因此無法繼續(xù)遷移。你剛剛在數(shù)據(jù)庫(kù)中直接創(chuàng)建了索引,所以現(xiàn)在需要讓Django認(rèn)為已經(jīng)應(yīng)用了遷移。

如何偽造一個(gè)遷移

Django提供了一種內(nèi)置的方法,可以將遷移標(biāo)記為已執(zhí)行,而不需要實(shí)際執(zhí)行它們。要使用這個(gè)選項(xiàng),你需要在應(yīng)用遷移時(shí)設(shè)置—fake標(biāo)志:

Django如何在不停機(jī)的情況下創(chuàng)建索引

這一次Django沒有拋出錯(cuò)誤。實(shí)際上,Django并沒有真正應(yīng)用任何遷移。它只是將其標(biāo)記為已執(zhí)行(或FAKED)。

以下是在偽造遷移時(shí)需要考慮的一些問題:

手動(dòng)命令必須與Django生成的SQL等價(jià): 你需要確保所執(zhí)行的命令與Django生成的SQL等價(jià)。使用sqlmigrate來生成SQL命令。如果命令不匹配,則可能導(dǎo)致數(shù)據(jù)庫(kù)和模型狀態(tài)之間的不一致。

其他未應(yīng)用的遷移也將被偽造:當(dāng)你有多個(gè)未應(yīng)用的遷移時(shí),它們都將被偽造。在應(yīng)用遷移之前,重要的是確保只有你想要偽造的遷移沒有應(yīng)用。否則,你可能會(huì)得到不一致的結(jié)果。另一個(gè)選項(xiàng)是指定要偽造的確切遷移。

需要直接訪問數(shù)據(jù)庫(kù):你需要在數(shù)據(jù)庫(kù)中運(yùn)行SQL命令,這有時(shí)也不是必需的。此外,在生產(chǎn)數(shù)據(jù)庫(kù)中直接執(zhí)行命令是危險(xiǎn)的,應(yīng)該盡可能避免。

自動(dòng)化部署流程可能需要調(diào)整:如果你自動(dòng)化了部署流程(使用CI、CD或其他自動(dòng)化工具),那么你可能需要將流程更改為偽遷移。這并不總是可取的。

清理

在繼續(xù)下一節(jié)之前,你需要將數(shù)據(jù)庫(kù)恢復(fù)到它在初始遷移之后的狀態(tài)。要做到這一點(diǎn),請(qǐng)遷移回初始遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

Django沒有應(yīng)用在第二次遷移中所做的更改,所以現(xiàn)在可以安全地刪除文件:

Django如何在不停機(jī)的情況下創(chuàng)建索引

為了確保你做的一切都是正確的,檢查一下遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

應(yīng)用了初始遷移之后,就沒有未應(yīng)用的遷移了。

在遷移(Migration)中執(zhí)行原始SQL

在上一節(jié)中,你直接在數(shù)據(jù)庫(kù)中執(zhí)行SQL并偽造遷移。這樣就完成了任務(wù),但是還有一個(gè)更好的解決方案。

Django提供了一種使用RunSQL在遷移中執(zhí)行原始SQL的方法。我們來嘗試使用它代替直接在數(shù)據(jù)庫(kù)中執(zhí)行命令。

首先,生成一個(gè)新的空遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

接下來,編輯遷移文件并添加RunSQL操作:

Django如何在不停機(jī)的情況下創(chuàng)建索引

當(dāng)你運(yùn)行遷移時(shí),你將獲得以下輸出:

Django如何在不停機(jī)的情況下創(chuàng)建索引

這看起來不錯(cuò),但有一個(gè)問題。我們?cè)俅蝸韲L試生成遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

Django再次生成了相同的遷移。為什么會(huì)這樣?

清理

在回答這個(gè)問題之前,你需要清理并撤消對(duì)數(shù)據(jù)庫(kù)所做的更改。首先刪除最后一次遷移。它沒有被應(yīng)用,所以可以安全刪除:

Django如何在不停機(jī)的情況下創(chuàng)建索引

接下來,列出app應(yīng)用程序的遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

第三次遷移已經(jīng)結(jié)束,但是只應(yīng)用了第二次遷移。你希望回到初始遷移之后的狀態(tài)。試著像你在上一節(jié)所做的那樣遷移回初始遷移狀態(tài):

Django如何在不停機(jī)的情況下創(chuàng)建索引

Django無法進(jìn)行逆向遷移。

逆向遷移操作

要進(jìn)行一次逆向遷移,Django會(huì)對(duì)每個(gè)操作執(zhí)行相反的操作。在本例中,添加索引的反面是刪除索引。正如你已經(jīng)看到的,當(dāng)一個(gè)遷移是可逆的時(shí),你可以取消應(yīng)用它。就像你可以在Git中使用checkout一樣,如果你對(duì)較早的遷移執(zhí)行了migrate命令,你可以進(jìn)行逆向遷移。

許多內(nèi)置遷移操作已經(jīng)定義了反向操作。例如,添加字段的反向操作是刪除對(duì)應(yīng)的列,創(chuàng)建模型的反向操作是刪除相應(yīng)的表。

有些遷移操作是不可逆的。例如,刪除字段或刪除模型沒有反向操作,因?yàn)橐坏?yīng)用了遷移,數(shù)據(jù)就會(huì)消失。

在上一節(jié)中,你使用了RunSQL操作。當(dāng)你試圖進(jìn)行反向遷移時(shí),遇到了一個(gè)錯(cuò)誤。根據(jù)錯(cuò)誤提示,遷移中的一個(gè)操作不能逆轉(zhuǎn)。Django默認(rèn)情況下無法反轉(zhuǎn)原始SQL。因?yàn)镈jango不知道該操作執(zhí)行了什么,所以它不能自動(dòng)生成相反的操作。

如何使遷移可逆

要使一個(gè)遷移是可逆的,遷移中的所有操作都必須是可逆的。只逆轉(zhuǎn)遷移的一部分是不可能的,因此一個(gè)單一的不可逆操作將使整個(gè)遷移不可逆。

要使RunSQL操作可逆,你必須提供在操作反轉(zhuǎn)時(shí)執(zhí)行的SQL。反向SQL在reverse_sql參數(shù)中提供。

添加索引的相反操作是刪除索引。要使你的遷移可逆,請(qǐng)?zhí)峁﹔everse_sql參數(shù)來刪除索引:

Django如何在不停機(jī)的情況下創(chuàng)建索引

現(xiàn)在試著反轉(zhuǎn)遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

我們對(duì)第二次遷移進(jìn)行了反轉(zhuǎn),Django刪除了索引。現(xiàn)在可以安全地刪除遷移文件了:

Django如何在不停機(jī)的情況下創(chuàng)建索引

提供reverse_sql總是一個(gè)好主意。在反轉(zhuǎn)原始SQL操作而不需要其他任何操作的情況下,你可以使用特殊的哨兵語(yǔ)句migrations.

RunSQL.noop將該操作標(biāo)記為可逆操作。

Django如何在不停機(jī)的情況下創(chuàng)建索引

理解模型狀態(tài)和數(shù)據(jù)庫(kù)狀態(tài)

在你之前嘗試使用RunSQL手動(dòng)創(chuàng)建索引時(shí),Django一次又一次地生成了相同的遷移,盡管索引是在數(shù)據(jù)庫(kù)中創(chuàng)建的。要理解Django為什么這樣做,你首先需要理解Django如何決定何時(shí)生成新的遷移。

當(dāng)Django生成一個(gè)新的遷移時(shí)

在生成和應(yīng)用遷移的過程中,Django同步數(shù)據(jù)庫(kù)狀態(tài)和模型狀態(tài)。例如,當(dāng)你向模型添加字段時(shí),Django會(huì)向表添加一列。當(dāng)你從模型中刪除字段時(shí),Django將從表中刪除列。

為了在模型和數(shù)據(jù)庫(kù)之間同步,Django擁有一個(gè)表示模型的狀態(tài)。為了使數(shù)據(jù)庫(kù)與模型同步,Django會(huì)生成遷移操作。遷移操作轉(zhuǎn)換為可以在數(shù)據(jù)庫(kù)中執(zhí)行的特定供應(yīng)商的SQL。當(dāng)所有遷移操作都執(zhí)行后,數(shù)據(jù)庫(kù)和模型應(yīng)該是一致的。

為了獲得數(shù)據(jù)庫(kù)的狀態(tài),Django聚合了所有過去遷移的操作。當(dāng)遷移的聚合狀態(tài)與模型的狀態(tài)不一致時(shí),Django會(huì)生成一個(gè)新的遷移。

在前面的例子中,你使用原始SQL創(chuàng)建了索引。Django不知道你創(chuàng)建了索引,因?yàn)槟銢]有使用熟悉的遷移操作。

當(dāng)Django聚合所有遷移并將它們與模型的狀態(tài)進(jìn)行比較時(shí),它發(fā)現(xiàn)缺少一個(gè)索引。這就是為什么即使你手動(dòng)創(chuàng)建了索引,Django仍然認(rèn)為它是缺失的,并為它生成了一個(gè)新的遷移。

如何在遷移中分離數(shù)據(jù)庫(kù)和狀態(tài)

由于Django無法按照你希望的方式創(chuàng)建索引,所以你希望提供自己的SQL,但仍然要讓Django知道你已經(jīng)創(chuàng)建了索引。

換句話說,你需要在數(shù)據(jù)庫(kù)中執(zhí)行一些操作,并為Django提供遷移操作來同步其內(nèi)部狀態(tài)。為此,Django為我們提供了一個(gè)名為 SeparateDatabaseAndState的特殊遷移操作。這項(xiàng)操作并不為人所知,應(yīng)該留到像這種特殊情況下使用。

編輯遷移要比從頭開始寫容易的多,因此,首先以通常的方式生成一個(gè)遷移:

Django如何在不停機(jī)的情況下創(chuàng)建索引

這是Django生成的遷移內(nèi)容,和之前一樣:

Django如何在不停機(jī)的情況下創(chuàng)建索引

Django在字段sold_at上生成了一個(gè)AlterField操作。該操作會(huì)創(chuàng)建一個(gè)索引并更新狀態(tài)。我們希望保留這個(gè)操作,但是在數(shù)據(jù)庫(kù)中提供一個(gè)不同的命令來執(zhí)行。

同樣,要獲得該命令,請(qǐng)使用Django生成的SQL:

Django如何在不停機(jī)的情況下創(chuàng)建索引

在合適的地方添加CONCURRENTKY關(guān)鍵字:

Django如何在不停機(jī)的情況下創(chuàng)建索引

接著,編輯該遷移文件,并使用SeparateDatabaseAndState來提供你修改過的SQL命令并執(zhí)行:

Django如何在不停機(jī)的情況下創(chuàng)建索引

遷移操作separate atabaseandstate接受2個(gè)操作列表:

1.state_operations是應(yīng)用于內(nèi)部模型狀態(tài)的操作。它們不會(huì)影響數(shù)據(jù)庫(kù)。

2.database_operations是應(yīng)用于數(shù)據(jù)庫(kù)的操作。

你在state_operations中保留了Django生成的原始操作。當(dāng)使用SeparateDatabaseAndState時(shí),這是你通常想要做的,注意向字段提供db_index=True參數(shù)。這個(gè)遷移操作將讓Django知道字段上有一個(gè)索引。

你使用了Django生成的SQL并添加了CONCURRENTLY關(guān)鍵字。你使用特殊的操作RunSQL來在遷移中執(zhí)行原始SQL。

如果你試圖運(yùn)行此遷移,你將獲得以下輸出:

Django如何在不停機(jī)的情況下創(chuàng)建索引

非原子遷移

在SQL中,CREATE、DROP、ALTER和TRUNCATE操作稱為數(shù)據(jù)定義語(yǔ)言(Data Definition Language, DDL)。在支持事務(wù)性DDL的數(shù)據(jù)庫(kù)中,比如PostgreSQL,Django默認(rèn)會(huì)在數(shù)據(jù)庫(kù)事務(wù)中執(zhí)行遷移。然而,根據(jù)上面的錯(cuò)誤,PostgreSQL不能在事務(wù)塊中并發(fā)地創(chuàng)建索引。

為了能夠在遷移中并發(fā)地創(chuàng)建索引,你需要告訴Django不要在數(shù)據(jù)庫(kù)事務(wù)中執(zhí)行遷移。為此,通過將atomic設(shè)置為False,將遷移標(biāo)記為非原子(non-atomic):

Django如何在不停機(jī)的情況下創(chuàng)建索引

將遷移標(biāo)記為非原子之后,你可以運(yùn)行遷移了:

Django如何在不停機(jī)的情況下創(chuàng)建索引

你只是執(zhí)行了遷移,并沒有引起任何停機(jī)。

下面是使用SeparateDatabaseAndState時(shí)需要考慮的一些問題

數(shù)據(jù)庫(kù)操作必須與狀態(tài)操作等價(jià):數(shù)據(jù)庫(kù)和模型狀態(tài)之間的不一致可能會(huì)造成很多麻煩。一個(gè)好的開始是保留Django在 state_operations中生成的操作和編輯sqlmigrate的輸出并在database_operations中使用。

非原子遷移在發(fā)生錯(cuò)誤時(shí)不能回滾:如果在遷移過程中出現(xiàn)錯(cuò)誤,則無法回滾。你必須要么回滾遷移,要么手動(dòng)完成它。將在非原子遷移中執(zhí)行的操作保持在最少是一個(gè)好主意。如果你在遷移中有其他操作,請(qǐng)將它們移到新的遷移中。

遷移可能是特定于供應(yīng)商的:Django生成的SQL特定于項(xiàng)目中使用的數(shù)據(jù)庫(kù)后端。它可能會(huì)在其他數(shù)據(jù)庫(kù)后端運(yùn)行,但這并不能保證。如果你需要支持多個(gè)數(shù)據(jù)庫(kù)后端,則需要對(duì)這種方法進(jìn)行一些調(diào)整。

結(jié)論:

你從一個(gè)大型的數(shù)據(jù)表和一個(gè)問題開始了本教程。你想讓你的應(yīng)用程序?qū)τ脩魜碚f更快,你想在不引起應(yīng)用程序任何停機(jī)的情況下做到這一點(diǎn)。

在本教程的最后,你嘗試生成并安全地修改了一個(gè)Django遷移來實(shí)現(xiàn)這一目標(biāo)。在此過程中,你遇到了不同的問題,并使用migration 框架提供的內(nèi)置工具設(shè)法解決了這些問題。

在本教程中,你學(xué)習(xí)了以下內(nèi)容:

Django遷移在內(nèi)部如何使用模型和數(shù)據(jù)庫(kù)狀態(tài)進(jìn)行工作,以及何時(shí)生成新的遷移; 如何使用RunSQL操作在遷移中執(zhí)行自定義的SQL; 什么是可逆遷移,以及如何使RunSQL操作可逆; 什么是原子遷移,以及如何根據(jù)需要更改默認(rèn)行為; 如何安全地在Django中執(zhí)行復(fù)雜的遷移。

模型與數(shù)據(jù)庫(kù)狀態(tài)的分離是一個(gè)重要的概念。一旦你理解了它,以及知道如何使用它,你就可以突破內(nèi)置遷移操作的許多限制。我想到的一些用例包括添加已經(jīng)在數(shù)據(jù)庫(kù)中創(chuàng)建的索引,以及為DDL命令提供特定的服務(wù)商參數(shù)。

到此這篇關(guān)于Django如何在不停機(jī)的情況下創(chuàng)建索引的文章就介紹到這了,更多相關(guān)不停機(jī)狀態(tài)下使用Django創(chuàng)建索引內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 欧美视频在线观看不卡 | 色天天久久 | 亚洲性网| 国产精品久久久久久亚洲调教 | 精久久久 | 91麻豆精品国产91久久久资源速度 | 99热影院| 免费在线看a | 91精品电影| 日本一区二区三区四区 | 成人视屏在线观看 | 欧美激情网 | www.日韩.com| 黄网免费 | 亚洲精品久久久久久下一站 | 亚洲国产精久久久久久久 | 欧美日韩一区精品 | 婷婷成人在线 | 亚洲国产成人av好男人在线观看 | 成人在线免费观看 | 欧美精品国产精品 | 一区二区三区自拍 | 午夜影院在线 | 国产免费亚洲 | 久久国产精品毛片 | 99亚洲视频 | 91精品福利 | 亚洲精品一区二区三区蜜桃久 | 亚洲国产欧美日韩 | 亚洲成人免费在线 | 91色在线观看 | 精品毛片 | 欧美日韩精品一二区 | www.国产高清| 国产高清在线精品 | 国产激情视频在线观看 | 国产91精选 | 五月婷婷在线观看视频 | 在线视频 亚洲 | 国产精品久久久久久久竹霞 | 国产精品国色综合久久 | 久久免费精品视频 | 免费在线黄 | 成人永久免费视频 | 浴室洗澡偷拍一区二区 | 国产精品7 | 少妇看av一二三区 | 亚洲欧美日韩国产 | 久久久久久久精 | 成人免费av | 亚洲欧美另类久久久精品2019 | 色就是色网站 | 国内精品久久精品 | 欧美国产精品一区 | 久久手机免费视频 | 国产精品久久久久久久久久久免费看 | 欧美日韩国产综合网 | 国产依人在线 | 奇米影视四色777me | 亚洲一区二区三区免费在线观看 | 中文字幕日韩在线 | 中文字字幕在线观看 | 日韩在线中文字幕视频 | 国产欧美日韩精品在线 | 欧洲一级毛片 | 婷婷综合 | 精品国产一区二区三区久久久蜜月 | 天天干天天骑 | 美女网站视频免费黄 | 亚洲精品二区 | 视频一区二区三区中文字幕 | 亚洲久视频 | 另类二区| 亚洲一区中文字幕在线观看 | 视频一区二区三区中文字幕 | 国产色| 亚洲国产精久久久久久久 | 99久热在线精品视频观看 | 亚洲欧洲精品成人久久奇米网 | 免费在线观看一区二区 | 日韩精品一区二区三区在线观看 | 尹人成人 | 亚洲九九九| 国产免费一区二区三区最新不卡 | 一级一级黄色片 | 久久久精品一区二区三区 | 久久久久久91香蕉国产 | 一级做a| japanhd熟睡侵犯 | 国产一区国产二区在线观看 | 日本 欧美 国产 | 99久久精品免费 | 搜索黄色毛片 | 国产精品久久久久久久久免费 | 国产综合久久 | 国产男女免费视频 | 亚州成人 | 精品欧美乱码久久久久久 | 中出片 | 免费视频一区 | 亚洲97色| 北条麻妃一区二区三区在线观看 | 99九九久久| 亚洲精品免费观看 | 毛片在线视频 | 欧美日韩国产欧美 | 欧美一区二区三区视频 | 欧美 日韩 国产 一区 | 秋霞电影院午夜伦 | 一级全黄性色生活片 | 精品久久久久久久久久久 | 国产日韩欧美视频 | 日韩一区二区在线电影 | 日本阿v视频高清在线中文 中文二区 | 好看的一级毛片 | 色www精品视频在线观看 | 国产精品久久久久久福利一牛影视 | 在线国产一区二区 | 国产区视频在线观看 | 国产精品久久久久久久久久 | 日韩在线观看精品 | 欧美日韩视频 | 看av网站 | 一区二区三区免费 | 伊人一二三区 | 日韩精品一区二区三区四区五区 | 久久综合久久久 | 91精品国产乱码久久久久久久久 | 精品影院 | 国产一区二区久久 | 日本成人中文字幕在线观看 | 久久久精品综合 | 日韩在线播放欧美字幕 | 在线视频 欧美日韩 | 久久久久久久一区 | 欧美在线视频网 | 天天艹夜夜艹 | 91成人短视频在线观看 | 女人夜夜春高潮爽av片 | 一区二区三区国产 | 国产精品免费一区 | 日韩av在线一区二区三区 | 国产视频久久久久久久 | 天堂精品 | 国产精品成人一区二区三区夜夜夜 | 91短视频版在线观看免费大全 | 日韩成人在线视频 | 成人精品一区二区 | 日韩视频在线观看一区二区 | aa级毛片毛片免费观看久 | 午夜影院a | 中文字幕在线第二页 | 成人不卡 | 无码日韩精品一区二区免费 | 视频一区 日韩 | 久视频在线观看 | 人人干人人看 | 一级全毛片 | 成人免毛片 | 久久九九国产精品 | 伊人影院在线观看 | 欧美理伦片在线播放 | 99精品国产在热久久 | 欧美一区二区久久 | 日韩小视频网站 | 欧美专区中文字幕 | 日韩精品区 | 亚洲视频综合 | 亚洲一区二区视频在线播放 | 久久伊人成人网 | 欧美一级黄视频 | 成人美女免费网站视频 | 日韩激情欧美 | 日本在线视频一区 | 全免一级毛片 | 日韩中文字幕一区二区 | 国产在线高清视频 | 精品www| 日本不卡高字幕在线2019 | 久久天堂 | 操操操夜夜操 | 欧美最猛性xxxxx亚洲精品 | 日韩一日 | 亚洲精品网址 | 国产一区二区视频免费看 | 国内在线精品 | 福利视频网址导航 | 亚洲国产精品精华液网站 | 欧美日韩不卡 | 在线看91| 成年人免费看片 | 亚洲免费视频一区二区 | 在线观看av国产一区二区 | 亚洲国产精品一区二区三区 | 日韩精品中文字幕在线播放 | 亚洲精品视频在线观看免费视频 | 亚洲人成电影网 | 精品免费| 国产日韩精品一区二区在线观看播放 | 色接久久| 91精品一区二区三区久久久久久 | 亚洲国产精品99久久久久久久久 | 免费精品视频 | 97久久香蕉国产线看观看 | 久久成人国产精品 | 四虎影院免费看 | 欧美激情一区二区三区 | 欧美日韩视频一区二区 | 日韩中文字幕a | 女男羞羞视频网站免费 | 国产成人高清视频 | 亚洲日韩中文字幕 | 韩国一区二区视频 | 精品国产乱码久久久久久久软件 | 在线看片福利 | 精品日韩视频 | 中文字幕 视频一区 | 亚洲精品网址 | 在线成人亚洲 | 毛片在线免费 | 亚洲视频在线免费观看 | 精品国产一区二区三区久久久蜜臀 | 成人精品 | 亚洲国产精品18久久 | 欧美一级毛片免费观看 | 成人精品鲁一区一区二区 | 午夜精品一区二区三区在线播放 | 久久av综合网 | 久国产| 欧美精品在线一区二区三区 | 中文字幕在线免费看 | 黄a免费| 91国偷自产一区二区三区亲奶 | 黄色一级大片在线免费看产 | 久久久久久久久国产精品 | 99视频免费 | 成人午夜影院 | 欧美国产日韩一区 | 国产高清精品一区 | 91精品国产综合久久久久久漫画 | 精品影院| 久久久久久综合 | 亚洲青涩在线 | 中文字幕在线观看一区二区三区 | 瑟瑟视频在线看 | 国产精品久久久久久久久免费桃花 | 成人在线视频免费观看 | 国产精品夜夜春夜夜爽久久电影 | 欧美精品免费在线观看 | 亚洲一区视频在线 | 99国内精品久久久久久久 | 一区二区精品视频 | 国产韩国精品一区二区三区 | 天天久久 | 羞羞视频免费观看网站 | 亚洲另类视频 | 欧美激情视频一区二区三区在线播放 | 国产超碰人人爽人人做人人爱 | 一区不卡 | 日本男人的天堂 | 波多野吉衣网站 | 亚洲一区成人 | 开操网 | 91在线观看视频 | 久久艹久久 | av片免费看 | 国内精品视频一区二区三区八戒 | 五月天在线婷婷 | 黄频免费在线观看 | 久久精品欧美一区二区三区麻豆 | 亚洲一区二区三区在线免费观看 | 亚洲国产精品成人无久久精品 | 欧美精品入口蜜桃 | 久久久影视 | 在线观看91 | 华人黄网站大全 | 国产美女网站视频 | 久久激情五月丁香伊人 | 亚洲一区免费视频 | 成人亚洲精品久久久久软件 | 久久精品国产一区 | 日韩免费网站 | 国产精品原创av | 卡通动漫第一页 | 亚洲情欲网 | 久久久xxx | 亚洲aⅴ天堂av在线电影软件 | 精品久久久久久久久久久久 | 91精品国产乱码久久久久久久久 | 特黄视频| 日韩一区二区三区在线播放 | 国产欧美精品区一区二区三区 | 在线一级电影 | 免费午夜电影 | 国产在视频一区二区三区吞精 | 亚洲欧洲无码一区二区三区 | 午夜精品久久久久久久白皮肤 | 精品一区二区久久久久久久网站 | 国产高清久久久 | 1000部羞羞视频在线看视频 | 天天草天天插 | 一区网站 | 一级片在线观看 | 电家庭影院午夜 | 91免费观看| 夜夜艹| 黑人精品xxx一区一二区 | 搞黄视频在线观看 | 国产成人精品在线 | 国产另类一区 | 99影视| 亚洲一区二区免费视频 | 国产精品免费一区二区 | 久久狠狠 | 青青久久久| 精品免费久久久久久久苍 | 99免费在线观看视频 | 一级黄色片看看 | 一区二区蜜桃 | 91精品国产99 | 天天av网| 美女逼网站 | 在线日韩中文字幕 | 欧美日韩国产精品久久久久 | 一区二区三区亚洲 | 精品国产髙清在线看国产毛片 | 妞干网国产| 亚洲美女视频一区二区三区 | 亚洲视频在线观看一区二区三区 | 天天操天天干天天 | 激情一区 | 日本免费电影一区 | 成人激情视频在线 | 日日爱夜夜操 | 成人亚洲网站 | 国产精品久久久久久一区二区三区 | 秋霞电影院午夜伦 | 久久久婷 | 日韩精品1区2区 | 成人黄色一级网站 | 国产亚洲精品精品国产亚洲综合 | 国产人免费人成免费视频 | 欧美1314| а天堂中文最新一区二区三区 | 五月婷亚洲 | 人人爱干 | 欧美a区| 在线观看一区 | 国产婷婷在线观看 | 一色屋精品久久久久久久久久 | 欧美另类专区 | 精国产品一区二区三区 | 国产伦精品一区二区三区在线 | 亚洲黄色成人 | 天天操妹子| 欧美日韩国产一区二区三区 | 国产欧美一区二区三区在线看 | 在线观看国产精品一区 | 国产在线观看高清 | 午夜精品久久久久 | jizz欧美最大 | 一区二区三区不卡视频 | 亚洲精品三级 | 国产欧美日韩综合精品一区二区 | 91福利电影在线观看 | 国产成人精品一区二区三区四区 | 亚洲精品www久久久久久 | 日本二区在线观看 | 91在线观看视频 | 成人精品一区二区 | 国产成人精品免高潮在线观看 | 天天干夜夜爽 | 精品成人免费一区二区在线播放 | 91精品福利 | 免费一级毛片 | 91在线精品一区二区 | 日本 欧美 三级 高清 视频 | 国产专区一区 | 天天插天天操 | 91精品国产91久久久久久吃药 | 欧美炮房 | av不卡电影在线观看 | 精品久久久久久久 | 久精品视频| 一级电影在线观看 | 日本精品在线 | 免费福利视频一区二区三区 | 国产韩国精品一区二区三区 | 亚洲视频区| 理论片一区 | 亚洲欧美中文日韩在线v日本 | 久久不射电影网 | 久久成人免费 | 精品无人乱码一区二区三区 | 日韩一级大片 | 91成人在线免费视频 | 成人午夜在线观看 | 成人亚洲一区二区 | 久久精品国产一区 | 国产黄色av| 一级毛片免费网站 | 欧美永久精品 | 国产精品视频导航 | 成人亚洲在线观看 | 一区自拍| 在线干 | 日日精品 | 精品成人一区二区 | 久久综合一区二区三区 | 91精品久久久久久久久久入口 | 国产精品黄网站在线观看 | 丁香婷婷久久久综合精品国产 | 亚洲精品综合中文字幕 | 国产精品久久久久久久久久久久午夜片 | 国产成人午夜视频 | av一区二区三区四区 | 亚洲国产二区三区 | 久久久婷婷| 国产欧美精品一区二区 | 欧美日韩电影一区二区 | 一区二区在线视频 | 天天操天天干天天爽 | 亚洲视频欧美视频 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 成人看片免费 | 日本福利在线观看 | 亚洲精品一区在线观看 | 亚洲 欧美 日韩 精品 | 天天干狠狠干 | 精品国产乱码久久久久久1区2区 | 91精品国产综合久久久久久蜜月 | 日韩一区电影 | 91精品国产综合久久福利软件 | 成人免费网站www网站高清 | 色欧美片视频在线观看 | 国产成人一级片 | 午夜欧美| 国产精品99久久久久久久vr | 日韩区| 国产美女自拍视频 | 亚洲免费不卡视频 | 成人在线免费视频观看 | hsck成人网| www久久久久 | 免费一区二区三区 | 国产成人精品在线观看 | 欧美激情五月 | 午夜视频91 | 91av在| 精品亚洲永久免费精品 | 激情五月综合 | 一区二区av | 精品国产一区二区三区久久影院 | 免费黄在线看 | 精品一区二区三区在线观看 | 国产一级一级特黄女人精品毛片 | 久久在线 | 91精品久久久久久久久久入口 | 中文字幕视频在线观看 | 国产乱码精品一区二区三区忘忧草 | 2019国产精品 | 性处破╳╳╳高清欧美 | 涩涩视频在线看 | 精品久久一区二区三区 | 国产精品自拍一区 | 天堂成人av | 亚洲欧美日韩精品久久亚洲区 | 成人欧美| 国产情侣免费视频 | 91高清视频| 暖暖成人免费视频 | 欧美天天| 成人免费视频网站在线观看 | 午夜激情视频在线观看 | 正在播放国产精品 | 亚洲视频一区在线 | 玖玖综合网 | 在线观看国产wwwa级羞羞视频 | 免费在线观看一区二区 | 成人在线免费观看 | 日韩成人av在线 | 九九亚洲精品 | 爱爱视频网站 | 日韩精品免费在线视频 | 欧洲精品在线视频 | 狠狠干很很操 | 碰碰视频 | 99热在线播放 | 国产精品久久久久久久久久 | 精品视频网站 | 亚洲高清视频一区 | 青青久视频 | 久久久精品国产 | 精品视频免费观看 | 日韩日日夜夜 | 777xacom| 一区二区三区在线免费观看 | 国产在线观看免费av | 综合久久色 | 国产精品久久久久久久久久ktv | 精品欧美乱码久久久久久1区2区 | 欧美1级| 欧美精品亚洲 | 夜夜草视频 | 中文字幕八区 | 伊人久久综合 | 欧美日韩综合视频 | 99热精品在线 | 欧美精品久久久久久久久老牛影院 | 国产无套一区二区三区久久 | 99热在线播放 | 日日摸夜夜添夜夜添亚洲女人 | 国产日韩精品在线观看 | 午夜不卡视频 | 美女午夜影院 | 精品国产乱码久久久久久88av | 四虎永久| 欧美视频一区二区三区在线观看 | 久久se精品一区精品二区 | 一区二区三区免费av | 在线国产视频 | 二区在线观看 | www视频在线观看 | 在线亚州 | 欧美中文字幕在线 | 亚洲精彩视频在线 | 久久久久一区二区三区 | 日韩中文字幕在线观看 | 欧美日韩电影一区 | 色综合免费 | 日韩精品小视频 | 久久久久久一区 | 69热在线观看 | www.欧美.com| 日本一区二区三区四区 | 激情小网站 | 精品亚洲成a人片在线观看 国产高清在线 | 日韩精品久久久久久 | 9久9久| 亚洲综合视频 | 亚洲国产欧美日韩 | 成年人免费在线视频 | 国产成人jvid在线播放 | 欧美精品欧美极品欧美激情 | 国产亚洲精品久久久久久久 | 先锋av资源网 | 亚洲欧美在线观看 | 最近免费中文字幕大全免费版视频 | 亚洲www啪成人一区二区 | 51ⅴ精品国产91久久久久久 | 羞羞视频网站在线免费观看 | 簧片毛片 | 女人色网 | 久久精品一区二区 | 国产精品美女久久久久久不卡 | 懂色一区二区三区免费观看 | 羞羞视频网站在线免费观看 | 中文字幕 国产精品 | 国产精品69毛片高清亚洲 | 精品99久久久久久 | 最新一级毛片 | 欧美精产国品一二三区 | 91人人看| 三级免费毛片 | 亚洲欧美一区二区三区四区 | 国产精品99久久久久久大便 | 欧美一级艳片视频免费观看 | 欧美一区二区视频 | 97久久久| 日韩成人小视频 | 99久久婷婷国产精品综合 | 精品国产乱码久久久久久影片 | 97成人精品视频在线观看 | 漂亮少妇videoshd忠贞 | 久久精品免费国产 | 欧美日韩午夜 | 国产视频久久 | 久久久一区二区 | www.中文字幕 | 成人永久免费视频 | 91精品国产乱码久久蜜臀 | 欧美视频综合 | 午夜精品久久久久久久久久久久久 | 亚洲国产精品一区二区三区 | 黄色短视频在线观看 | 玖玖综合网 | 久久精品视频网站 | 免费一区 | 久热av在线 | 午夜国产一区 | 91精品国产美女在线观看 | 亚洲动漫在线观看 | 欧美精品久久久 | 日韩在线视频一区 | 亚洲精品一区国语对白 | 国产高清美女一级a毛片久久 | 日韩免费视频中文字幕 | 欧美日韩三区 | 超碰成人在线免费 | 久久精品国产99国产精品 | 中文字幕视频二区 | av免费在线观看网址 | 国产精品三级久久久久久电影 | 婷婷激情综合 | 日本中文字幕在线观看 | 一区二区视频在线 | 一区二区三区观看视频 | 国产日韩欧美 | 欧美日韩亚洲综合 | 中文字幕在线观看网站 | 国产一级在线观看 | 久久久免费看 | 91精品久久久久久 | 色偷偷噜噜噜亚洲男人 | 成人在线看片 |