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

Citus 分布式 PostgreSQL 集群-SQL Reference(創建和修改分布式表 DDL)

數據庫 PostgreSQL
如果將現有的 PostgreSQL 數據庫轉換為 Citus 集群的協調器節點,則其表中的數據可以高效地分布,并且對應用程序的中斷最小。

創建和分布表

要創建分布式表,您需要首先定義表 schema。為此,您可以使用 CREATE TABLE 語句定義一個表,就像使用常規 PostgreSQL 表一樣。

  • CREATE TABLE

http://www.postgresql.org/docs/current/static/sql-createtable.html

CREATE TABLE github_events
(
event_id bigint,
event_type text,
event_public boolean,
repo_id bigint,
payload jsonb,
repo jsonb,
actor jsonb,
org jsonb,
created_at timestamp
);

接下來,您可以使用 create_distributed_table() 函數指定表分布列并創建工作分片。

SELECT create_distributed_table('github_events', 'repo_id');

該函數通知 Citus github_events 表應該分布在 repo_id 列上(通過哈希列值)。該函數還使用 citus.shard_count 和 citus.shard_replication_factor 配置值在工作節點上創建分片。

此示例將創建總共 citus.shard_count 個分片,其中每個分片擁有一部分哈希令牌空間并根據默認的 citus.shard_replication_factor 配置值進行復制。在 worker 上創建的 shard 副本與 coordinator 上的表具有相同的表 schema、索引和約束定義。創建副本后,此函數將所有分布式元數據保存在協調器上。

每個創建的分片都分配有一個唯一的分片 ID,并且它的所有副本都具有相同的分片 ID。每個分片在工作節點上表示為一個名為 tablename_shardid 的常規 PostgreSQL 表,其中 tablename 是分布式表的名稱,shardid 是分配給該分片的唯一 ID。您可以連接到工作節點(worker) postgres 實例以查看或在各個分片上運行命令。

您現在已準備好將數據插入分布式表并對其運行查詢。您還可以在文檔的 Citus Utility Functions 中了解有關本節中使用的 UDF 的更多信息。

  • Citus Utility Functions

https://docs.citusdata.com/en/v11.0-beta/develop/api_udf.html#user-defined-functions

引用表

上述方法將表分布到多個水平分片中,但另一種可能是將表分布到單個分片中并將分片復制到每個工作節點。以這種方式分布的表稱為引用表。它們用于存儲集群中多個節點需要頻繁訪問的數據。

  • 引用表的常見候選包括:
  • 較小的表需要與較大的分布式表連接。
  • 多租戶應用程序中缺少租戶 ID 列或不與租戶關聯的表。(在某些情況下,為了減少遷移工作,用戶甚至可以選擇從與租戶關聯但當前缺少租戶 ID 的表中創建引用表。)

需要跨多個列的唯一約束并且足夠小的表。

例如,假設一個多租戶電子商務網站需要為其任何商店的交易計算銷售稅。稅務信息并非特定于任何租戶。將其合并到共享表中是有意義的。以美國為中心的引用表可能如下所示:

-- a reference table

CREATE TABLE states (
code char(2) PRIMARY KEY,
full_name text NOT NULL,
general_sales_tax numeric(4,3)
);

-- distribute it to all workers

SELECT create_reference_table('states');

現在,諸如為購物車計算稅款之類的查詢可以在沒有網絡開銷的情況下加入 states 表,并且可以將外鍵添加到 state 代碼中以進行更好的驗證。

除了將表分布為單個復制分片之外,create_reference_table UDF 將其標記為 Citus 元數據表中的引用表。Citus 自動執行兩階段提交 (2PC) 以修改以這種方式標記的表,這提供了強大的一致性保證。

  • 2PC

https://en.wikipedia.org/wiki/Two-phase_commit_protocol

如果您有一個現有的分布式表,您可以通過運行將其更改為引用表:

SELECT undistribute_table('table_name');
SELECT create_reference_table('table_name');

有關在多租戶應用程序中使用引用表的另一個示例,請參閱在租戶之間共享數據。

  • 在租戶之間共享數據

https://docs.citusdata.com/en/v11.0-beta/use_cases/multi_tenant.html#mt-ref-tables

分布協調器數據

如果將現有的 PostgreSQL 數據庫轉換為 Citus 集群的協調器節點,則其表中的數據可以高效地分布,并且對應用程序的中斷最小。

前面描述的 create_distributed_table 函數適用于空表和非空表,對于后者,它會自動在整個集群中分布表行。您將通過消息 NOTICE: Copying data from local table… 來了解它是否這樣做,例如:

CREATE TABLE series AS SELECT i FROM generate_series(1,1000000) i;
SELECT create_distributed_table('series', 'i');
NOTICE: Copying data from local table...
NOTICE: copying the data has completed
DETAIL: The local data in the table is no longer visible, but is still on disk.
HINT: To remove the local data, run: SELECT truncate_local_data_after_distributing_table($$public.series$$)
create_distributed_table
--------------------------

(1 row)

遷移數據時會阻止對表的寫入,一旦函數提交,掛起的寫入將作為分布式查詢處理。(如果函數失敗,則查詢再次變為本地。)讀取可以正常繼續,一旦函數提交,將變為分布式查詢。

分布表 A 和 B 時,其中 A 對 B 有外鍵,首先需對目標表 B 設置分布鍵。當以錯誤的順序執行會導致錯誤:

ERROR:  cannot create foreign key constraint
DETAIL: Referenced table must be a distributed table or a reference table.

如果無法以正確的順序分布,則刪除外鍵,分布表,然后重新創建外鍵。

表分布后,使用 truncate_local_data_after_distributing_table 函數刪除本地數據。Citus 查詢無法訪問分布式表中剩余的本地數據,并且可能導致協調器上的不相關約束違規。

  • truncate_local_data_after_distributing_table

https://docs.citusdata.com/en/v11.0-beta/develop/api_udf.html#truncate-local-data-after-distributing-table

從外部數據庫遷移數據時,例如從 Amazon RDS 遷移到 Citus Cloud,首先通過 create_distributed_table 創建 Citus 分布式表,然后將數據復制到表中。復制到分布式表中可以避免協調節點上的空間不足。

共置表

共置是一種策略性地劃分數據的做法,將相關信息保存在同一臺機器上以實現高效的關系操作,同時利用整個數據集的水平可擴展性。有關更多信息和示例,請參閱表共置。

  • 表共置

https://docs.citusdata.com/en/v11.0-beta/sharding/data_modeling.html#colocation

表在組中是共置(co-location)的。要手動控制表的 co-location 分配,請使用 create_distributed_table 的可選 colocate_with 參數。如果您不關心表的 co-location,請忽略此參數。它默認為 'default' 值,它將表與具有相同分布列類型、分片計數和復制因子的任何其他默認 co-location 表分組。如果要中斷或更新此隱式 colocation,可以使用 update_distributed_table_colocation()。

-- these tables are implicitly co-located by using the same
-- distribution column type and shard count with the default
-- co-location group

SELECT create_distributed_table('A', 'some_int_col');
SELECT create_distributed_table('B', 'other_int_col');

當新表與其潛在的隱式 co-location 組中的其他表不相關時,請指定 colocated_with => 'none'。

-- not co-located with other tables

SELECT create_distributed_table('A', 'foo', colocate_with => 'none');

將不相關的表拆分為它們自己的 co-location 組將提高分片再平衡性能,因為同一組中的分片必須一起移動。

  • 分片再平衡

https://docs.citusdata.com/en/v11.0-beta/admin_guide/cluster_management.html#shard-rebalancing

當表確實相關時(例如,當它們將被連接時),顯式地將它們放在一起是有意義的。適當的 co-location 所帶來的收益比任何重新平衡開銷都更重要。

要顯式共置多個表,請分布一張表,然后將其他表放入其 co-location 組。例如:

-- distribute stores
SELECT create_distributed_table('stores', 'store_id');

-- add to the same group as stores
SELECT create_distributed_table('orders', 'store_id', colocate_with => 'stores');
SELECT create_distributed_table('products', 'store_id', colocate_with => 'stores');

有關 co-location 組的信息存儲在 pg_dist_colocation 表中,而 pg_dist_partition 顯示哪些表分配給了哪些組。

  • pg_dist_colocation

https://docs.citusdata.com/en/v11.0-beta/develop/api_metadata.html#colocation-group-table

  • pg_dist_partition

https://docs.citusdata.com/en/v11.0-beta/develop/api_metadata.html#partition-table

從 Citus 5.x 升級

從 Citus 6.0 開始,我們將 co-location 作為 first-class 的概念,并開始在 pg_dist_colocation 中跟蹤表對 co-location 組的分配。由于 Citus 5.x 沒有這個概念,因此使用 Citus 5 創建的表沒有在元數據中明確標記為位于同一位置,即使這些表在物理上位于同一位置。

由于 Citus 使用托管元數據信息進行查詢優化和下推,因此通知 Citus 以前創建的表的此 co-location 變得至關重要。要修復元數據,只需使用 mark_tables_colocated 將表標記為 co-located:

-- Assume that stores, products and line_items were created in a Citus 5.x database.

-- Put products and line_items into store's co-location group
SELECT mark_tables_colocated('stores', ARRAY['products', 'line_items']);
  • mark_tables_colocated

https://docs.citusdata.com/en/v11.0-beta/develop/api_udf.html#mark-tables-colocated

該函數要求表以相同的方法、列類型、分片數和復制方法分布。它不會重新分片或物理移動數據,它只是更新 Citus 元數據。

刪除表

您可以使用標準的 PostgreSQL DROP TABLE 命令來刪除您的分布式表。與常規表一樣,DROP TABLE 刪除目標表存在的任何索引、規則、觸發器和約束。此外,它還會刪除工作節點上的分片并清理它們的元數據。

DROP TABLE github_events;

修改表

Citus 會自動傳播多種 DDL 語句,這意味著修改協調器節點上的分布式表也會更新工作器上的分片。其他 DDL 語句需要手動傳播,并且禁止某些其他語句,例如那些會修改分布列的語句。嘗試運行不符合自動傳播條件的 DDL 將引發錯誤并使協調節點上的表保持不變。

以下是傳播的 DDL 語句類別的參考。請注意,可以使用配置參數啟用或禁用自動傳播。

  • 配置參數

https://docs.citusdata.com/en/v11.0-beta/develop/api_guc.html#enable-ddl-prop

添加/修改列

Citus 會自動傳播大多數 ALTER TABLE 命令。添加列或更改其默認值的工作方式與在單機 PostgreSQL 數據庫中一樣:

  • ALTER TABLE

https://www.postgresql.org/docs/current/static/ddl-alter.html

-- Adding a column

ALTER TABLE products ADD COLUMN description text;

-- Changing default value

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

對現有列進行重大更改(例如重命名或更改其數據類型)也可以。但是,不能更改分布列的數據類型。此列確定表數據如何在 Citus 集群中分布,修改其數據類型將需要移動數據。

  • 分布列

https://docs.citusdata.com/en/v11.0-beta/sharding/data_modeling.html#distributed-data-modeling

嘗試這樣做會導致錯誤:

-- assuming store_id is the distribution column
-- for products, and that it has type integer

ALTER TABLE products
ALTER COLUMN store_id TYPE text;

/*
ERROR: cannot execute ALTER TABLE command involving partition column
*/

作為一種解決方法,您可以考慮更改分布列,更新它,然后再改回來。

  • 更改分布列

https://docs.citusdata.com/en/v11.0-beta/develop/api_udf.html#alter-distributed-table

添加/刪除約束

使用 Citus 可以讓您繼續享受關系數據庫的安全性,包括數據庫約束(請參閱 PostgreSQL 文檔)。由于分布式系統的性質,Citus 不會交叉引用工作節點之間的唯一性約束或引用完整性。

  • 數據庫約束

https://www.postgresql.org/docs/current/static/ddl-constraints.html

在這些情況下可能會創建外鍵:

  • 在兩個本地(非分布式)表之間
  • 在兩個引用表之間
  • 在引用表和本地表之間(默認啟用,通過citus.enable_local_reference_table_foreign_keys (boolean))

https://docs.citusdata.com/en/v11.0-beta/develop/api_guc.html#enable-local-ref-fkeys

  • 當鍵包含分布列時,在兩個共置的分布式表之間

https://docs.citusdata.com/en/v11.0-beta/sharding/data_modeling.html#colocation

  • 作為引用表的分布式表

https://docs.citusdata.com/en/v11.0-beta/develop/reference_ddl.html#reference-tables

不支持從引用表到分布式表的外鍵。

Citus 支持從本地到引用表的所有外鍵引用操作,但不支持反向支持 ON DELETE/UPDATE CASCADE(引用本地)。

主鍵和唯一性約束必須包括分布列。將它們添加到非分布列將產生錯誤(請參閱無法創建唯一性約束)。

  • 無法創建唯一性約束

https://docs.citusdata.com/en/v11.0-beta/reference/common_errors.html#non-distribution-uniqueness

這個例子展示了如何在分布式表上創建主鍵和外鍵:

--
-- Adding a primary key
-- --------------------

-- We'll distribute these tables on the account_id. The ads and clicks
-- tables must use compound keys that include account_id.

ALTER TABLE accounts ADD PRIMARY KEY (id);
ALTER TABLE ads ADD PRIMARY KEY (account_id, id);
ALTER TABLE clicks ADD PRIMARY KEY (account_id, id);

-- Next distribute the tables

SELECT create_distributed_table('accounts', 'id');
SELECT create_distributed_table('ads', 'account_id');
SELECT create_distributed_table('clicks', 'account_id');

--
-- Adding foreign keys
-- -------------------

-- Note that this can happen before or after distribution, as long as
-- there exists a uniqueness constraint on the target column(s) which
-- can only be enforced before distribution.

ALTER TABLE ads ADD CONSTRAINT ads_account_fk
FOREIGN KEY (account_id) REFERENCES accounts (id);
ALTER TABLE clicks ADD CONSTRAINT clicks_ad_fk
FOREIGN KEY (account_id, ad_id) REFERENCES ads (account_id, id);

同樣,在唯一性約束中包含分布列:

-- Suppose we want every ad to use a unique image. Notice we can
-- enforce it only per account when we distribute by account id.

ALTER TABLE ads ADD CONSTRAINT ads_unique_image
UNIQUE (account_id, image_url);

非空約束可以應用于任何列(分布與否),因為它們不需要工作節點之間的查找。

ALTER TABLE ads ALTER COLUMN image_url SET NOT NULL;

使用 NOT VALID 約束

在某些情況下,對新行實施約束,同時允許現有的不符合要求的行保持不變是很有用的。Citus 使用 PostgreSQL 的 “NOT VALID” 約束指定,為 CHECK 約束和外鍵支持此功能。

例如,考慮將用戶配置文件存儲在引用表中的應用程序。

  • 引用表

https://docs.citusdata.com/en/v11.0-beta/develop/reference_ddl.html#reference-tables

-- we're using the "text" column type here, but a real application
-- might use "citext" which is available in a postgres contrib module

CREATE TABLE users ( email text PRIMARY KEY );
SELECT create_reference_table('users');

隨著時間的推移,想象一些非地址進入表中。

INSERT INTO users VALUES
('foo@example.com'), ('hacker12@aol.com'), ('lol');

我們想驗證地址,但 PostgreSQL 通常不允許我們添加對現有行失敗的 CHECK 約束。但是,它確實允許標記為無效的約束:

ALTER TABLE users
ADD CONSTRAINT syntactic_email
CHECK (email ~
'^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$'
) NOT VALID;

這成功了,并且新行受到保護。

INSERT INTO users VALUES ('fake');

/*
ERROR: new row for relation "users_102010" violates
check constraint "syntactic_email_102010"
DETAIL: Failing row contains (fake).
*/

稍后,在非高峰時段,數據庫管理員可以嘗試修復錯誤行并重新驗證約束。

-- later, attempt to validate all rows
ALTER TABLE users
VALIDATE CONSTRAINT syntactic_email;

PostgreSQL 文檔在 ALTER TABLE 部分中有更多關于 NOT VALID 和 VALIDATE CONSTRAINT 的信息。

  • ALTER TABLE

https://www.postgresql.org/docs/current/sql-altertable.html

添加/刪除索引

Citus 支持添加和刪除索引:

-- Adding an index

CREATE INDEX clicked_at_idx ON clicks USING BRIN (clicked_at);

-- Removing an index

DROP INDEX clicked_at_idx;
  • 添加和刪除索引

https://www.postgresql.org/docs/current/static/sql-createindex.html

添加索引需要寫鎖,這在多租戶“記錄系統”中可能是不可取的。為了最大限度地減少應用程序停機時間,請改為同時創建索引。與標準索引構建相比,此方法需要更多的總工作量,并且需要更長的時間才能完成。但是,由于它允許在構建索引時繼續正常操作,因此此方法對于在生產環境中添加新索引很有用。

-- Adding an index without locking table writes

CREATE INDEX CONCURRENTLY clicked_at_idx ON clicks USING BRIN (clicked_at);
  • SQL-CREATEINDEX-CONCURRENTLY

https://www.postgresql.org/docs/current/static/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY

手動修改

目前其他 DDL 命令不會自動傳播,但是,您可以手動傳播更改。請參閱手動查詢傳播。

  • 手動查詢傳播

https://docs.citusdata.com/en/v11.0-beta/develop/reference_propagation.html#manual-prop

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2022-03-29 23:17:52

PostgreSQL集群Citus

2022-03-30 19:18:31

PostgreSQL分布式I/O

2022-03-31 19:20:39

集群PostgreSQLCitus

2022-03-28 13:13:58

分布列CitusPostgreSQ

2022-04-01 19:26:15

PostgreSQLCitus分布式

2022-03-21 19:44:30

CitusPostgreSQ執行器

2022-03-21 06:45:22

PostgreSQL數據庫Citus

2022-03-06 21:43:05

Citus架構PostgreSQL

2022-03-22 11:35:10

數據建模PostgreSQLCitus

2022-03-24 14:11:25

KubernetesCitusPostgreSQL

2022-03-17 18:52:41

PostgreSQ序列數據集群

2022-03-16 19:15:32

PostgreSQL日志Kafka

2022-03-15 19:19:04

分布式PostgreSQL集群

2022-03-14 19:40:40

PostgreSQL多租戶應用程序Citus

2022-10-21 16:16:42

分布式系統優化

2019-10-10 09:16:34

Zookeeper架構分布式

2023-05-29 14:07:00

Zuul網關系統

2019-06-19 15:40:06

分布式鎖RedisJava

2017-09-01 05:35:58

分布式計算存儲

2009-09-18 15:10:13

分布式事務LINQ TO SQL
點贊
收藏

51CTO技術棧公眾號

欧美日韩亚洲国产另类| 日韩精品一区二区三区不卡| 国产99视频在线| 狠狠噜噜久久| 亚洲欧洲在线播放| 亚洲欧美日本一区二区| av在线不卡免费| 久久久久久久免费视频了| 国产精品久久久久久久久久小说| 成人性视频免费看| 成人看片黄a免费看视频| 色综合久久六月婷婷中文字幕| 亚洲精品美女久久7777777| 精品毛片在线观看| 快she精品国产999| 欧美成人合集magnet| 免费黄色一级网站| 国产三级伦理在线| 亚洲国产精品ⅴa在线观看| 国产精品久久久久久久久久久久午夜片| 成人午夜视频在线播放| 欧美~级网站不卡| 国产一区二区三区在线播放免费观看| 久久久无码人妻精品无码| 成人免费一区| 五月婷婷综合在线| 看全色黄大色大片| 天堂中文8资源在线8| 久久综合九色综合97婷婷女人| 亚洲自拍偷拍第一页| 国产精品第6页| 亚洲一区欧美二区| 欧美日韩成人在线播放| 欧美手机在线观看| 日韩啪啪电影网| 在线电影中文日韩| 三上悠亚影音先锋| 老司机aⅴ在线精品导航| 日韩一级片在线观看| 爱爱爱爱免费视频| 黑人一区二区三区| 色噜噜久久综合| 日本免费不卡一区二区| 91破解版在线观看| 亚洲午夜久久久久久久久电影院| 中国老女人av| 黄色网页在线免费观看| 亚洲欧美综合色| 在线观看成人av电影| 成人全视频高清免费观看| 久久久久国产免费免费 | 免费的av在线| 快射av在线播放一区| 国产精品久久毛片| 亚洲欧洲日韩精品| 快射视频在线观看| 一区二区三区欧美在线观看| 美女在线免费视频| 免费在线播放电影| 性感美女久久精品| 大j8黑人w巨大888a片| 一区二区三区电影大全| 色婷婷久久一区二区三区麻豆| 国产午夜伦鲁鲁| 日韩在线免费| 欧美日韩日日夜夜| 在线观看免费不卡av| 99er精品视频| 欧美成人精品高清在线播放| 在线免费看黄色片| 欧美日韩导航| 一区二区三区国产视频| 69夜色精品国产69乱| 国产精品大片| 91精品国产高清久久久久久91| 久久精品国产成人av| 久久中文在线| 91久久在线观看| 日本高清视频在线| 国产欧美综合在线观看第十页 | 亚洲男女av一区二区| 欧美激情va永久在线播放| 影音先锋亚洲天堂| 蜜桃视频一区二区| 国产伦精品一区二区三区四区视频 | 日本在线视频网址| 精品女厕一区二区三区| 亚洲少妇第一页| 欧美在线在线| 亚洲欧美日韩在线高清直播| 天堂av网手机版| 国产精品porn| 国产精品久久久91| 亚洲第九十九页| 国产无人区一区二区三区| 影音先锋成人资源网站| 欧美xxx视频| 日韩一区二区三区精品视频 | 日韩mv欧美mv国产网站| 日韩一区二区久久久| 国产第一页在线播放| 青青草97国产精品免费观看无弹窗版| 97超碰最新| 国产粉嫩一区二区三区在线观看| 亚洲男人电影天堂| 人人爽人人av| 国产一区二区三区不卡av| 自拍偷拍亚洲在线| 日本视频www| 国产一区二区美女诱惑| 蜜桃91精品入口| av毛片在线播放| 欧美日韩一区二区电影| 三级电影在线看| 欧美特黄a级高清免费大片a级| 国产精品视频午夜| 亚洲国产精彩视频| 中文字幕中文字幕中文字幕亚洲无线| 鲁一鲁一鲁一鲁一色| 亚洲码欧美码一区二区三区| 日韩中文字幕不卡视频| 国产精品视频123| 成人av网站在线| 日韩不卡一二区| 国产精品原创视频| 亚洲香蕉成人av网站在线观看| 国产一级在线播放| 国产乱码精品一区二区三区五月婷| 欧洲在线视频一区| 色综合亚洲图丝熟| 亚洲成人中文字幕| 免费麻豆国产一区二区三区四区| 精品一区二区三区在线视频| 神马欧美一区二区| 最新欧美电影| 亚洲欧美第一页| 天天干天天干天天| 91在线精品秘密一区二区| 国产www免费| 18国产精品| 欧美激情精品久久久久久蜜臀| 99精品视频免费看| 亚洲三级电影网站| 91蝌蚪视频在线| 亚洲字幕久久| 91精品天堂| 日本高清成人vr专区| 欧美一区二区在线不卡| 国产a免费视频| 粉嫩在线一区二区三区视频| 国产一二三在线视频| 国产一区二区三区亚洲| 91福利视频在线观看| 欧美巨乳在线| 欧美亚洲尤物久久| 五月婷婷综合激情网| 国产在线一区观看| 嫩草影院中文字幕| 岛国精品一区| 日本精品久久中文字幕佐佐木| 五月激情六月婷婷| 狠狠做深爱婷婷久久综合一区| 中文字幕5566| 日韩影院在线观看| 伊人久久婷婷色综合98网| 国产精品一区二区精品| 欧美日本在线视频中文字字幕| 亚洲av无码专区在线| 午夜成人在线视频| 精品人妻中文无码av在线| 精品一区二区三区av| 50度灰在线观看| 日韩伦理一区二区三区| 国产精品美乳在线观看| 国产成人在线视频免费观看| 亚洲精品一线二线三线| 老熟妇仑乱一区二区av| 国产精品高潮久久久久无| 两女双腿交缠激烈磨豆腐 | 毛葺葺老太做受视频| 久久精品高清| 国产精品视频福利| 日韩精品三区| 欧美精品在线第一页| 污污网站免费在线观看| 欧美私人免费视频| 国产一级做a爱免费视频| 91片黄在线观看| 亚洲综合婷婷久久| 欧美午夜在线| 亚洲精品无人区| 超碰成人免费| 国产精品香蕉国产| 91在线三级| 久久精品99久久久香蕉| 天天操天天操天天| 在线播放国产精品二区一二区四区| 久久久精品91| 亚洲国产精品ⅴa在线观看| 欧美xxxxx少妇| 久久丁香综合五月国产三级网站 | 秋霞成人午夜伦在线观看| 精品久久久无码人妻字幂| 中日韩免视频上线全都免费| 91久久精品国产91久久性色tv| 欧美特大特白屁股xxxx| 欧美大片欧美激情性色a∨久久| 国产三级电影在线| 精品久久一区二区三区| 国产伦精品一区二区三区四区 | 一区二区在线电影| 一级黄色录像毛片| 99久久er热在这里只有精品15| 国产探花在线看| 日韩精品五月天| 国产白丝袜美女久久久久| 中文字幕一区二区精品区| 日韩av电影免费观看| 九九热播视频在线精品6 | 日韩大胆成人| 69堂成人精品视频免费| 国产精品66| 国产精品激情av在线播放 | 黑丝美女久久久| 豆国产97在线 | 亚洲| 综合分类小说区另类春色亚洲小说欧美| 草草影院第一页| 99精品黄色片免费大全| 亚洲黄色片免费看| 精品一区二区在线观看| 亚洲欧美视频二区| 日韩高清不卡一区二区| 精品一卡二卡三卡| 麻豆九一精品爱看视频在线观看免费| 国产精品12345| 亚洲国产精品第一区二区| 国产肉体ⅹxxx137大胆| 欧美黄污视频| 日韩精品手机在线观看| 亚洲在线久久| 国产精品视频一二三四区| 中文一区一区三区免费在线观看| 在线观看日韩片| 亚洲成人精品| 黑人巨大国产9丨视频| 国产韩日影视精品| 中日韩在线视频| 国产精品传媒精东影业在线| 桥本有菜av在线| 亚洲国产精品久久久久蝴蝶传媒| 一级黄色录像免费看| 亚洲欧美综合久久久| 国产精品视频一二三四区| 欧美日韩第一区| 亚洲 欧美 综合 另类 中字| 亚洲毛片网站| 国产福利视频在线播放| 青椒成人免费视频| 一级黄色片在线免费观看| 懂色一区二区三区免费观看| 国产在线不卡av| 国产三级欧美三级| 999久久久国产| 亚洲精品福利视频网站| 久久精品视频6| 一本到三区不卡视频| 中文字幕人妻互换av久久 | 国产日韩在线一区| 免费观看性欧美大片无片| 国产福利久久精品| 亚洲人成精品久久久| 亚洲欧洲国产日韩精品| 欧美黄色精品| 国产福利视频在线播放| 精品一区二区综合| 亚洲成av人片在线观看无| 国产午夜三级一区二区三| 粉嫩av性色av蜜臀av网站| 午夜精品久久久久影视| 波多野结衣视频观看| 欧美一卡在线观看| 色天堂在线视频| 日韩有码在线电影| 韩日毛片在线观看| 国产精品专区h在线观看| 97一区二区国产好的精华液| 欧美一级二级三级九九九| 亚洲精品久久久| 免费在线观看日韩视频| 国模一区二区三区白浆| 亚洲男女在线观看| 中文字幕永久在线不卡| 日韩三级av在线| 欧美精品久久99| 日本免费不卡| 欧美高清第一页| 成人看片网页| 国产一区二区三区免费不卡| 日韩午夜电影网| 久久国产成人精品国产成人亚洲| 久久国产乱子精品免费女| xxxx黄色片| 亚洲视频免费看| 免费黄色av片| 亚洲电影免费观看高清完整版在线| 国产精品一级伦理| 午夜精品久久久久久99热| 成人豆花视频| 日韩欧美精品一区二区三区经典| 韩国在线视频一区| 亚洲精品乱码久久久久久动漫| 久久精品亚洲精品国产欧美kt∨| 国产污视频在线观看| 欧美妇女性影城| 国产亚洲依依| 97超级碰碰碰久久久| 日韩中文字幕视频网| 亚洲一区高清| 三级在线观看一区二区| 亚洲调教欧美在线| 亚洲综合激情小说| a天堂视频在线| 啊v视频在线一区二区三区| 色成人免费网站| 欧美精品一区二区三区在线看午夜| 激情欧美一区| 欧美午夜精品一区二区| 一区二区三区在线观看国产| 国产精品视频在线观看免费| 自拍偷拍免费精品| av在线日韩| 亚洲成人网上| 日韩av电影免费观看高清完整版| 日本少妇色视频| 精品福利樱桃av导航| 手机在线观看毛片| 欧美极品少妇xxxxⅹ喷水| 亚洲一区二区三区在线免费| 欧美a级免费视频| 国产91精品一区二区麻豆网站| 91插插插插插插| 日韩免费电影一区| 欧美草逼视频| 国产伦精品一区二区三区四区免费| 在线精品一区| 成人性生活免费看| 午夜精品福利在线| 香蕉视频黄在线观看| 38少妇精品导航| 亚洲免费福利一区| av网址在线观看免费| 国产日韩欧美精品在线| 在线播放国产一区| 久久久国产一区二区| 久久久久久爱| 三上悠亚久久精品| 久久影音资源网| 精品国产www| 久久国产一区二区三区| 日韩免费成人| 少妇人妻无码专区视频| 久久久久久久电影| 911美女片黄在线观看游戏| 久久综合伊人77777| 综合视频一区| 国产真实乱子伦| 国产精品欧美综合在线| 国产v片在线观看| 国内精品久久影院| 久久99免费视频| 天天影视色综合| 午夜私人影院久久久久| 国产高清视频在线观看| 91嫩草在线| 亚洲专区欧美专区| 99热在线观看精品| 亚洲成人激情视频| 电影一区二区| 精品国产亚洲在线| 97人妻精品一区二区三区动漫 | hd国产人妖ts另类视频| 久久一区免费| 麻豆国产一区二区| 久久久久久久福利| 亚洲人成欧美中文字幕| 国产一区二区三区视频在线| 欧美,日韩,国产在线| 18成人在线观看| 亚洲日本国产精品| 91久久精品美女高潮| 亚洲深夜影院| 国产97免费视频| 亚洲欧美另类在线观看| 国产精品亚洲一区二区在线观看| 色综合久久久久无码专区| 自拍偷自拍亚洲精品播放| 欧美巨乳在线| 国产精品三区在线| 精品一区二区三区日韩| 国产中文字幕视频|