精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Sentry 開發(fā)者貢獻(xiàn)指南-數(shù)據(jù)庫遷移

運(yùn)維 數(shù)據(jù)庫運(yùn)維
重命名列是危險(xiǎn)的,會導(dǎo)致停機(jī)。發(fā)生這種情況的原因是在部署期間將運(yùn)行舊/新代碼的混合。因此,一旦我們在 Postgres 中重命名該列,如果舊代碼嘗試訪問它,它就會立即開始出錯(cuò)。

Django 遷移是我們處理 Sentry 中數(shù)據(jù)庫更改的方式。

Django 遷移官方文檔:https://docs.djangoproject.com/en/2.2/topics/migrations/。

這些將涵蓋了解遷移正在執(zhí)行的操作所需的大部分內(nèi)容。

命令

請注意,對于所有這些命令,如果在 getsentry 存儲庫中,您可以將 getsentry 替換為 sentry。

將您的數(shù)據(jù)庫升級到最新

sentry upgrade 會自動(dòng)更新你的遷移。您也可以運(yùn)行 sentry django migrate 來直接訪問遷移命令。

將您的數(shù)據(jù)庫移動(dòng)到特定的遷移

當(dāng)您要測試遷移時(shí),這會很有幫助。

sentry django migrate - 請注意,migration_name 可以是部分匹配,通常數(shù)字就是你所需要的。

例如:sentry django migrate sentry 0005

這也可用于回滾遷移。如果你犯了錯(cuò)誤,在開發(fā)中很有用。

為遷移生成 SQL

這對審查您的代碼的人很有幫助,因?yàn)椴⒉豢偸乔宄?Django 遷移實(shí)際要做什么。

sentry django sqlmigrate

例如 sentry django sqlmigrate sentry 0003

生成遷移

這會根據(jù)您對模型所做的更改自動(dòng)為您生成遷移。

sentry django makemigrations

或者

sentry django makemigrations 用于一個(gè)指定的 app。

例如 sentry django makemigrations sentry

當(dāng)您在 pr 中包含遷移時(shí),還要為遷移生成 sql 并將其作為注釋包含在內(nèi),以便您的審閱者可以更輕松地了解 Django 正在做什么。

您還可以使用 sentry django makemigrations --empty 生成空遷移。這對于數(shù)據(jù)遷移和其他自定義工作很有用。

將遷移合并到 master

合并到 master 時(shí),您可能會注意到與 migrations_lockfile.txt 的沖突。這個(gè)文件是為了幫助我們避免將具有相同遷移編號的兩個(gè)遷移合并到 master,如果您與它發(fā)生沖突,那么很可能有人在您之前提交了遷移。

指南

在運(yùn)行遷移時(shí),我們需要注意一些事項(xiàng)。

過濾器

如果(數(shù)據(jù))遷移涉及大表或未索引的列,最好迭代整個(gè)表而不是使用 filter。例如:

  1. EnvironmentProject.objects.filter(environment__name="none"

因?yàn)?EnvironmentProject 行太多,這會一次將太多行帶入內(nèi)存。相反,我們應(yīng)該使用 RangeQuerySetWrapperWithProgressBar 遍歷所有 EnvironmentProject 行,因?yàn)樗鼤謮K進(jìn)行。例如:

  1. for env in RangeQuerySetWrapperWithProgressBar(EnvironmentProject.objects.all()): 
  2.     if env.name == 'none'
  3.         # Do what you need 

我們通常更喜歡避免將 .filter 與 RangeQuerySetWrapperWithProgressBar 一起使用。由于它已經(jīng)通過 id 對表進(jìn)行排序,因此我們無法利用字段上的任何索引,并且可能會為每個(gè)塊掃描大量行。這會運(yùn)行得更慢,但我們通常更喜歡這樣,因?yàn)樗诟L的時(shí)間內(nèi)平均負(fù)載,并使每個(gè)查詢獲取每個(gè)塊的成本相當(dāng)?shù)汀?/p>

索引

我們更喜歡使用 CREATE INDEX CONCURRENTLY 在現(xiàn)有的大型表上創(chuàng)建索引。當(dāng)我們這樣做時(shí),我們無法在事務(wù)中運(yùn)行遷移,因此使用 atomic = False 來運(yùn)行這些很重要。

刪除列/表

由于我們的部署過程,這很復(fù)雜。當(dāng)我們部署時(shí),我們運(yùn)行遷移,然后推出應(yīng)用程序代碼,這需要一段時(shí)間。這意味著如果我們只是刪除一個(gè)列或模型,那么 sentry 中的代碼將查找這些列/表并在部署完成之前出錯(cuò)。在某些情況下,這可能意味著 Sentry 在部署完成之前很難停機(jī)。

為避免這種情況,請執(zhí)行以下步驟:

  • 如果列不是空的,則將其標(biāo)記為空,并創(chuàng)建一個(gè)遷移。
  • 部署。
  • 從模型中刪除列,但在遷移中確保我們只將狀態(tài)標(biāo)記為已刪除(removed)。
  • 部署。
  • 最后,創(chuàng)建一個(gè)刪除列的遷移。

這是刪除已經(jīng)可以為空的列的示例。首先我們從模型中刪除列,然后修改遷移以僅更新狀態(tài)而不進(jìn)行數(shù)據(jù)庫操作。

  1. operations = [ 
  2.         migrations.SeparateDatabaseAndState( 
  3.             database_operations=[], 
  4.             state_operations=[ 
  5.                 migrations.RemoveField(model_name="alertrule"name="alert_threshold"), 
  6.                 migrations.RemoveField(model_name="alertrule"name="resolve_threshold"), 
  7.                 migrations.RemoveField(model_name="alertrule"name="threshold_type"), 
  8.             ], 
  9.         ) 
  10.     ] 

一旦部署完成,我們就可以部署實(shí)際的列刪除。這個(gè) pr 只會有一個(gè)遷移,因?yàn)?Django 不再知道這些字段。請注意,反向 SQL 僅適用于開發(fā)人員,因此可以不分配默認(rèn)值或進(jìn)行任何類型的回填:

  1. operations = [ 
  2.         migrations.SeparateDatabaseAndState( 
  3.             database_operations=[ 
  4.                 migrations.RunSQL( 
  5.                     ""
  6.                     ALTER TABLE "sentry_alertrule" DROP COLUMN "alert_threshold"
  7.                     ALTER TABLE "sentry_alertrule" DROP COLUMN "resolve_threshold"
  8.                     ALTER TABLE "sentry_alertrule" DROP COLUMN "threshold_type"
  9.                     """, 
  10.                     reverse_sql=""
  11.                     ALTER TABLE "sentry_alertrule" ADD COLUMN "alert_threshold" smallint NULL
  12.                     ALTER TABLE "sentry_alertrule" ADD COLUMN "resolve_threshold" int NULL
  13.                     ALTER TABLE "sentry_alertrule" ADD COLUMN "threshold_type" int NULL
  14.  
  15.                     """, 
  16.                 ) 
  17.             ], 
  18.             state_operations=[], 
  19.         ) 
  20.     ] 

如果該表在其他表中被引用為外鍵,則需要格外小心。在這種情況下,首先刪除其他表中的外鍵列,然后返回到此步驟。

  • 通過在列上設(shè)置 db_constraint=False,刪除此表到其他表的任何數(shù)據(jù)庫級外鍵約束。
  • 部署
  • 從 sentry 代碼庫中刪除模型和所有引用。確保遷移僅將狀態(tài)標(biāo)記為已刪除。
  • 部署。
  • 創(chuàng)建一個(gè)刪除表的遷移。
  • 部署

這是刪除此模型的示例:

  1. class AlertRuleTriggerAction(Model): 
  2.     alert_rule_trigger = FlexibleForeignKey("sentry.AlertRuleTrigger"
  3.     integration = FlexibleForeignKey("sentry.Integration"null=True
  4.     type = models.SmallIntegerField() 
  5.     target_type = models.SmallIntegerField() 
  6.     # Identifier used to perform the action on a given target 
  7.     target_identifier = models.TextField(null=True
  8.     # Human readable name to display in the UI 
  9.     target_display = models.TextField(null=True
  10.     date_added = models.DateTimeField(default=timezone.now) 
  11.  
  12.     class Meta: 
  13.         app_label = "sentry" 
  14.         db_table = "sentry_alertruletriggeraction" 

首先,我們檢查了它沒有被任何其他模型引用,它沒有。接下來,我們需要?jiǎng)h除和 db 級外鍵約束。為此,我們改變這兩列并生成一個(gè)遷移:

  1. alert_rule_trigger = FlexibleForeignKey("sentry.AlertRuleTrigger", db_constraint=False
  2. integration = FlexibleForeignKey("sentry.Integration"null=True, db_constraint=False

遷移中的操作看起來像

  1. operations = [ 
  2.        migrations.AlterField( 
  3.            model_name='alertruletriggeraction'
  4.            name='alert_rule_trigger'
  5.            field=sentry.db.models.fields.foreignkey.FlexibleForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADEto='sentry.AlertRuleTrigger'), 
  6.        ), 
  7.        migrations.AlterField( 
  8.            model_name='alertruletriggeraction'
  9.            name='integration'
  10.            field=sentry.db.models.fields.foreignkey.FlexibleForeignKey(db_constraint=Falsenull=True, on_delete=django.db.models.deletion.CASCADEto='sentry.Integration'), 
  11.        ), 
  12.    ] 

我們可以看到它生成的 sql 只是刪除了 FK 約束

  1. BEGIN
  2. SET CONSTRAINTS "a875987ae7debe6be88869cb2eebcdc5" IMMEDIATE; ALTER TABLE "sentry_alertruletriggeraction" DROP CONSTRAINT "a875987ae7debe6be88869cb2eebcdc5"
  3. SET CONSTRAINTS "sentry_integration_id_14286d876e86361c_fk_sentry_integration_id" IMMEDIATE; ALTER TABLE "sentry_alertruletriggeraction" DROP CONSTRAINT "sentry_integration_id_14286d876e86361c_fk_sentry_integration_id"
  4. COMMIT

所以現(xiàn)在我們部署它并進(jìn)入下一階段。

下一階段涉及從代碼庫中刪除對模型的所有引用。所以我們這樣做,然后我們生成一個(gè)遷移,從遷移狀態(tài)中刪除模型,而不是數(shù)據(jù)庫。此遷移中的操作如下所示

  1. operations = [ 
  2.         migrations.SeparateDatabaseAndState( 
  3.             state_operations=[migrations.DeleteModel(name="AlertRuleTriggerAction")], 
  4.             database_operations=[], 
  5.         ) 
  6.     ] 

并且生成的 SQL 顯示沒有發(fā)生數(shù)據(jù)庫更改。所以現(xiàn)在我們部署它并進(jìn)入最后一步。

在這最后一步中,我們只想手動(dòng)編寫 DDL 來刪除表。所以我們使用 sentry django makemigrations --empty 來產(chǎn)生一個(gè)空的遷移,然后修改操作如下:

  1. operations = [ 
  2.         migrations.RunSQL( 
  3.             ""
  4.             DROP TABLE "sentry_alertruletriggeraction"
  5.             """, 
  6.             reverse_sql="CREATE TABLE sentry_alertruletriggeraction (fake_col int)", # We just create a fake table here so that the DROP will work if we roll back the migration. 
  7.         ) 
  8.     ] 

然后我們部署它,我們就完成了。

外鍵

創(chuàng)建外鍵大多沒問題,但是對于像 Project、Group 這樣的大/繁忙的表,由于獲取鎖的困難,它可能會導(dǎo)致問題。您仍然可以創(chuàng)建 Django 級別的外鍵,而無需創(chuàng)建數(shù)據(jù)庫約束。為此,請?jiān)诙x鍵時(shí)設(shè)置 db_constraint=False。

重命名表

重命名表很危險(xiǎn),會導(dǎo)致停機(jī)。發(fā)生這種情況的原因是在部署期間將運(yùn)行舊/新代碼的混合。因此,一旦我們在 Postgres 中重命名該表,如果舊代碼嘗試訪問它,它就會立即開始出錯(cuò)。有兩種方法可以處理重命名表:

  • 不要在 Postgres 中重命名表。相反,只需在 Django 中重命名模型,并確保將 Meta.db_table 設(shè)置為當(dāng)前表名,這樣不會有任何中斷。這是首選方法。
  • 如果你真的想重命名表,那么步驟將是:
  • 使用新名稱創(chuàng)建一個(gè)表
  • 開始對舊表和新表進(jìn)行雙重寫入,最好是在事務(wù)中。
  • 將舊行回填到新表中。
  • 將 model 更改為從新表開始讀取。
  • 停止寫入舊表并從代碼中刪除引用。
  • 丟棄舊表。
  • 一般來說,這是不值得做的,與回報(bào)相比,這需要冒很多風(fēng)險(xiǎn)/付出很多努力。

添加列

創(chuàng)建新列時(shí),它們應(yīng)始終創(chuàng)建為可為空的。這是出于兩個(gè)原因:

  • 如果存在現(xiàn)有行,添加非空列需要設(shè)置默認(rèn)值,添加默認(rèn)值需要完全重寫表。這是危險(xiǎn)的,很可能會導(dǎo)致停機(jī)
  • 在部署期間,新舊代碼混合運(yùn)行。如果舊代碼嘗試向表中插入一行,則插入將失敗,因?yàn)榕f代碼不知道新列存在,因此無法為該列提供值。

向列添加 NOT NULL

將 not null 添加到列可能很危險(xiǎn),即使該列的表的每一行都有數(shù)據(jù)。這是因?yàn)?Postgres 仍然需要對所有行執(zhí)行非空檢查,然后才能添加約束。在小表上這可能沒問題,因?yàn)闄z查會很快,但在大表上這可能會導(dǎo)致停機(jī)。這里有幾個(gè)選項(xiàng)可以確保安全:

  • ALTER TABLE tbl ADD CONSTRAINT cnstr CHECK (col IS NOT NULL) NOT VALID; ALTER TABLE tbl VALIDATE CONSTRAINT cnstr;. 首先,我們將約束創(chuàng)建為無效。然后我們之后驗(yàn)證它。我們?nèi)匀恍枰獟呙枵麄€(gè)表來驗(yàn)證,但我們只需要持有一個(gè) SHARE UPDATE EXCLUSIVE 鎖,它只會阻止其他 ALTER TABLE 命令,但允許讀/寫繼續(xù)。這很有效,但會有 0.5-1% 的輕微性能損失。在 Postgres 12 之后,我們可以擴(kuò)展這個(gè)方法來添加一個(gè)真正的 NOT NULL 約束。
  • 如果表足夠小并且體積足夠小,那么創(chuàng)建一個(gè)普通的 NOT NULL 約束應(yīng)該是安全的。小是幾百萬行或更少。

添加具有默認(rèn)值的列

向現(xiàn)有表添加具有默認(rèn)值的列是危險(xiǎn)的。這需要 Postgres 鎖定表并重寫它。相反,更好的選擇是:

在 Postgres 中添加沒有默認(rèn)值的列,但在 Django 中添加默認(rèn)值。這使我們能夠確保所有新行都具有默認(rèn)值。這是通過修改遷移文件以包含 migrations.SeperateDatabaseAndState 來完成的

  1. operations = [ 
  2.     migrations.SeparateDatabaseAndState( 
  3.         database_operations=[ 
  4.             migrations.AddField( 
  5.                 model_name="mymodel"
  6.                 name="new_field"
  7.                 # Don't use a default in Postgres, a data migration can be used afterward to backfill 
  8.                 field=models.PositiveSmallIntegerField(null=True), 
  9.             ), 
  10.         ], 
  11.         state_operations=[ 
  12.             migrations.AddField( 
  13.                 model_name="mymodel"
  14.                 name="new_field"
  15.                 # Use the default in Django, new rows will use the specified default 
  16.                 field=models.PositiveSmallIntegerField(null=Truedefault=1), 
  17.             ), 
  18.         ], 
  19.     ) 
  20.     ] 
  • 通過數(shù)據(jù)遷移使用默認(rèn)值回填預(yù)先存在的行。

改變列類型

改變列的類型通常是危險(xiǎn)的,因?yàn)樗枰貙懻麄€(gè)表。有一些例外:

  • 將 varchar() 更改為更大尺寸的 varchar。
  • 將任何 varchar 更改為 text
  • 將 numeric 更改為 numeric,其中 precision 更高但 scale 相同。

對于任何其他類型,最好的前進(jìn)路徑通常是:

  • 創(chuàng)建具有新類型的列。
  • 開始對新舊列進(jìn)行雙重寫入。
  • 回填并將舊列值轉(zhuǎn)換為新列。
  • 更改代碼以使用新字段。
  • 停止寫入舊列并從代碼中刪除引用。
  • 從數(shù)據(jù)庫中刪除舊列。
  • 通常,這值得在 #discuss-backend 中討論。

重命名列

重命名列是危險(xiǎn)的,會導(dǎo)致停機(jī)。發(fā)生這種情況的原因是在部署期間將運(yùn)行舊/新代碼的混合。因此,一旦我們在 Postgres 中重命名該列,如果舊代碼嘗試訪問它,它就會立即開始出錯(cuò)。有兩種方法可以處理重命名列:

  • 不要重命名 Postgres 中的列。相反,只需在 Django 中重命名字段,并在定義中使用 db_column 將其設(shè)置為現(xiàn)有的列名,這樣就不會中斷。這是首選方法。
  • 如果你真的想重命名列,那么步驟將是:
    • 創(chuàng)建具有新名稱的列
    • 開始對新舊列進(jìn)行雙重寫入。
    • 將舊列值回填到新列中。
    • 將字段更改為從新列開始讀取。
    • 停止寫入舊列并從代碼中刪除引用。
    • 從數(shù)據(jù)庫中刪除舊列。

一般來說,這是不值得做的,與回報(bào)相比,這需要冒很多風(fēng)險(xiǎn)/付出很多努力。

 

責(zé)任編輯:武曉燕 來源: 黑客下午茶
相關(guān)推薦

2022-01-15 23:33:47

SentryPyCharm配置

2022-01-18 23:26:45

開發(fā)

2022-01-11 20:42:54

開發(fā)Sentry標(biāo)志

2022-01-17 19:34:43

SentryWeb APISentry API

2022-01-02 23:26:08

開發(fā)SDK Sentry

2022-01-03 22:59:30

開發(fā)SDK數(shù)據(jù)

2021-12-15 20:06:48

ReactJSSentry開發(fā)者

2022-01-21 21:33:03

開發(fā)JavaScript應(yīng)用

2021-12-25 22:31:55

Sentry 監(jiān)控SDK 開發(fā) 性能監(jiān)控

2022-01-13 20:13:31

元宇宙搜索引擎

2021-12-31 18:35:40

監(jiān)控Sentry開發(fā)

2022-01-02 06:59:43

SentrySDK 開發(fā)客戶端報(bào)告

2021-12-16 20:12:37

后端開發(fā)Sentry

2022-01-19 19:49:53

Sentry瀏覽器SDK

2022-01-20 19:49:10

Sentry開發(fā)Scope

2021-12-17 19:15:51

前端蟲洞狀態(tài)

2017-04-01 18:00:08

開發(fā)者數(shù)據(jù)庫

2015-07-22 16:08:46

OpenStack開源貢獻(xiàn)代碼

2011-03-16 09:38:05

2011-03-16 09:33:45

數(shù)據(jù)庫開發(fā)錯(cuò)誤
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

色播五月激情五月| 成人美女av在线直播| 先锋资源av在线| 成人免费直播| 国产精品日日摸夜夜摸av| 成人精品久久久| 91午夜视频在线观看| 日韩.com| 精品动漫一区二区三区在线观看| 97av视频在线观看| 免费大片黄在线观看视频网站| 国产ts人妖一区二区| 日韩免费av在线| 男人的天堂久久久| 国产精品一国产精品| 日韩三级在线观看| 亚洲一区二区三区四区五区xx| 午夜小视频福利在线观看| 国产三级三级三级精品8ⅰ区| 亚洲影视九九影院在线观看| 在线观看日本网站| 亚洲午夜精品在线观看| 亚洲国产精品欧美久久| 日韩电影在线一区二区三区| 九色精品免费永久在线| 黄色三级生活片| 精品精品国产毛片在线看| 欧美裸体一区二区三区| 免费黄色福利视频| 日本片在线观看| 中文字幕中文字幕一区二区| 17婷婷久久www| 国产欧美综合在线| 国产亚洲欧美另类中文| 亚洲精品一区二区18漫画 | 日日噜噜噜夜夜爽亚洲精品| 美女久久久久久久久| 欧美97人人模人人爽人人喊视频| 富二代精品短视频| 日韩视频在线免费播放| 国产精品99999| 久久综合九色综合97婷婷女人 | 91香蕉亚洲精品| 久久久久久久久一区| 美国黄色一级视频| 精品国产亚洲一区二区三区大结局| 色老汉一区二区三区| www.中文字幕在线| bbw在线视频| 亚洲成人777| 美脚丝袜脚交一区二区| 欧美高清在线观看| 亚洲区一区二区| 国产免费又粗又猛又爽| 日本在线影院| 欧美大黑bbbbbbbbb在线| 日韩免费性生活视频播放| 天天影视色综合| 欧美视频精品| 欧美巨大另类极品videosbest | 日韩欧美成人激情| 亚洲AV无码久久精品国产一区| 99tv成人影院| 欧美一级片免费看| 乱码一区二区三区| 国产一区福利| 亚洲欧洲国产一区| 免费黄色在线网址| 亚洲免费二区| 欧美激情精品久久久久久久变态| 久久免费视频99| 国产偷自视频区视频一区二区| 91成人免费观看网站| 天天爱天天做天天爽| 日韩电影在线观看一区| 国产日韩欧美日韩大片| 国产黄a三级三级看三级| 懂色中文一区二区在线播放| 久久久久无码国产精品一区| 大地资源中文在线观看免费版| 四虎永久在线精品免费网址| 欧美日韩一卡| 97人人做人人爱| 日韩三级一区二区| 激情五月激情综合网| 波多野结衣久草一区| 天天干在线观看| 国产精品午夜在线观看| 2022中文字幕| 三上悠亚国产精品一区二区三区| 欧美日韩国产一级二级| 久久精品aⅴ无码中文字字幕重口| 欧美wwwsss9999| 亚洲最新中文字幕| 欧美成人片在线观看| 老鸭窝毛片一区二区三区 | 久久人人爽人人爽人人av| 水蜜桃在线视频| 欧美人与z0zoxxxx视频| 第四色在线视频| 国产精品久久久久久久久妇女| 午夜欧美大片免费观看| 一本一道人人妻人人妻αv | 国产精品久久久久久久久久久久午夜片| 青青草超碰在线| 亚洲人吸女人奶水| 黄色动漫在线免费看| 国产视频一区二区在线播放| 日韩精品有码在线观看| 国产一二三区精品| 天使萌一区二区三区免费观看| 成人性色av| 在线观看国产原创自拍视频| 精品久久中文字幕| 亚洲综合中文网| 成人在线免费小视频| 欧美一级在线播放| 亚洲av永久纯肉无码精品动漫| 亚洲国产高清不卡| 欧美在线观看成人| 一区二区三区精彩视频| 综合亚洲自拍| 欧美丰满少妇xxxxx做受| 国产又粗又爽又黄的视频| 欧美性生交大片| 91久久中文| 91香蕉电影院| 北岛玲一区二区三区| 精品国产乱码久久久久久天美| 超碰成人在线播放| 国产一区网站| 欧日韩不卡在线视频| 人人妻人人澡人人爽久久av | 免费观看一级欧美片| 欧美成人精品二区三区99精品| 奇米网一区二区| 老鸭窝毛片一区二区三区| 精品伊人久久大线蕉色首页| 黑人另类精品××××性爽| 日韩欧美成人午夜| 久久久一二三区| 国产精品自拍网站| gogogo免费高清日本写真| 欧美大陆国产| 最新中文字幕亚洲| 中文 欧美 日韩| 国产精品色眯眯| 国产精品久久久久久久美男| 欧美激情精品久久久久久| 97国产精品视频人人做人人爱| 久久久精品国产亚洲| 尤物网站在线看| 日韩国产综合| 国产欧美在线视频| 在线中文资源天堂| 欧美日韩一卡二卡三卡 | 亚洲欧洲一区| 成人免费毛片片v| 成人精品久久久| 黄色网址在线免费| 欧美一区二区三区免费视频| 欧美又粗又大又长| 国产99精品国产| 国产美女主播在线| 日本欧美高清| 国产精品91在线| av二区在线| 欧美一区二区三区播放老司机| 黄色一级片在线| 91在线视频播放| 国产一级做a爰片久久| 99久久婷婷| 91影院未满十八岁禁止入内| 啊啊啊久久久| 一个色综合导航| 91丨九色丨丰满| 亚洲一区二区三区小说| 青青草成人免费视频| 日本免费新一区视频| 熟女熟妇伦久久影院毛片一区二区| 国产精品久久免费视频| 高清一区二区三区日本久| 黄色大片在线看| 7777精品伊人久久久大香线蕉完整版| 欧美精品一级片| 久久久久久久电影| 国产一区二区在线免费播放| 一本一本久久a久久综合精品| 国产伦视频一区二区三区| 欧美xxxx做受欧美护士| 欧美成人午夜激情视频| 青青色在线视频| 日韩午夜av电影| 欧美黄色一级大片| 亚洲欧美激情视频在线观看一区二区三区 | 91国偷自产一区二区三区观看| 欧美波霸videosex极品| 国产一区二区三区黄视频 | 免费精品一区二区| 一区二区三区四区不卡视频| 一卡二卡三卡四卡| 国产在线精品一区二区| 成人免费毛片网| 欧美激情成人在线| 日本黑人久久| 成功精品影院| 国产欧美在线观看| 亚洲男人av| 久久久久国产精品免费网站| 91美女视频在线| 亚洲精品久久久久| 99久久99久久久精品棕色圆| 日本精品视频一区二区| 久久免费播放视频| 亚洲视频小说图片| 在线视频第一页| caoporen国产精品视频| 久久综合桃花网| 美国毛片一区二区| 国产麻花豆剧传媒精品mv在线| 欧美精品97| 国产对白在线播放| 成人6969www免费视频| 就去色蜜桃综合| 国产精品zjzjzj在线观看| 成人国产在线激情| 黑人一区二区三区| 国产福利精品av综合导导航| 国产夫妻在线| 欧美精品国产精品日韩精品| 成人免费高清| 久久九九国产精品怡红院 | 国内精品久久久久久久久| 国产在线1区| 亚洲色图一区二区三区| 在线视频你懂得一区二区三区| 久久999免费视频| 中文字幕有码视频| 欧美色xxxx| 日韩熟女精品一区二区三区| 亚洲精品写真福利| 亚洲 欧美 变态 另类 综合| 国产精品视频在线看| 日本人亚洲人jjzzjjz| 国产欧美视频一区二区三区| 成人免费网站黄| 92国产精品观看| 成人午夜剧场视频网站| 91香蕉视频mp4| 久久久久久亚洲中文字幕无码| 91麻豆.com| 亚洲人成人无码网www国产 | 3d成人动漫网站| 国产一区二区在线视频观看| 7777精品伊人久久久大香线蕉的 | 亚洲成人亚洲激情| 天天操天天射天天| 国产婷婷成人久久av免费高清| 亚洲三区在线播放| 亚洲女人天堂av| 成年网站在线| 日韩中文字幕网址| 最新日本在线观看| 欧美久久精品午夜青青大伊人| 亚洲小说区图片| 98精品国产高清在线xxxx天堂| 国产夫妻在线| 国产成人精品日本亚洲专区61 | 成人片在线免费看| 伦理一区二区三区| 欧美一级日本a级v片| 欧美精品系列| 亚洲色图都市激情| 亚洲激情网站| 欧美精品aaaa| 国产在线看一区| 69xxx免费视频| 久久久99精品免费观看| 日本高清不卡免费| 亚洲成人自拍偷拍| 天天干天天色综合| 在线成人免费视频| 神马午夜电影一区二区三区在线观看| 亚洲欧美在线x视频| 午夜在线播放| 欧美激情性做爰免费视频| 不卡av播放| 成人a级免费视频| 美女一区2区| 亚洲在线观看一区| 欧美日韩国产在线一区| 热久久精品国产| 国产乱码精品一区二区三区忘忧草| 欧美日韩一区二区三区四区五区六区| 国产视频一区二区三区在线观看| 日本一级二级视频| 欧美性xxxx极品hd满灌| 国产99视频在线| 亚洲欧美一区二区三区四区| 欧美黑人xx片| 国产精品久久久久久久久久 | 国产一区二区精品久久99| 欧产日产国产精品98| 国产欧美日韩另类一区| 国产精品 欧美 日韩| 欧美视频一区二| 香蕉视频成人在线| 久久精品久久久久久| 午夜久久中文| av成人午夜| 欧美大人香蕉在线| 欧美精品一区二区三区免费播放| 国产精品资源在线观看| 欧美日韩国产黄色| 亚洲成a人在线观看| 国产麻豆一精品一男同| 亚洲人成在线观看| caoporn视频在线观看| 亚洲综合一区二区不卡| 91视频精品| 青青青国产在线视频| 97精品国产97久久久久久久久久久久 | 超碰在线97免费| 久久精品这里都是精品| 好看的av在线| 亚洲第一免费网站| 色呦呦在线看| 91精品国产高清久久久久久91裸体| 久久人人88| 免费看污污网站| 国产区在线观看成人精品| 亚洲天堂视频网站| 日韩av在线免费| 超碰99在线| 久久国产精品免费一区| 亚洲激情亚洲| 在线看黄色的网站| 亚洲一级不卡视频| www.麻豆av| 亚洲高清视频在线| 欧美一区二区三区精美影视| 国产真实有声精品录音| 国产综合av在线| 99精品国产99久久久久久白柏| 国产精品30p| 亚洲精品97久久| 理论片午夜视频在线观看| 国产一区高清视频| 亚洲欧洲一区二区天堂久久| 精品无码av一区二区三区不卡| 亚洲狼人国产精品| 国产精品伦一区二区三区| 久久韩国免费视频| 国产精品一区二区三区av | 国产丝袜在线| 亚洲自拍偷拍一区| 欧美日韩18| 2一3sex性hd| 欧美体内谢she精2性欧美| 日韩欧美在线番号| 国产精品高潮呻吟久久av野狼| 成人在线免费小视频| 日韩av片免费观看| 一卡二卡三卡日韩欧美| 日韩一级免费视频| 欧美中文在线观看| 不卡中文一二三区| 日韩a一级欧美一级| 亚洲福中文字幕伊人影院| 亚洲欧美综合在线观看| 国产97色在线|日韩| 久久精品国产www456c0m| 香蕉网在线视频| 精品久久久久久亚洲国产300| 黄视频在线播放| 国产在线精品播放| 精品999成人| 影音先锋男人在线| 精品国产一区二区三区av性色| 亚洲黄色网址| 免费成人深夜夜行网站视频| 成人高清在线视频| 亚洲精品无码久久久久| 久久777国产线看观看精品| 日韩大胆成人| 男人的天堂最新网址| 香港成人在线视频| 精品久久久久一区二区三区 | 一本久久青青| 欧美国产日韩在线视频| 欧美日韩在线第一页| 麻豆传媒视频在线| 九九九九精品| 黄色日韩网站视频| 久久久久女人精品毛片九一 | 超级白嫩亚洲国产第一| 在线丝袜欧美日韩制服| 99精品视频免费在线观看| 国产又黄又猛又爽| 欧美一区二区.|