关于数据库的水平分割和垂直分割的几点介绍

关于数据库的水平分割和垂直分割的几点介绍,第1张

水平切分估计是指按照时间切分,垂直切分是指按照设备ID切分,这样切分后,设备的状态日志会以记录的形式存储在不同的数据文件中,数据库对这些文件的访问可以通过设备ID和时间快速地查找到。而且应用中只是存储日志数据,不需要进行频繁的实时查询和统计,所以基本上数据库的任务就是接收数据,写入到文件中,文件对应的分片满了就再创建新的分片文件。这样整体的性能没有任何变化,系统的负载也是维持在一个常量的水平。

如果要对日志进行统计和分析,则会随着日志数量增加,性能显著下降,但这里没有这样的需求,即使有,也是用另外一组离线分析服务器进行处理。

1.水平拆分:

是根据主要查询条件,水平分表。例如,用户关系表, 根据用户id:

用户id为 1, 2, 3, 4,5 的五个用户,采用取模的方式水平分表。将uid mod 3,取余数

这样,id为1,4的用户就在 t_user_1 的表里, id 为2,5 的用户在 t_user_2的表里,id为3的就在t_user_3的表里。这样,所有用户就平均水平分布在三个表里。

查询时,根据查询条件,动态算出,该用户信息存储在哪个表里

2.垂直拆分:

是根据数据量进行分表。例如,网购订单表:

数据量过大,可能单表几千万条数据。那么,垂直分表, 将id为1-1000000放在第一张表里。

将id 1000000-2000000的放在第二张表里。这样,就实现了垂直分表。

查询时,根据查询条件,动态算出,该订单信息存储在哪个表里

同样可以,水平分库, 垂直分库。 也可以两者相结合,形成数据库矩阵集群。 数据表的矩阵。

数据库范式

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

具体可查看:http://baike.baidu.com/link?url=JlYxe21nUpGPzKprX5xF5SZRKop23u9OnXAaZNdtFBEAM4oCKxWgFtCgC8QhCYlE8oSFRatUvhPptcmwVSWfG_

为了维持范式,会降低数据库的查询性能,大量冗余信息等。在实际生产环境,很多情况下,不能去实现这种范式,所以要违反范式的定义,就是反范式数据库设计。

范式只是一个理想化状态,仅用于关系型数据库。

最近项目中遇到一个场景,需要能够在一个方法中 *** 作多个具有相同表结构数据库(你可以理解为一个表中的数据被水平拆分到多个库中,查询时需要遍历这多个库)。经过笔者几天的研究,最终解决了问题,并且写了一个demo共享到我的github。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10027849.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存