15 g 的数据库是很小的库了!这个量级正常是不应该存在慢的问题。
1慢可能是服务器的配置过低,尤其是阿里云服务器租用的配置太低了!感觉你说所的找不到存储过程好像就是阿里云最低配的问题。
2你们还用存储过程,和我们以前的系统一样,所有的业务逻辑都是存储过程完成,所以所有的压力都在数据库服务器上,服务器就容易卡,用存储过程还无法负载均衡。
3表的索引缺失或不合理,很重要的原因。
4使用了大量的触发器,触发器是开始一下爽,后来苦一生。坚决不用触发器,数据量大这个是要命的。
5存储过程里使用大量的link 访问其他数据库服务器,尤其是link 给远程库写数据;如果还写远程数据包含在分布式事务里这就更要命了。
日志1g 慢和它没一毛钱关系,就是占一点空间而已
一般面对几千万级的数据,刚开始可能都是把数据放在MySQL的一个单库单表里,但往往这么大量级的数据到后期,数据库查询速度就很慢,因为数据量级太大,导致表的索引很大,树的层级很高,进而导致搜索性能下降,而且能放内存缓存的数据页是比较少。
所以推荐MySQL单表数据量不超过1000w,最好是在500w内,若能控制在100万以内,那是 最佳选择,基本单表100万以内的数据,性能上不会有太大的问题,前提是,只要你建好索引就行,其实保证MySQL高性能通常没什么特别高深的技巧,就是控制数据量不要太大,另外就是保证你的查询用上了索引就行。
针对该问题,就能分库分表,可选择将该用户大表拆分为比如100张表,那么此时几千万 数据瞬间分散到100个表里去,类似
这样的100个表,每个表也就几十万数据而已。
其次,可将这100个表分散到多台数据库服务器上去,此时要分散到几台服务器呢你要考虑两个点,一个是数据量有多少个GB/TB,一个是针对用户中心的并发压力有多高。
互联网公司对用户中心的压力不会高到离谱,因为一般不会有很多人同时注册/登录或同时修改自己的个人信息,所以并发不是大问题。
数据量层面,一般1亿行数据,大致在1~几GB之间的范围,和具体你一行数据有多少个字段也有关,所以说你几千万的用户数据,往多了说也就几个GB。这点数据量,对服务器存储空间没压力。
综上,此时你完全能给他分配两台数据库服务器,放两个库,然后100张表均匀分散在2台服务器。分的时候,注意指定一个字段来分,一般就指定userid, 根据用户id进行hash后,对表进行取模,路由到一个表里去,这就能让数据均匀分散。
至此搞定用户表的分库分表,只要给系统加上数据库中间件技术,设置好路由规则,即可轻松对2个分库上的100张表crud。平时针对某个用户增删改查,直接对他的userid进行hash,然后对表取模,做个路由,就知道到哪个表里去找这个用户的数据了。
但是这里可能会出现一些问题:用户在登录时,可能不是根据userid登录,而是根据username、手机号,此时你就没有userid了, 怎么知道去哪个表里找这个用户的数据判断是否能登录 对此。常规方案是建立一个索引映射表,搞个表结构为 (username, userid)的索引映射 表,把username和userid一一映射, 然后针对username再做一次分库分表,把这个索引映射表可拆分为比如100个表分散在两台服务器。然后用户登录时,就能根据username先去索引映射表里查找对应userid,比如对username进行hash,然后取模路由到一个表里去,找到username对应的userid,接着根据userid进行hash再取模,路由到按照userid分库分表的一个表里,找到用户的完整数据。但这种方式会把一次查询转化为两个表的两次查询,先查索引映射表,再根据userid去查具体的数据,性能有损耗,不过有时为解决分库分表问题,也只能用这种方案。
另外就是若公司运营团队里,有用户管理模块,需要对公司的用户按照手机号、住址、年龄、性别、职业等各种条件搜索,这咋办
没啥好办法,基本上就是要对你的用户数据表进行binlog监听,把你要搜索的所有字段同步到ES,建立好搜索的索引。然后你的运营系统就可以通过ES进行复杂的多条件搜索,ES是适合干这个事儿的,然后定位到一批userid,通过userid回到分库分表环境里去找出具体的用户数据,在页面上展示出来即可。
这就是一套比较常规和完整的分库分表的方案。
数据的四个基本概念
数据
数据是数据库中存储的基本对象,描述事物的符号记录称为数据。数据的含义称为数据的语义,数据与其语义是不可分的。
数据库(DB)
是长期储存在计算机内、有组织的、可共享的大量数据的集合
数据库管理系统(DBMS)
DBMS是一个大型复杂的基础软件系统,位于用户与 *** 作系统之间的一层数据管理软件。DBMS能够科学地组织和存储数据、高效地获取和维护数据。
DBMS具有数据定义(提供数据库定义语言DDL),数据组织、存储和管理(提供数据 *** 作语言DML),数据库的事务管理和运行管理(安全性等),数据库的建立和维护等功能。
数据库系统(DBS)
数据库系统由数据库、数据库管理系统(及其应用开发工具)、应用程序、数据库管理员四部分构成。
数据库、数据库系统、数据库管理系统三者的区别
范围最大的是数据库系统DBS(database system),在概念上包含其他两者。数据库系统中,最外层的是数据库应用系统DBAS(datebase application system),中间是数据库管理系统DBMS(database management system),最里层才是数据库DB(database)。数据库系统是为了适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为了实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质 、处理对象和管理系统的集合体。
数据库中的信息是通过数据库管理系统来进行组织、存储、管理、开发,数据库是按照数据结构来组织、存储和管理数据的仓库。
而数据库管理系统是前端与用户交互的应用系统和数据库之间的媒介,是一种 *** 纵和管理数据库的大型软件,用于建立、使用和维护数据库。
大白话个人理解
最烦用概念来解释概念,按我个人的理解,可以把数据理解成一堆堆的货物,数据库就好比是一个大仓库,想法设法要把各种量级的数据要给放进去,放好。而数据库管理系统则要想办法管理好这个仓库,怎么维护好让数据别丢失,怎么又快又省地增删改查数据。而数据库应用系统,就是提供给用户的访问接口,学过Web的东西可以结合MVC来理解这一点。
数据库就好比Model,负责底层;数据管理系统好比Controller,负责交互;View好比视图,封装好让用户来用。而整个“MVC“合起来并称数据库系统,很多时候也简称数据库,是广义上的数据库。
这怎么好比,根据使用数据库的类型,数据库的架构,表的数量,企业规模业务形态的不同,使用时间长短不同,数据量也不同啊,比如我们公司,批发企业,前一套“进销存”(SQL2000)四年库是8G多,现在一套ERP(Sybase125),一年半,库是3G多。同行另一家公司,一百多家连锁药房的企业,二年数据量都有21G(Sybase125)。
以上就是关于数据库高手请进 数据文件过大的问题全部的内容,包括:数据库高手请进 数据文件过大的问题、亿级用户大表如何作水平拆分、数据、数据库、数据库系统的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)