mysql在互联网应用设计和开发中的注意事项
Posted zzm568599448
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql在互联网应用设计和开发中的注意事项相关的知识,希望对你有一定的参考价值。
mysql是开源数据库,在互联网界非常受欢迎,有着极为广泛的应用。这是由MySql的特点和互联网公司的使用场景决定的。首先从MySql的特点上看,MySql简单易用,有着极高的稳定性,同时简单查询时性能极高;MySql的功能很完备,常用的功能几乎都有;开源,功能可自己定制,使用成本低廉;可以支持多种不同用途的存储引擎,以应对不同的业务场景等。同时MySql又是脆弱的,一个复杂sql或者大表join就可能是MySql负载过重,资源耗尽。
互联网公司往往有高并发、大数据量的特点,同时为了在和竞品的竞争中占得先机,产品会不断迭代,新产品不断推出。从技术的角度讲,面临的问题往往很难预测;同时为了拉新用户或者促销,往往有大规模的运营推广活动,例如著名的“双十一”,活动期间访问和交易流量往往是平时的几倍甚至几十倍,如果把系统容量扩展到活动的容量,因为平时的流量没这么大,会造成资源浪费;如果活动期间不扩展系统容量,系统又扛不住突增的流量,从技术的角度讲,希望系统有伸缩能力,既能在活动期间扩容,可以应对突增的流量,又能在活动结束后缩容,不造成资源的浪费,所以互联网公司往往对系统伸缩能力有着执着的追求。
结和MySql的特点和互联网公司的特点,为什么MySql会在互联网界广受欢迎呢,大体有以下几点:
1、免费:互联网公司内部很多设施需要使用数据库,有些系统会使用多个数据库,如果使用强大的商用数据库,按许可收费,成本高的惊人。国内互联网公司往往走微利模式,创业前几年几乎没有盈利能力,广泛使用虽然强大但使用成本高昂的商用数据库对绝大多数互联网公司是不可承受之重,就算使用也往往只能在某些关键系统中使用;
2、开源:互联网公司面临的场景和问题很复杂,如果依靠厂商提供技术支持,很难及时处理遇到的问题,影响自身业务的发展。而使用开源的mysql可以根据自身的业务特点和面临的问题,自行开发需要的功能,解决资金的问题;
3、互联网公司普遍追求横向扩展性:面临高并发、大数据量难题时,互联网公司普遍采用分库分表的方式扩展容量,使用MySql时不需要考虑分库时增加数据库许可的成本;
4、互联网公司业务一般不复杂,而且读远多于写,刚好是mysql擅长的场景;
在这里提一下MySql的InnoDB存储引擎。从MySql5.5之后,InnoDB成为默认的存储引擎,InnoDB是个相当全面,而且均衡的存储引擎,支持全面的ACID事务特性;引入行级锁,大幅度提升了并发能力;使用MVCC方式也大幅提升并发性能;查询性能与MyIsam相比并不差。
在互联网公司高并发的场景下,对MySql的使用稍有失误就可能让MySql负载增加,速度降低,所以在设计和使用MySql时要比较小心,任何一个无用都可能带来严重的后果。在高并发、大数据量的互联网应用中,系统的扩展性是个至关重要的考量,基于这点考虑,往往把业务逻辑写在容易扩展的应用代码中,因为扩展数据库的难度和代价远远大于扩展应用。只要应用是无状态的,只要往应用集群中增加机器,应用就能线性扩展;而要扩展数据库就就不得不做分库分表了,而做分库分表时不论是数据迁移,还是改造应用层或使用中间件都需要相当大的工作量。所以在设计互联网应用时,在数据库的设计和使用有相应的原则,下面就从核心设计原则和表,字段,索引的设计和使用Sql方面分别描述。
核心设计原则1:不要在数据库里做运算,不要使用存储过程、触发器等。
原因如下:数据库的扩展的能力远不如应用程序强,一旦使用了存储过程、触发器,当数据库遇到瓶颈,想扩展就非常难了。所以,设计互联网应用时,在合适的地方做合适的事情。就让数据库做数据存储和查询吧,至于数据转移、运算、业务逻辑都让应用来做吧;
核心设计原则2:平衡范式和冗余。在互联网应用中为了优化查询性能,会将必要的信息冗余存放,冗余存储的式违反了第三范式,在提高查询性能的同时也会带来数据一致性的问题,这需要在业务逻辑代码中保证。
以上是关于mysql在互联网应用设计和开发中的注意事项的主要内容,如果未能解决你的问题,请参考以下文章