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

分庫(kù)分表如何管理不同實(shí)例中幾萬(wàn)張分片表?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
在使用ShardingSphere?實(shí)現(xiàn)分庫(kù)分表的時(shí)候,要摒棄先建表、再配規(guī)則的傳統(tǒng)思維,要先確定規(guī)則在建表,管理表是一件很簡(jiǎn)單的事,我們只要告訴ShardingSphere分片數(shù)量和分布規(guī)則,剩下的就讓框架來(lái)處理就好了。

ShardingSphere實(shí)現(xiàn)分庫(kù)分表,如何管理分布在不同數(shù)據(jù)庫(kù)實(shí)例中的成千上萬(wàn)張分片表?

上邊的問(wèn)題是之前有個(gè)小伙伴看了我的分庫(kù)分表的文章,私下咨詢我的,看到他的提問(wèn)我第一感覺(jué)就是這老鐵沒(méi)用過(guò)ShardingSphere,因?yàn)檫@個(gè)問(wèn)題在ShardingSphere中已經(jīng)有了很好的解決方案,接下來(lái)看看怎么實(shí)現(xiàn)。

本文案例代碼GitHub地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/shardingsphere101/shardingsphere-autocreate-table

圖片圖片

ShardingSphere學(xué)習(xí)路線

本文是《ShardingSphere5.x分庫(kù)分表原理與實(shí)戰(zhàn)》系列的第四篇文章,在進(jìn)行分庫(kù)分表設(shè)計(jì)時(shí),確認(rèn)好了數(shù)據(jù)節(jié)點(diǎn)數(shù)量和分片策略以后,接下來(lái)要做的就是管理大量的分片表。實(shí)際實(shí)施過(guò)程中可能存在上百個(gè)分片數(shù)據(jù)庫(kù)實(shí)例,每個(gè)實(shí)例中都可能有成千上萬(wàn)個(gè)分片表,如果僅依靠人力來(lái)完成這些任務(wù)顯然是不現(xiàn)實(shí)的。所以,想要快速且自動(dòng)化管理這些分片表,使用工具是十分必要滴。

前言

ShardingSphere框架成員中的Shardingsphere-jdbc和Shardingsphere-proxy都提供了自動(dòng)化管理分片表的功能auto-tables,可以統(tǒng)一維護(hù)大量的分片表,避免了手動(dòng)編寫(xiě)腳本和維護(hù)分片表的繁瑣工作,極大程度減少分庫(kù)分表的開(kāi)發(fā)和維護(hù)成本,提升效率和可靠性。

圖片圖片

這里咱們先使用Shardingsphere-jdbc來(lái)實(shí)際操作一下,Shardingsphere-proxy方式后續(xù)會(huì)有單獨(dú)的文章詳細(xì)講解,就不在這里展開(kāi)了。

準(zhǔn)備工作

假設(shè)我們要對(duì)t_order表進(jìn)行分庫(kù)分表,首先我們要做的就是確定好分片方案,這里使用兩個(gè)數(shù)據(jù)庫(kù)實(shí)例db0、db1,每個(gè)實(shí)例中t_order表分成1000張分片表t_order_1 ~ t_order_1000,order_id字段作為分片鍵,分片算法使用取模算法order_id % n,分布式主鍵生成策略采用snowflake。

t_order邏輯表的表結(jié)構(gòu)如下:

CREATE TABLE `t_order` (
 `order_id` BIGINT ( 20 ) NOT NULL COMMENT "訂單表分布式主健ID",
 `order_number` VARCHAR ( 255 ) NOT NULL COMMENT "訂單號(hào)",
 `customer_id` BIGINT ( 20 ) NOT NULL COMMENT "用戶ID",
 `order_date` date NOT NULL COMMENT "下單時(shí)間",
 `total_amount` DECIMAL ( 10, 2 ) NOT NULL COMMENT "訂單金額",
    PRIMARY KEY ( `order_id` ) USING BTREE 
);

有了這些基礎(chǔ)信息,可以先來(lái)進(jìn)行t_order表的分片配置了,不考慮其他因素,這里先Run起來(lái)!

分片規(guī)則配置

設(shè)定好分片規(guī)則,接著編寫(xiě)邏輯表t_order的分片規(guī)則的配置,我分別使用yml配置和Java編碼兩種方式做了實(shí)現(xiàn)。要注意的是兩種方式不要并存,不然啟動(dòng)會(huì)報(bào)錯(cuò)。

yml配置方式

使用yml配置相對(duì)簡(jiǎn)單易用比較直觀,適合對(duì)分庫(kù)分表要求不太復(fù)雜的場(chǎng)景,完整配置如下:

spring:
  shardingsphere:
    datasource:
      # 數(shù)據(jù)源名稱,多數(shù)據(jù)源以逗號(hào)分隔 ,放在第一個(gè)的數(shù)據(jù)源為未配置分片規(guī)則表的默認(rèn)數(shù)據(jù)源
      names: db0 , db1
      # 名稱與上邊 names 保持一致
      db0:
      ....

      db1:
      ....
    # 具體規(guī)則配置
    rules:
      sharding:
        # 分片算法定義
        sharding-algorithms:
          # 自定義分片算法名稱
          t_order_database_algorithms:
            # 分片算法類(lèi)型
            type: INLINE
            # 自定義參數(shù)
            props:
              algorithm-expression: db$->{order_id % 2}
          t_order_table_algorithms:
            type: INLINE
            props:
              algorithm-expression: t_order_$->{order_id % 1000}
          t_order_mod:
            type: MOD
            props:
              # 指定分片數(shù)量
              sharding-count: 1000
        # 分布式序列算法配置
        key-generators:
          t_order_snowflake:
            type: SNOWFLAKE
            # 分布式序列算法屬性配置
            props:
              worker-id: 1
        tables:
          # 邏輯表名稱
          t_order:
            # 數(shù)據(jù)節(jié)點(diǎn):數(shù)據(jù)庫(kù).分片表
            actual-data-nodes: db$->{0..1}.t_order_$->{1..1000}
            # 分庫(kù)策略
            database-strategy:
              standard:
                # 分片列名稱
                sharding-column: order_id
                # 分片算法名稱
                sharding-algorithm-name: t_order_database_algorithms
            # 分表策略
            table-strategy:
              standard:
                # 分片列名稱
                sharding-column: order_id
                # 分片算法名稱
                sharding-algorithm-name: t_order_table_algorithms
            # 主鍵生成策略
            keyGenerateStrategy:
              column: order_id
              keyGeneratorName: t_order_snowflake
    # 屬性配置
    props:
      # 展示修改以后的sql語(yǔ)句
      sql-show: true

Java編碼方式

使用Java編碼方式更加靈活和可擴(kuò)展,可以根據(jù)業(yè)務(wù)定制分片規(guī)則,適合對(duì)分庫(kù)分表有特殊需求或需要?jiǎng)討B(tài)調(diào)整的場(chǎng)景。

/**
 * 公眾號(hào):程序員小富
 */
@Configuration
public class ShardingConfiguration {

    /**
     * 配置分片數(shù)據(jù)源
     * 公眾號(hào):程序員小富
     */
    @Bean
    public DataSource getShardingDataSource() throws SQLException {
        Map<String, DataSource> dataSourceMap = new HashMap<>();
        dataSourceMap.put("db0", dataSource0());
        dataSourceMap.put("db1", dataSource1());

        // 分片rules規(guī)則配置
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

        // 分片算法
        shardingRuleConfig.setShardingAlgorithms(getShardingAlgorithms());
        // 配置 t_order 表分片規(guī)則
        ShardingTableRuleConfiguration orderTableRuleConfig = new ShardingTableRuleConfiguration("t_order", "db${0..1}.t_order_${1..1000}");
        orderTableRuleConfig.setTableShardingStrategy(new StandardShardingStrategyConfiguration("order_id", "t_order_table_algorithms"));
        orderTableRuleConfig.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("order_id", "t_order_database_algorithms"));
        shardingRuleConfig.getTables().add(orderTableRuleConfig);

        // 是否在控制臺(tái)輸出解析改造后真實(shí)執(zhí)行的 SQL
        Properties properties = new Properties();
        properties.setProperty("sql-show", "true");

        // 創(chuàng)建 ShardingSphere 數(shù)據(jù)源
        return ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, Collections.singleton(shardingRuleConfig), properties);
    }

    /**
     * 配置數(shù)據(jù)源1
     * 公眾號(hào):程序員小富
     */
    public DataSource dataSource0() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/db0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeznotallow=Asia/Shanghai&allowPublicKeyRetrieval=true");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }

    /**
     * 配置數(shù)據(jù)源2
     * 公眾號(hào):程序員小富
     */
    public DataSource dataSource1() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeznotallow=Asia/Shanghai&allowPublicKeyRetrieval=true");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }

    /**
     * 配置分片算法
     * 公眾號(hào):程序員小富
     */
    private Map<String, AlgorithmConfiguration> getShardingAlgorithms() {
        Map<String, AlgorithmConfiguration> shardingAlgorithms = new LinkedHashMap<>();

        // 自定義分庫(kù)算法
        Properties databaseAlgorithms = new Properties();
        databaseAlgorithms.setProperty("algorithm-expression", "db$->{order_id % 2}");
        shardingAlgorithms.put("t_order_database_algorithms", new AlgorithmConfiguration("INLINE", databaseAlgorithms));

        // 自定義分表算法
        Properties tableAlgorithms = new Properties();
        tableAlgorithms.setProperty("algorithm-expression", "db$->{order_id % 1000}");
        shardingAlgorithms.put("t_order_table_algorithms", new AlgorithmConfiguration("INLINE", tableAlgorithms));

        return shardingAlgorithms;
    }
}

上面我們?cè)趹?yīng)用中編寫(xiě)好了分片規(guī)則,現(xiàn)在就差在數(shù)據(jù)庫(kù)實(shí)例中創(chuàng)建分片表了,手動(dòng)創(chuàng)建和管理1000張分片表確實(shí)是一個(gè)又臟又累的活,反正我是不會(huì)干的!

管理分片表

其實(shí),ShardingSphere內(nèi)已經(jīng)為我們提供了管理分片表的能力。

當(dāng)一張邏輯表t_order被配置了分片規(guī)則,那么接下來(lái)對(duì)邏輯表的各種DDL操作(例如創(chuàng)建表、修改表結(jié)構(gòu)等),命令和數(shù)據(jù)會(huì)根據(jù)分片規(guī)則,執(zhí)行和存儲(chǔ)到每個(gè)分片數(shù)據(jù)庫(kù)和分片庫(kù)中的相應(yīng)分片表中,以此保持整個(gè)分片環(huán)境的一致性。

不過(guò),使用Shardingsphere-jdbc管理分片表的過(guò)程中,是需要我們手動(dòng)編寫(xiě)對(duì)邏輯表的DDL操作的代碼。我們來(lái)跑幾個(gè)單元測(cè)試用例來(lái)觀察實(shí)際的執(zhí)行效果,直接使用jdbcTemplate執(zhí)行創(chuàng)建邏輯表t_order的SQL。

/**
 * @author 公眾號(hào):程序員小富
 * 自動(dòng)創(chuàng)建分片表
 * @date 2023/12/31 17:25
 */
@SpringBootTest
class AutoCreateTablesTests {
    @Resource
    private JdbcTemplate jdbcTemplate;
    /**
     * 執(zhí)行創(chuàng)建邏輯表的SQL,會(huì)根據(jù)AutoTables的配置自動(dòng)在對(duì)應(yīng)的數(shù)據(jù)源內(nèi)創(chuàng)建分片表
     * @author 公眾號(hào):程序員小富
     */
    @Test
    public void autoCreateOrderTableTest() {

        jdbcTemplate.execute("CREATE TABLE `t_order` (\n" +
                "  `order_id` bigint(20) NOT NULL,\n" +
                "  `order_number` varchar(255) NOT NULL,\n" +
                "  `customer_id` bigint(20) NOT NULL,\n" +
                "  `order_date` date NOT NULL,\n" +
                "  `total_amount` decimal(10,2) NOT NULL,\n" +
                "  PRIMARY KEY (`order_id`) USING BTREE\n" +
                ");");
    }
}

根據(jù)之前配置的分片規(guī)則,將會(huì)在兩個(gè)數(shù)據(jù)庫(kù)實(shí)例 db0 和 db1 中,分別生成1000張命名為t_order_1到t_order_1000的分片表,看到兩個(gè)數(shù)據(jù)庫(kù)均成功創(chuàng)建了1000張分片表。

圖片圖片

在次執(zhí)行更新t_order表SQL,將字段order_number長(zhǎng)度從 varchar(255)擴(kuò)展到 varchar(500),執(zhí)行SQL看下效果。

/**
 * @author 公眾號(hào):程序員小富
 * 自動(dòng)創(chuàng)建分片表
 * @date 2023/12/31 17:25
 */
@SpringBootTest
class AutoCreateTablesTests {
    @Resource
    private JdbcTemplate jdbcTemplate;
    
    @Test
    public void autoModifyOrderTableTest() {

        jdbcTemplate.execute("ALTER TABLE t_order MODIFY COLUMN order_number varchar(500);");
    }
}

通過(guò)查看兩個(gè)分片庫(kù),我們成功地將所有分片表的order_number字段長(zhǎng)度更改為了varchar(500),在控制臺(tái)日志中,可以看到它是通過(guò)在每個(gè)分片庫(kù)內(nèi)依次執(zhí)行了1000次命令實(shí)現(xiàn)的。

圖片圖片

Shardingsphere-jdbc實(shí)現(xiàn)分庫(kù)分表時(shí),可以采用這種默認(rèn)的方式來(lái)管理分片表。但要注意的是,由于涉及到不同的數(shù)據(jù)庫(kù)實(shí)例,如果不使用第三方的分布式事務(wù)管理工具(例如Seata等),執(zhí)行過(guò)程是無(wú)法保證事務(wù)一致性的。

自定義管理分片表

上邊為邏輯表配置分片規(guī)則,應(yīng)用程序內(nèi)執(zhí)行對(duì)邏輯表的DDL操作,就可以很輕松的管理分片表。

自定義

不過(guò),默認(rèn)的分片管理還是有局限性的,我們?cè)谠O(shè)計(jì)分片規(guī)則時(shí)往往會(huì)根據(jù)不同的業(yè)務(wù)維度來(lái)劃分,例如按天、月、按季度生成分片表并分布到不同數(shù)據(jù)源中等。這樣就需要一些自定義的規(guī)則來(lái)實(shí)現(xiàn)。

ShardingSphere 5.X版本后推出了一種新的管理分片配置方式:AutoTable。設(shè)置了AutoTable的邏輯表,將交由ShardingSphere自動(dòng)管理分片,用戶只需要指定分片數(shù)量和使用的數(shù)據(jù)庫(kù)實(shí)例,無(wú)需再關(guān)心表的具體分布,配置格式如下:

spring:
  shardingsphere:
    # 數(shù)據(jù)源配置
    datasource:
      ......
    # 具體規(guī)則配置
    rules:
      sharding:
        # 邏輯表分片規(guī)則
        tables:
          # 邏輯表名稱
          t_order:
            .....
        # 自動(dòng)分片表規(guī)則配置
        auto-tables:
          t_order: # 邏輯表名稱
            actual-data-sources: db$->{0..1}
            sharding-strategy: # 切分策略
              standard: # 用于單分片鍵的標(biāo)準(zhǔn)分片場(chǎng)景
                sharding-column: order_id # 分片列名稱
                sharding-algorithm-name: t_order_mod # 自動(dòng)分片算法名稱

ShardingSphere-Jdbc中配置使用auto-tables主要兩個(gè)參數(shù),actual-data-sources指定數(shù)據(jù)源分布,由于是管理分片表所以只需數(shù)據(jù)源信息即可;sharding-strategy指具體采用何種算法來(lái)進(jìn)行分片。

對(duì)邏輯表的DDL操作,系統(tǒng)會(huì)首先檢查是否配置了AutoTable,如果已配置,則優(yōu)先采用配置的規(guī)則;若未配置,則將使用默認(rèn)的邏輯表分片規(guī)則。

AutoTable支持ShardingSphere內(nèi)置的全部自動(dòng)分片算法,所謂自動(dòng)分片算法就是根據(jù)actualDataSources設(shè)置的數(shù)據(jù)源信息,使用對(duì)應(yīng)內(nèi)置算法自行解析處理。

  • MOD:取模分片算法
  • HASH_MOD:哈希取模分片算法
  • VOLUME_RANGE:基于分片容量的范圍分片算法
  • BOUNDARY_RANGE:基于分片邊界的范圍分片算法
  • AUTO_INTERVAL:自動(dòng)時(shí)間段分片算法

AutoTable使用

舉個(gè)例子,我們使用內(nèi)置MOD取模算法作為AutoTable的分片算法,同樣是db0、db1兩個(gè)實(shí)例中各創(chuàng)建1000張分片表。那么當(dāng)對(duì)邏輯表的DDL操作時(shí),ShardingSphere會(huì)依據(jù)分片表編號(hào)t_order_0~t_order_1999 % 數(shù)據(jù)庫(kù)實(shí)例數(shù)取模來(lái)確認(rèn)DDL命令路由到哪個(gè)實(shí)例中執(zhí)行。

spring:
  shardingsphere:
    # 數(shù)據(jù)源配置
    datasource:
      .....
    # 具體規(guī)則配置
    rules:
      sharding:
        # 自動(dòng)分片表規(guī)則配置
        auto-tables:
          t_order:
            actual-data-sources: db$->{0..1}
            sharding-strategy:
              standard:
                sharding-column: order_date
                sharding-algorithm-name: t_order_mod
        # 分片算法定義
        sharding-algorithms:
          t_order_mod:
            type: MOD
            props:
              # 指定分片數(shù)量
              sharding-count: 2000

還是執(zhí)行剛才創(chuàng)建表的單元測(cè)試,會(huì)發(fā)現(xiàn)db0、db1兩個(gè)實(shí)例中已經(jīng)各自創(chuàng)建了1000張分片表,但你會(huì)發(fā)現(xiàn)1000張表已經(jīng)不再是按照順序創(chuàng)建的了。

圖片圖片

上邊使用的是內(nèi)置自動(dòng)分片算法,它對(duì)于我們來(lái)說(shuō)是黑盒,提供它方便我們拿來(lái)即用。不過(guò),如果想要做到更細(xì)粒度的管理分片表,最好的辦法就是自定義分片算法,后續(xù)章節(jié)會(huì)介紹所有內(nèi)置分片算法和自定義分片算法的使用。

總結(jié)

在使用ShardingSphere實(shí)現(xiàn)分庫(kù)分表的時(shí)候,要摒棄先建表、再配規(guī)則的傳統(tǒng)思維,要先確定規(guī)則在建表,管理表是一件很簡(jiǎn)單的事,我們只要告訴ShardingSphere分片數(shù)量和分布規(guī)則,剩下的就讓框架來(lái)處理就好了。

本文案例代碼GitHub地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/shardingsphere101/shardingsphere-autocreate-table

責(zé)任編輯:武曉燕 來(lái)源: 程序員小富
相關(guān)推薦

2024-06-26 00:34:12

2020-07-30 17:59:34

分庫(kù)分表SQL數(shù)據(jù)庫(kù)

2020-07-28 09:04:09

NewSQL分庫(kù)分表

2019-11-12 09:54:20

分庫(kù)分表數(shù)據(jù)

2022-07-11 08:16:47

NewSQL關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)

2024-11-22 15:32:19

2020-11-18 09:39:02

MySQL數(shù)據(jù)庫(kù)SQL

2021-08-31 20:21:11

VitessMySQL分庫(kù)

2018-03-14 09:49:35

數(shù)據(jù)庫(kù)遷移

2023-08-11 08:59:49

分庫(kù)分表數(shù)據(jù)數(shù)據(jù)庫(kù)

2025-07-03 08:21:16

2020-11-17 08:08:34

分庫(kù)分表

2021-01-26 05:37:08

分庫(kù)分表內(nèi)存

2025-04-01 08:45:00

2024-07-26 00:16:11

2021-05-20 07:32:59

分庫(kù)分表數(shù)據(jù)量

2024-04-01 08:53:50

分庫(kù)分表分片算法

2022-06-30 07:34:46

分庫(kù)分表外賣(mài)訂單系統(tǒng)

2023-03-28 08:58:47

分庫(kù)分表TiDB

2020-09-27 08:00:49

分庫(kù)分表
點(diǎn)贊
收藏

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

精品少妇一二三区| www日本在线观看| 91精彩在线视频| 精品系列免费在线观看| 色综合视频一区中文字幕| 国产清纯白嫩初高中在线观看性色| 手机在线免费看av| 久久久久久9999| 国产精品免费网站| 国产精品第56页| 欧州一区二区| 精品国产乱码久久久久久图片 | 成人欧美在线观看| 亚洲日本韩国在线| 91精品啪在线观看国产18| 亚洲国产精品悠悠久久琪琪 | 日产电影一区二区三区| 国产亚洲一区二区三区啪| 精品伦理精品一区| www.国产视频.com| 欧美艳星kaydenkross| 亚洲精品国产无套在线观| 人禽交欧美网站免费| 午夜老司机福利| 青青青爽久久午夜综合久久午夜| 欧美激情视频网| 1024在线看片| 亚洲调教一区| 精品播放一区二区| 亚欧精品在线视频| 欧美aaaaaaaa| 欧美视频中文字幕在线| 性一交一乱一伧国产女士spa| 成人精品福利| 97久久精品人人澡人人爽| 亚洲一区二区三区777| 天堂网一区二区| 91久久久久| 欧美另类极品videosbest最新版本 | 国产做受高潮漫动| 欧美国产高潮xxxx1819| 中文字幕在线看视频国产欧美在线看完整 | 国产aaa免费视频| 免费在线看黄网站| 国产欧美精品一区| 欧美精品中文字幕一区二区| 欧美一级特黄aaaaaa大片在线观看 | 校园春色另类视频| 欧美刺激午夜性久久久久久久| jizz欧美性11| 成人黄色免费网站| 色综合天天综合给合国产| 国产一区二区视频播放| 欧美韩日亚洲| 一区二区三区在线视频观看| 九九久久九九久久| 成年人黄视频在线观看| 亚洲日本乱码在线观看| 伊人久久大香线蕉午夜av| 国产精品久久一区二区三区不卡| 久久人人爽爽爽人久久久| 久久精品国产理论片免费| 天堂av一区二区三区| 国产曰批免费观看久久久| 91精品视频在线看| av免费在线不卡| 国产制服丝袜一区| 91文字幕巨乱亚洲香蕉| www.超碰在线.com| 成人黄色在线网站| 精品不卡在线| 嫩草在线播放| 欧美国产一区在线| 在线观看日本一区| 香蕉成人app免费看片| 亚洲一区二区精品3399| 999一区二区三区| 超碰caoporn久久| 亚洲综合色丁香婷婷六月图片| 日韩国产小视频| av在线网页| 色妞www精品视频| 国产又大又黄又粗的视频| 日韩精品第二页| 制服丝袜一区二区三区| 国产精品久久久久野外| 久久这里只有精品一区二区| 亚洲精品视频免费| 国产破处视频在线观看| 欧美激情91| 欧美在线国产精品| 亚洲天堂久久久久| 成人免费三级在线| 日本午夜精品一区二区| 久久日韩视频| 亚洲超碰精品一区二区| 日韩欧美xxxx| 精品国产三区在线| 亚洲欧美日韩在线一区| 亚洲女人久久久| 极品裸体白嫩激情啪啪国产精品| 日本久久久久久久久| 一级片视频免费| 99精品黄色片免费大全| 先锋影音网一区| 国产盗摄一区二区| 欧美亚洲尤物久久| 亚洲少妇一区二区| 成人中文视频| 麻豆国产va免费精品高清在线| 好吊操这里只有精品| 麻豆精品视频在线| 国产在线精品一区二区三区》| 波多野结衣在线网站| 一区二区三区日韩欧美| 亚洲成人福利在线观看| 久久精品凹凸全集| 久久精品国产亚洲7777| 亚洲综合久久网| 国产成人亚洲综合色影视| 日韩精品一线二线三线| av日韩国产| 欧美一区二区三区性视频| 国产精品815.cc红桃| 狠狠爱www人成狠狠爱综合网| 国产精品久久网| 亚洲aⅴ乱码精品成人区| 日韩一区有码在线| 国产精彩免费视频| 麻豆成人入口| 久久6免费高清热精品| 少妇又紧又色又爽又刺激视频 | 114国产精品久久免费观看| 男男激情在线| 亚洲成a人片在线不卡一二三区| xx欧美撒尿嘘撒尿xx| 伊人精品一区| 91国在线精品国内播放| 亚洲精品国产精品乱码不卡| 中文字幕日韩精品一区| 天天爱天天操天天干| 亚洲香蕉视频| 午夜欧美不卡精品aaaaa| 99视频国产精品免费观看a| 国产精品福利一区二区| 天天综合网日韩| 国产在线日韩精品| 日韩美女av在线免费观看| 无码国产色欲xxxx视频| 亚洲国产精品久久人人爱蜜臀 | 中文字幕在线观看国产| 国产日韩欧美综合在线| 妺妺窝人体色www在线观看| 同性恋视频一区| 欧美最顶级的aⅴ艳星| 天堂在线观看av| 五月开心婷婷久久| 成人在线视频免费播放| 99国产精品| 久久亚洲国产精品日日av夜夜| 性欧美又大又长又硬| 日韩成人在线观看| www.色国产| 国产欧美日韩另类一区| 激情视频免费网站| 国产精品二区不卡| 91精品国产一区二区三区动漫| xvideos国产在线视频| 欧美成人女星排名| 黄色片视频网站| 久久精品一区八戒影视| 欧洲av无码放荡人妇网站| 精品国产一区探花在线观看| 国产精品扒开腿爽爽爽视频 | 欧美wwwwww| 日本久久久久亚洲中字幕| 91亚洲欧美| 91精品在线免费| 国产一级特黄视频| 久久久亚洲高清| 国产探花在线看| 亚洲小说欧美另类社区| 久久久久久一区| 51一区二区三区| 欧美久久精品一级黑人c片| 亚洲精品久久久狠狠狠爱 | 免费国产黄色网址| 国产亚洲一区二区三区不卡| 成人乱人伦精品视频在线观看| av理论在线观看| 亚洲精品久久久久久久久久久久久| 午夜精品三级久久久有码| 亚洲国产岛国毛片在线| 久久精品一二三四| 男女精品视频| 一级黄色免费在线观看| 久久精品国产亚洲5555| 国产精品激情av电影在线观看 | 亚洲国产精品久久久久婷婷884| 白丝女仆被免费网站| 精品在线免费视频| 狠狠97人人婷婷五月| 国产精品久久久乱弄| 久久99精品久久久久久三级| 久久天堂影院| 8050国产精品久久久久久| 日本在线观看| 精品亚洲精品福利线在观看| 国产精品国产三级国产aⅴ| 五月综合激情网| 国产麻豆a毛片| 北条麻妃一区二区三区| 亚洲欧美自拍另类日韩| 国产毛片久久| 男人日女人的bb| 欧美午夜精彩| 久久婷婷国产综合尤物精品| 豆花视频一区| 国产精品第3页| av2020不卡| 久久91亚洲精品中文字幕| 国产黄色免费在线观看| 亚洲成人激情在线| 国产露脸无套对白在线播放| 日本精品一区二区三区高清| 国产精品一区二区6| 亚洲制服丝袜在线| 欧美视频www| 国产精品国模大尺度视频| 成人精品999| 91麻豆福利精品推荐| av影片在线播放| 国产一区二区在线看| 岛国毛片在线播放| 久热精品视频| 国产乱子夫妻xx黑人xyx真爽| 精品电影一区| 日韩视频 中文字幕| 久久久久久久久国产一区| 日韩性感在线| 国内精品伊人久久久| 欧美另类高清视频在线| 欧美影院天天5g天天爽| 国产99在线免费| 亚洲天堂av资源在线观看| 亚洲影院污污.| 国产午夜久久av| 91人人爽人人爽人人精88v| 亚州欧美在线| 91免费高清视频| 日本免费一区二区视频| 91成人在线看| 色悠久久久久综合先锋影音下载| 91影院在线免费观看视频| 国产在线不卡一区二区三区| 成人有码在线播放| 99久久久成人国产精品| 成人高清视频观看www| 国产精品白丝久久av网站| 亚洲va欧美va国产综合剧情| 蜜桃精品视频| 国产精品xxx在线观看www| 成人激情自拍| 99re视频| 美女av一区| 欧美一级二级三级九九九| 狠狠色狠狠色综合婷婷tag| 丝袜足脚交91精品| 国产精品伦理久久久久久| 九九久久九九久久| 亚洲精品社区| 一本久道中文无码字幕av| 久久国内精品自在自线400部| 欧美美女一级片| 国产91在线|亚洲| 荫蒂被男人添免费视频| 久久久久88色偷偷免费| 日本黄色激情视频| 一区二区三区四区不卡视频| 国产成人无码精品亚洲| 91搞黄在线观看| 97在线播放免费观看| 精品久久国产老人久久综合| 深夜福利在线看| 中文字幕欧美精品在线 | 亚洲女人的天堂| 国产精品白浆一区二小说| 色婷婷av一区二区三区gif| 怡春院在线视频| 欧美va天堂va视频va在线| 你懂的在线播放| 久久五月天综合| 美女搞黄视频在线观看| 国产日韩一区在线| 人人网欧美视频| 一区二区高清视频| 黄色av一区| jizz欧美性11| 99久久99久久综合| 中国一级片在线观看| 狠狠色噜噜狠狠狠狠97| 亚洲影视一区二区| 日韩电影网在线| www.欧美日本韩国| 国产成人精品视频在线| 视频二区欧美毛片免费观看| 欧美日韩一区二区三区在线观看免| 66视频精品| 91淫黄看大片| 99久久久精品| 国产日产精品一区二区三区的介绍 | 亚洲精品欧洲精品| 一本不卡影院| 亚洲精品一二三四| 国产精品免费免费| 国产伦精品一区二区三区视频我| 欧美一卡二卡三卡| jizz在线观看视频| 国产91精品久久久| aaa国产精品| 异国色恋浪漫潭| 免费黄网站欧美| 国产三级国产精品| 亚洲国产综合色| 国产欧美综合视频| 中文字幕免费国产精品| 成人黄色免费短视频| 精品一区二区日本| 亚洲第一黄色| 一个人看的视频www| 国产精品成人免费| 无码人妻aⅴ一区二区三区有奶水| 精品久久久久久久人人人人传媒 | 色噜噜狠狠一区二区三区狼国成人| 26uuu色噜噜精品一区| 国产奶水涨喷在线播放| 日韩你懂的在线观看| 超碰在线免费播放| 91亚洲精品久久久| 99久久精品网| 天天摸天天舔天天操| 国产精品免费观看视频| 国产精品成人久久久| 国产一区二区成人| 一二区成人影院电影网| 日本公妇乱淫免费视频一区三区| 亚洲欧美视频一区二区三区| 色哟哟视频在线| 亚洲一二三区在线观看| 国产刺激高潮av| 久久久久久久久电影| 久久1电影院| 国产亚洲天堂网| 久久青草国产手机看片福利盒子| 超碰中文字幕在线| 亚洲精品自在久久| 日本高清不卡一区二区三区视频 | 欧美高清日韩| 国产吃瓜黑料一区二区| 亚洲一区日韩精品中文字幕| 国产 欧美 自拍| 久久免费精品视频| 日韩免费电影在线观看| 国产三区在线视频| 中文在线免费一区三区高中清不卡| 中文字幕av网站| 久久天天躁狠狠躁夜夜躁| 国内小视频在线看| 精品国产综合区久久久久久| 久久动漫亚洲| 亚洲の无码国产の无码步美| 一本大道久久a久久精品综合| 第九色区av在线| 国产免费成人av| 亚洲精彩视频| 中文字幕第3页| 欧美午夜精品久久久久久久| 成人资源www网在线最新版| 国产日韩精品在线播放| 欧美日韩hd| 三级男人添奶爽爽爽视频| 欧美自拍偷拍一区| 免费人成在线观看播放视频| 懂色av一区二区三区在线播放| a91a精品视频在线观看| 国产成人一区二区在线观看| 日韩一区二区三区在线观看| 久草在线资源站手机版| 亚洲图片欧洲图片日韩av| 粉嫩一区二区三区在线看| 精品国产www| 国产做受高潮69| 久久亚洲国产| 成人手机在线免费视频| 欧美日本在线观看| xxx在线免费观看| 亚洲日本精品一区| 97久久精品人人澡人人爽| 国产精品女人久久久| 欧美在线视频一二三|