随着用户量的budu不断提升,对网站应用的并发量也将不断增高。这将会导致应用卡顿延迟,更严重甚至会导致系统整个崩溃。而解决这种情况的发生,下意识便是如何降低用户对系统数据的读操作。
1、采用redis,memcache等缓存技术,降低对数据库的读操作。
2、其次可以考虑进行数据库的读写分离操作
3、当我们使用缓存,以及数据库的读写分离之后,数据库的压力还是很大的时候,这时候就要考虑一下数据库的拆分。
垂直拆分:
垂直拆分是通过业务将不同的表分类,分布到不同的数据库上面。这就能将数据库的总体压力平摊下去。淘宝就是通过业务分成交易数据库,用户数据库,支付数据库。甚至会更加的细分文字信息用mongdb等
优点:
1. 拆分后业务清晰,拆分规则明确。
2. 系统之间整合或扩展容易。
3. 数据维护简单。
缺点:
1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
3. 事务处理复杂。
水平拆分:
垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。
分库分表需要涉及到对应的SQL路由规则主库备库等,例如:淘宝设计了一套TDDL来解决这些问题,应用端只需配置对应的规则即可,对应用端的没有任何侵入的设计。
水平拆分,总之,一般先分库,如果分库后查询仍然慢,于是按照分库的思想开始做分表的工作数据库采用分布式数据库(所有节点的数据加起来才算是整体数据),文件系统采用分布式文件系统任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。