专栏首页IT米粉数据库的使用你可能忽略了这些 (续)

数据库的使用你可能忽略了这些 (续)

前言

之前写过一篇文章《数据库的使用你可能忽略了这些》,主要是从一些大家使用使用时容易忽略的地方,如:字段长度、表设计等来说明,这篇文章同样也是这样的主题,只是从另外的几个方面来说说数据库使用中,容易忽略,导致入坑的地方。

合理预估数据量

在数据库进行表设计的时候,就应该评估可能产生的数据量,数据量会对整个开发和代码的健壮性有很大的影响。开发一个数据量万级别、十万级别、百万级别、千万以上级别数量的应用,在开发思路、技术选型、架构都能都要很大的差别。 基本上的我的原则是:

  • 万级别的数据库,可以随意一点,SQL编写有好的习惯;
  • 十万级别,注意索引,注意联表性能;
  • 百万级别,尽量减少联表,尽量不要做汇总查询,如查总数 ;
  • 千万以上级别,除缓存之外,使用分表分库 ;

很多系统因为在设计表的时候,没有很好的预估的后期系统的发展,导致上线不久就出现无法支撑的情况,代码上太多的联表查询,不在乎基础的SQL性能,导致数据库的瓶颈很快就显现出来,不得不重构系统。设计数据库的时候,一定是基于业务进行设计的,对业务的发展有一定的预估,看得长远一点。

合理预估并发访问量

数据库有天然的瓶颈,就是并发量。我们一般会通过缓存来减少数据库的并发连接,以及对数据库的操作,数据库的并发,不是只有大型平台才会遇到,很多中小平台其实也会面临这样的问题,例如:

循环进行数据库的操作

这个问题,上一篇文章我也提到过,不要在循环里进行数据库的操作,这个会直接导致数据库连接数暴增,影响非常严重。虽然是个比较低级的问题,但是出现的概率其实是非常高的,在我身边看到很多很多这种案例了,这种问题,就是需要程序员自己本身避免这些问题,当然,也可以通过一些手段去监控,找到这些问题,只是会比较麻烦一点。

业务本身的高频次数据请求

其实有些业务,即使是中小型的平台,也会有高并发请求数据库的情况,常见的例子如:日志。例如,我们需要抓取到所有人的操作日志,或者所有模块的加载时间,并且持久化保存。如果,当初选型通过Mysql去记录这些数据,那么就很容易遇到高并发的问题。这种就是属于选型的错误了。

数据库对高并发的处理一直是短板,所以应该尽量避免高并发的数据库操作,查询通过缓存处理,增删改这可以通过MQ或者Kafka这样的工具异步进行处理,如果对数据库的结构化要求不高,则可以用hbase或者hive进行数据库的保存。

数据库线程池的合理使用

现在数据库的操作都是使用线程池的,线程池主要是用来控制数据库的连接数,其实连接池是不属于数据库范畴,但是,一般我们使用和数据库结合非常紧密,所以在这里一并说明。 一般线程池都会有这样的几个参数:

参数

说明

最小连接数

不管是否有数据库的操作,这几个连接都会一直存在,

最大连接数

允许的最大的连接数,如果超过了这个数据,则无法申请连接,只能等待,或者异常

回收时间

多长时间会对所有的连接进行一次断开,然后重新连接。

释放时间

多长时间没有进行操作的连接,会释放

基本所有的连接池都会有这几个参数,可能不同的连接池参数名不同,但是作用是一样的。 这里我们重点说一下最大连接数,这个是很容易忽略的一个设置。 很多人设置最大连接数的时候,喜欢设置的很大,例如设置为5000,但是一般mysql的数据库一个实例连接默认才1000,连接数超过这个了数据库也无法处理,设置的再大其实是没用的。

服务器数量 * 最大连接数 < 数据库最大连接数

而且,这还是在一个实例,一个数据库的情况下,至于多个数据库: 我建议

服务器数量 * 最大连接数 * 数据库数量 < 数据库最大连接数

如果单个数据库占用了太多的数据库连接,会影响到其他数据库,导致其他数据库也无法使用。 当然,这个值大家可以根据业务去进行合理的估算,高频的业务分配多一点,低频的业务分配少一点。不要盲目的一味设置连接池的最大值。

总结

如今,虽然各种各样的存储方式出现,但是关系数据库一直是我们系统的最重要的组成部分,尽量不要过早暴露数据库应对并发的短板,设计数据库和操作数据库在我们的开发中应该是一件很神圣的事情,认证对待关系的数据库的每一个操作才是明智之举。

本文分享自微信公众号 - IT米粉(itmifen),作者:IT米粉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库的使用你可能忽略了这些

    很明显,不同的类型存储的长度有很大区别的,对查询的效率有影响,字段长度对索引的影响是很大的。

    itmifen
  • 数据库的使用你可能忽略了这些

    数据库的管理是一个非常专业的事情,对数据库的调优、监控一般是由数据库工程师完成,但是开发人员也经常与数据库打交道,即使是简单的增删改查也是有很多窍门,这里,一起...

    itmifen
  • 学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

    根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正...

    itmifen
  • Gartner最新报告:腾讯云数据库增速国内第一

    近日,国际权威研究机构Gartner公司发布《The Future of the Database Management System (DBMS) Marke...

    腾讯云数据库 TencentDB
  • 数据库简史 4 下一代数据库

    国庆节前最后一篇, 前几期从国外数据库历史, 国内数据库历史, 搞笑数据库捡屎, 国庆节前也不能闲着.最近在看一本书, 关于下一代数据库.

    AustinDatabases
  • 推荐一个学习和了解数据库知识的网站

    最近发现一个有趣的网站,是专门收集世界上所有的数据库信息的网站,类似于维基百科性质的,名字也很有趣叫做Database of Databases,翻译成中文也就...

    哒呵呵
  • 一种数据库打天下?开源数据库选型应该注意什么?

    数据技术嘉年华,十周年盛大开启,点我立即报名!大会以“自研·智能·新基建——云和数据促创新 生态融合新十年” 为主题,相邀数据英雄,总结过往十年历程与成绩,展望...

    数据和云
  • mysql数据库介绍

    数据库是与应用程序实现信息交互的数据存储、管理软件,并且存储数据的也都可以称为数据库。在以前没有使用数据库的时候,只能够自己写数据的存储方案。

    端碗吹水
  • 多维度看 database 发展 和 风来了吹得起来国产数据库吗?

    中国不乏好电影,但能登得上银幕的那就寥寥无几了,幸亏有了抖音,各种不能登上大雅之堂的都能看到,看完反思自己 what's the point of the l...

    AustinDatabases
  • Oracle数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名详解

    数据库名、实例名、数据库域名、全局数据库名、服务名 , 这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在...

    我是李超人

扫码关注云+社区

领取腾讯云代金券