数据库分区 - 水平与垂直 - 规范化和行分裂之间的区别?

 林寿辉 发布于 2023-02-12 18:47

我试图掌握数据库分区的不同概念,这就是我对它的理解:

水平分区/分片:将表拆分到不同的表中,该表将包含初始表中的行的子集(如果按大陆分割Users表,我已经看到了很多示例,如北美的子表,另一个为欧洲等...).每个分区位于不同的物理位置(了解"机器").据我所知,水平分区和分片是完全相同的(?).

垂直分区:根据我的理解(http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx),有两种垂直分区:

规范化(包括通过拆分表并使用外键链接来从数据库中删除冗余).

Row Splitting,这是我不明白的,NormalizationRow Splitting有什么区别?那两种技术在哪些方面有所不同?

我还读过这篇文章(数据库水平和垂直缩放之间的差异),水平分区和垂直分区之间的区别在于,您通过添加更多机器来扩展第一个,而在第二个中您通过添加更多功率进行扩展( CPU,RAM)到你现有的机器,是一个正确的定义?我认为这两种技术之间的核心区别在于您分割表格的方式.

对于大量问题我很抱歉,但是我有点困惑,因为我遇到的很多不同的网站都说不同的东西.

任何帮助澄清将不胜感激.任何带有几个表格的简单演示的链接也会非常有用.

2 个回答
  • 数据库中的水平分区

    保持所有领域EG:表Employees

    ID,

    名称,

    地理位置 ,

    电子邮件,

    指定,

    电话

    EG:1.保留所有字段并在多台machine.ay id = 1-100000或100000-200000记录中分配记录,每台记录在一台机器上并分布在多台机器上.

    EG:2.为EG区域保留单独的数据库:亚太地区,北美

    密钥:根据标准挑选行集

    数据库中的垂直分区

    它类似于规范化,其中同一个表被分成多个表,并在需要时与连接一起使用.

    EG: , ,id 放在一个表,这可能不被频繁访问被放在另一个.namedesignation
    phoneemail

    关键:根据标准挑选一组列.

    水平/垂直缩放与分区不同

    水平缩放:

    为了增加更多的机器,以提高包括数据库在内的任何系统的响应能力和可用性.这个想法是将工作负载分配给多台机器.

    垂直缩放:

    是以CPU,内存形式向现有机器或机器添加更多功能,以提高包括数据库在内的任何系统的响应能力和可用性.在虚拟机设置中,可以虚拟配置,而不是添加真正的物理机.

    Sameer Sukumaran

    2023-02-12 18:49 回答
  • 分区是一个相当普遍的概念,可以在许多情况下应用.当它考虑关系数据的分区时,它通常指的是逐行(水平)或逐列(垂直)分解表.

    垂直分区(又称行分割)使用与数据库规范化相同的分割技术,但通常术语(垂直/水平)数据分区是指物理优化,而归一化是概念级别的优化.

    既然你要求一个简单的演示 - 假设你有一个这样的表:

    create table data (
        id integer primary key, 
        status char(1) not null, 
        data1 varchar2(10) not null, 
        data2 varchar2(10) not null);
    

    data 垂直分区的一种方法:按如下方式拆分:

    create table data_main (
        id integer primary key,
        status char(1) not null,
        data1 varchar2(10) not null );
    
    create table data_rarely_used (
        id integer primary key,
        data2 varchar2(10) not null,
        foreign key (id) references data_main (id) );
    

    例如,当您在查询中很少需要列data2时,可以应用这种分区.分区data_main将占用更少的空间,因此全表扫描将更快,并且它更有可能适合DBMS的页面缓存.缺点:当您必须查询所有列时data,您必须加入表,查询原始表将更加昂贵.

    请注意,您正在以与规范化表格时相同的方式拆分列.但是,在这种情况下data,已经可以将其标准化为3NF(甚至BCNF和4NF),但您决定进一步拆分它以进行物理优化.

    使用Oracle语法data 水平分区的一种方法:

    create table data (
        id integer primary key, 
        status char(1), 
        data1 varchar2(10), 
        data2 varchar2(10) )
        partition by list (status) ( 
           partition active_data values ( 'A' ),
           partition other_data values(default) 
        );
    

    这将告诉DBMS data在两个段(如两个表)内部存储表,具体取决于列的值status.这种分区data方式可以应用,例如,当您通常只查询一个分区的行时,例如状态"A"行(让我们称之为活动行).像以前一样,完全扫描会更快(特别是如果只有很少的活动行),活动行(和其他行resp.)是连续存储的(它们不会分散在它们与不同行共享的页面周围状态值,活动行更有可能位于页面缓存中.

    2023-02-12 18:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有