暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据分区很简单

youcongtech 2022-04-10
802




本文主要内容:

  • 1.什么是数据分区?

  • 2.为什么要数据分区?

  • 3.数据分区有哪些类型?

  • 4.以MySQL为例,分区表的优缺点有哪些?

一、什么是数据分区?

分区是将表和索引分成较小的部分,甚至将其细分为较小的部分。可以将它想象成在一个大仓库(一张大桌子)中存放着数百万本不同主题和年份(例如2000–2019年)的不同杂志。分区意味着您将把它们组织在那个大仓库内的不同房间中。它们仍然属于一个仓库,但是现在您根据数据库分区策略在逻辑级别上对它们进行分组。

二、为什么要数据分区?

它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。

三、数据分区有哪些类型?

  • 1.范围分区;

  • 2.哈希分区;

  • 3.列表分区。

1.范围分区

概念:按照数据表中某个值的范围进行分区,根据值的范围,决定将该数据存储在哪个分区中

使用场景:通过绑定自定义的列进行分区,其中最突出的就是根据时间分区,例如 : 客户下单时间,可以分月,季度,半年的形式来缩减数据的量以免在数据库查询时进行全表扫描。

创建分区:

    create table orders
    (
    order_no NUMBER(5),
    person VARCHAR2(30),
    year_month NUMBER(6)
    )
    //year_month
    PARTITION BY RANGE (year_month)


    (
    // 分区的区域 p1,p2,..pn
    PARTITION P1 values less than (4) tablespace data0,
    PARTITION P2 values less than (8) tablespace data1,
    ......
    PARTITION Pn values less than (99) tablespace datan
    );


    2.列表分区

    概念:当数据为一系列离散的数值时,可以进行列表分区。列表分区的分区键由一个单独的列组成,进行操作时,可以直接通过所要操作的数据去查询相应 的分区。

    列表分区的优缺点归纳:

    • (1)优点:列表分区最大的优势是可以通过分区来很方便的查找相应的数据,但是列表分区有很大的局限性,这种分区技术要求数据的重复率比较高。

    • (2)缺点:分区与记录值是无关 的,实施难度和可维护性都比较差,而且他的数据分区可能不均匀,这时需要用到哈希分区来存储数据了。

    使用场景:
    取一些数据库中列的值经常性重复的,例如:财经新闻的地域标签,每个新闻都有标签,根据用户的喜爱或者经常点击的新闻在数据库中添加新闻标签,等下次展示新闻时根据新闻标签去搜索新闻。

    创建分区:

      create table news
      (
      news_no NUMBER(5),
      person VARCHAR2(30),
      year_month NUMBER(6)
      )
      //通过person这一列进行分区
      PARTITION BY LIST (person)


      (
      //分区p1的值是abc
      PARTITION P1 values ('abc'),
      //分区p2的值是def,adf
      PARTITION P2 values ('def','adf'),
      .......
      PARTITION Pn values ('wfs')
      );

      3.哈希分区

      概念:所谓哈希分区,首先将分区编号,之后通过哈希函数来指定分区存储数据。哈希分区一般追求的是数据在分区上均匀分布的特性。在哈希分区中,用户不必考虑自己指定一个列值或列值集合应该存在哪个分区上,数据库自动完成相应的工作。用户只需要确定哈希分区产生的分区数量,以及确定哈希分区的哈希函数进行哈希分区的操作。

      使用场景:将股票的代码等唯一性比较强的列设置为分区条件。

      哈希分区的特点归纳:

      • (1)基于分区字段的哈希值,自动将记录插入到指定分区中;

      • (2)分区数一般是2的幂;

      • (3)易于实施;

      • (4)总体性能是最佳的;

      • (5)更适于静态数据;

      • (6)适于数据的均匀存储;

      • (7)数据管理能力比较弱;

      • (8)对数据值无法控制。

      创建分区:

        create table stocks
        (
        stocks_no NUMBER(6),
        person VARCHAR2(30),
        year_month NUMBER(6)
        )
        PARTITION BY hash(stocks_no) partitions 4 as select * from dba_objects;


        1.优点

        在MySQL Server层分区表为一个表,而在MySQL存储引擎层分区表是多个表,因此有如下特点:

        • (1)分区表对业务透明,只需要维护一个表的数据结构。

        • (2)DML操作加锁仅影响操作的分区,不会影响未访问分区。

        • (3)通过分区交换快速将数据换入和换出分区表。

        • (4)通过TRUNCATE操作快速清理特定分区数据。

        • (5)通过强制分区仅访问特定分区数据,减少操作影响。

        • (6)通过大数据量分区能有效降低索引层数,提高查询性能。

        2.缺点

        由于分区表在MySQL Server层为一个表,因此:

        • (1)DDL操作需要锁定所有分区,导致所有分区上操作都被阻塞。

        • (2)当表数据量较小时,分区表和非分区表性能相近,分区表效果有限。

        • (3)当表数据量较大时,对分区表进行DDL或其他运维操作难度大风险高。

        • (4)分区表使用较少,存在未知风险多,BUG多BUG多BUG多,MySQL社区版本免费,横向扩展成本低,分库分表实现简单且中间件完善。- - (5)当单台服务器性能无法满足时,对分区表进行分拆的成本较高,而分库分表能很容易实现横向分拆。

        • (6)当分区表操作不当导致访问所有分区时,会导致严重的性能问题,而分库分表操作不当仅影响访问的表。

        • (7)使用分库分表可以有效运维降低运维操作影响,对1亿数据量表做DDL操作需要谨慎评估,而对10万数据量表做DDL操作可以默认其很快完成。

        • (8)使用分库分表可以有效减小宕机或其他故障影响,将数据分库分表到10套群集上,一套群集发生故障仅影响业务的一成。



        文章转载自youcongtech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论