iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库分库分表和要注意的问题
  • 405
分享到

数据库分库分表和要注意的问题

数据库分库分表和要注意的问题 2019-08-28 11:08:52 405人浏览 绘本
摘要

分库 分库讲白了就是比如现在你有一个数据库服务器,数据库中有两张表分别是用户表和订单表。 如果要分库的话现在你需要买两台机子,搞两个数据库分别放在两台机子上,并且一个数据库放用户表,一个数据库放订单表。 这样存储压力就分担到两个服务器上

数据库分库分表和要注意的问题

分库
分库讲白了就是比如现在你有一个数据库服务器数据库中有两张表分别是用户表和订单表。
如果要分库的话现在你需要买两台机子,搞两个数据库分别放在两台机子上,并且一个数据库放用户表,一个数据库放订单表。


这样存储压力就分担到两个服务器上了,但是会带来新的问题,所以东西变复杂了都会有新的问题产生。
1、联表查询问题
也就是join了,之前在一个数据库里面可以用上join用一条sql语句就可以联表查询得到想要的结果,但是现在分为多个数据库了,所以join用不上了。就比如现在要查注册时间在2019年之后用户的订单信息,你就需要先去数据库A中用户表查询注册在2019年之后的信息,然后得到用户id,再拿这些id去数据库B订单表中查找订单信息,然后再拼接这些信息返回。所以等于得多写一些代码了。
2、事务问题
搞数据库基本上都离不开事务,但是现在不同的数据库事务就不是以前那个简单的本地事务了,而是分布式事务了,而引入分布式事务也提高了系统的复杂性,并且有些效率不高还会影响性能例如Mysql XA。还有基于消息中间件实现分布式事务的等等这里不展开讲述。

分表
我们已经做了分库了,但是现在情况是我们的表里面的数据太多了,就一不小心你的公司的产品火了,像抖音这种,所有用户如果就存在一张表里吃不消,所以这时候得分表。分别又分垂直分表和水平分表。

垂直分表
垂直分表的意思形象点就像坐标轴的y轴,把x轴切成了两半,对应到我们的表就是比如我们表有10列,现在一刀切下去,分成了两张表,其中一张表3列,另一张表7列。
这个一刀切下去让两个表分别有几列不是固定的,垂直分表适合表中存在不常用并且占用了大量空间的表拆分出去。
就拿头条的用户信息,比如用户表只有用户id、昵称、手机号、个人简介这4个字段。但是手机号和个人简介这种信息就属于不太常用的,占用的空间也不小,个人简介有些人写了一坨。所以就把手机号和个人简介这两列拆分出去。
那垂直分表影响就是之前只要一个查询的,现在需要两次查询才能拿到分表之前的完整用户表信息。

水平分表
水平分表的意思形象点就像坐标轴的x轴,把y轴切成了两半(当然不仅限于切一刀,可以切好几份)。也拿用户表来说比如现在用户表有5000万行数据,我们切5刀,分成5个表,每个表1000万行数据。
水平分表就适合用户表行数很多的情况下,一般单表行数超过5000万就得分表,如果单表的数据比较复杂那可能2000万甚至1000万就得分了,这个得看实际情况有些表很简单可能一亿行都不用分。所以当一个表行数超过千万级别的时候关注一下,如果没有性能问题就可以再等等看,不要急着分表,因为分表会是带来很多问题。
水平分表的问题比垂直分表就更烦了。要考虑怎么切,讲的高级点就叫路由。
1、按id也就是范围路由,比如id 值1999万的放一张表,1000万1999放一张表,一次类推。这个得试的,因为范围分的大了,可能性能还有问题,范围分的小了。那表不得多死。
这种分法的好处就是容易切啊,简单粗暴,以后新增的数据分表都不会影响到之前的数据,之前的数据都不需要移动。
2、哈希路由
就是取几列哈希一下看看数据哪个库,比如拿id来做哈希,1500取余8等于4,所以这条记录就放在user_4这个表中,2011取余8等于3,所以这条记录就放在user_3中。
这种分法好处就是分的很均匀,基本上每个表的数据都差不多,但是以后新增数据又得分表了咋办,以前的数据都得动,比较烦!
3、搞一张表来存储路由关系
还是拿用户表来说,就是弄一个路由表,里面存userId和表编号,表示这个userId是这张user表的的。
这种方式也简单,之后又要分表了之后改改路由表,迁移一部分数据。但是这种方法导致每次查询都得查两次,并且如果路由表太大了,那路由表又成为瓶颈了!
再说说查询时候的问题。
比如你要查注册时间最早的前100名用户,这就等于你得在水平分的每一张表都order by 一下注册时间并且取100个,然后再把每个表的100个结果对比一下得到最终的结果。
首先操作变麻烦了,以前一个order by就搞定的事情现在变的复杂了,而且还得考虑一个因素就是时间的问题,如果你拆成了20个表,那你得执行20个order by,如果是串行执行的话,这个时间开销也是个问题!

分库分表的实现
具体实现也分为程序代码封装、数据库中间件封装。实现难度会比读写分离更大,至于两种封装的比较在讲读写分离时候已经说了,这里不再赘述。

总结
说了这么多好像分库分表一点都不好啊,没错会引入很多问题,所以在架构设计要遵循演化原则,任何东西都不是一蹴而就的,在不同场景适配不同的架构,架构只有合适的,没有一个架构可以适配任何场景。
在软件中简单够用就是好的,技术没有贵贱,不是用了分布式就牛逼,越复杂的系统维护的成本和难度越高,出现问题的几率越大。这种架构的演化往往都是被用户所驱动的,可以说是"不得已而为之"。
基本上单机数据库可以支撑10万用户量级别。所以一般情况下像数据库吃不消就升级硬件,优化数据库配置、优化代码、引入Redis等。只有在真的不行了才上这些更复杂的东西。

您可能感兴趣的文档:

--结束END--

本文标题: 数据库分库分表和要注意的问题

本文链接: https://www.lsjlt.com/news/5861.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库的分库分表需要注意什么
    这篇文章主要讲解了“数据库的分库分表需要注意什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库的分库分表需要注意什么”吧!切入层次以下,范围界定在JA...
    99+
    2024-04-02
  • 数据库分表以及优化需要注意什么
    这篇文章给大家介绍数据库分表以及优化需要注意什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  数据库设计时,为什么进行分表分库一般多少数据量开始分表分库分库分表的目的什么是数据库垂...
    99+
    2024-04-02
  • centos备份数据库要注意哪些问题
    在备份CentOS上的数据库时,需要注意以下问题: 数据库的备份频率:确定备份数据库的频率,根据数据库的重要性和业务需求来决定备...
    99+
    2024-04-09
    centos 数据库
  • 云数据库加密需要注意什么问题
    这篇“云数据库加密需要注意什么问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“云数据库加密需要注意什么问题”文章吧。云数据...
    99+
    2023-06-17
  • 怎么解决数据库分库分表无限扩容问题
    这篇文章主要讲解了“怎么解决数据库分库分表无限扩容问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决数据库分库分表无限扩容问题”吧!单体应用每个创业...
    99+
    2024-04-02
  • PHP中的数据分库和分表
    PHP是一种常用的编程语言,用于开发Web应用程序。在现代Web应用程序中,数据处理是非常重要的一部分。随着Web应用程序中使用数据的不断增加,数据的分库和分表已经成为数据处理的基本技术之一。在PHP应用中,数据分库和分表也是一个非常重要的...
    99+
    2023-05-23
    PHP编程 数据分库 数据分表
  • 数据库分库分表是什么,什么情况下需要用分库分表
    目录数据量在什么情况下需要分表?1、oracle2、mysql3、sqlserver分库分表是什么,什么情况下需要用分库分表1、什么是分库分表?2、什么情况下需要分库分表?3、分库分...
    99+
    2024-04-02
  • 数据库分库分表后如何解决主键唯一的问题
    本篇文章给大家分享的是有关数据库分库分表后如何解决主键唯一的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在此之前我们介绍了数据库的分库分...
    99+
    2024-04-02
  • 访问数据库要注意哪些事项
    访问数据库时需要注意以下事项:1. 数据库连接:确保正确建立数据库连接,并在不使用时及时关闭连接,避免资源泄漏和性能问题。2. 数据...
    99+
    2023-09-22
    数据库
  • MariaDB Spider数据库分库分表的方法
    本文小编为大家详细介绍“MariaDB Spider数据库分库分表的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“MariaDB Spider数据库分库分表的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-29
  • 数据库中在什么情况下需要用分库分表
    这篇文章主要介绍数据库中在什么情况下需要用分库分表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据量在什么情况下需要分表?为了保证数据库的查询效率,当数据达成一定量时建议进行分表操作1、oracle当oracle单...
    99+
    2023-06-14
  • 数据库的分表分库算法有哪些
    这篇文章主要讲解了“数据库的分表分库算法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库的分表分库算法有哪些”吧!以下是几种常见的分表算法。1.按...
    99+
    2024-04-02
  • Mysql数据库分库分表全面瓦解
    目录1 为什么要分库分表2 垂直拆分(Scale Up 纵向扩展)2.1 垂直分库2.2 垂直分表 3 水平拆分(Scale Out 横向扩展) 3.1 库内分表...
    99+
    2024-04-02
  • 数据库中如何实现分库分表
    这篇文章将为大家详细讲解有关数据库中如何实现分库分表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 分片是解决数据库存储容量限制的直接途径。分片包括垂直分片与水平分片两...
    99+
    2024-04-02
  • MariaDBSpider数据库分库分表实践记录
    目录分库分表部署 MariaDB 实例Docker 部署虚拟机部署MariaDB 配置检查每个实例配置 Spider远程表基准性能测试加入后端数据库哈希分片根据值范围分片根据列表分片...
    99+
    2024-04-02
  • 数据库中​ 为什么需要拆分表
    小编给大家分享一下数据库中 为什么需要拆分表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据库拆分表可分为水平拆分和垂直拆分,...
    99+
    2024-04-02
  • SQLServer数据库创建数据仓库已分区表的意思是什么
    这篇文章主要介绍“SQLServer数据库创建数据仓库已分区表的意思是什么”,在日常操作中,相信很多人在SQLServer数据库创建数据仓库已分区表的意思是什么问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • oracle数据库CPU过高问题分析
    这篇文章主要讲解了“oracle数据库CPU过高问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle数据库CPU过高问题分析”吧!一、执行一条...
    99+
    2024-04-02
  • 数据库表空间扩容要注意哪些事项
    考虑当前数据库的使用情况,确定是否真的需要扩容表空间。可以通过查看表空间的使用情况和监控数据库性能来判断是否需要扩容。 在扩...
    99+
    2024-05-11
    数据库
  • 网站数据库设计应注意哪些问题
    本篇文章为大家展示了网站数据库设计应注意哪些问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现sql server数据库的优化,首先要有一个好的数据库设计方案。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作