大数据和高并发的解决方案总结

摘要:
大数据和高并发性已经成为软件设计中必须考虑的问题。页面静态-用户可以直接获取页面,这更适合不频繁的页面更新。首次使用缓存获取数据并从数据库中准提取数据,然后直接从缓存中提取数据。但是,需要有一种机制来保持缓存和数据库之间的一致性。使用存储过程-需要多次访问数据库才能处理请求的操作。批量读取-减少高并发下的数据库访问次数。5.延迟修改-在高并发下定期将缓存数据保存到数据库。

大数据和高并发的解决方案总结第1张

现在,软件架构变得越来越复杂了,好多技术层出不穷,令人眼花缭乱,解决这个问题呢,就是要把复杂问题简单化,核心就是要把握本质。

软件刚开始的时候是为了实现功能,随着信息量和用户的增多,大数据和高并发成了软件设计必须考虑的问题,那么大数据和高并发本质是什么呢?

本质很简单,一个是慢,一个是等。两者是相互关联的,因为慢,所以要等,因为等,所以慢,解决了慢,也就解决了等,解决了等,也就解决了慢。

关键是如何解决慢和等,核心一个是短,一个是少,一个是分流。

短是指路径要短。典型的mvc结构是请求->controller->model->dao->view,然后把页面返回给用户。要想短的话,

1,页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新。

2,使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性。

3,使用储存过程-那些处理一次请求需要多次访问数据库的操作,可以把操作整合到储存过程,这样只要一次数据库访问就可以了。

4,批量读取 - 高并发情况下,可以把多个请求的查询合并到一次进行,以减少数据库的访问次数

5,延迟修改 - 高并发情况下,可以把多次修改请求,先保存在缓存中,然后定时将缓存中的数据保存到数据库中,风险是可能会断电丢失缓存中的数据,

6,  使用索引 - 索引可以看作是特殊的缓存,尽量使用索引就要求where字句中精确的给出索引列的值。

少是指查询的数据要少。

1,分表 - 把本来同一张表的内容,可以按照地区,类别等分成多张表,很简单的一个思路,但是要尽量避免分出来的多表关联查询。

2,分离活跃数据 - 例如登录用户业务,注册用户很多,但是活跃的登录用户很少,可以把活跃用户专门保存一张表,查询是先查询活跃表,没有的话再查总表,这也类似与缓存啦。

3, 分块 - 数据库层面的优化,对程序是透明的,查询大数据只用找到相应块就行。

分流三种。

1,集群 - 将并发请求分配到不同的服务器上,可以是业务服务器,也可以是数据库服务器。

2,分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样可以同步处理很多逻辑,一般使用与特别复杂的业务请求。

3,CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。

 

暂时总结这么多的方案,随着技术的进步,会有更多的方案出现,一起成长进步中。。。。。

免责声明:文章转载自《大数据和高并发的解决方案总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android中Ijkplayer最简单的使用[笔记]Cisco PT VLANTrunk配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql导出导入sql文件方法(linux)

一、导入导出.sql文件for Linux: 1、从mysql中导出数据库test: 在终端运行:mysqldump -h localhost -u root -p test > /home/chuzj/daochu.sql 其中localhost是服务器名字 test是数据库名字,其后可以直接跟表名 2、将daochu.sql 导入到mysql数...

yii2实战教程之新手入门指南-简单博客管理系统

作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 1、简介 快速入门指南会对Yii2框架做一个基本介绍,包括数据库迁移、gii操作、AR模型、路由、验证...

SqlServer将数据库中的表复制到另一个数据库

在使用SqlServer的过程中,我们可能需要将表从一个数据库复制到另一个数据库中,今天,我为大家介绍这种操作的具体方法及步骤。可能对大部分人来说是很简单的东西,但是还是要记录下来,好记性不如烂笔头嘛。希望可以帮到需要的同学。。。 复制表结构: 第一步:首先,打开并连接Sql Server,在源数据库Source_db(源数据库名称)上右键,然后依次点击“...

NFSv4 mount incorrectly shows all files with ownership as nobody:nobody

NFSv4 mount incorrectly shows all files with ownership as nobody:nobody   https://access.redhat.com/solutions/33455  SOLUTION VERIFIED - Updated February 18 2016 at 5:48 PM -  Eng...

MySql数据库连接池专题

转载自:https://www.cnblogs.com/aspirant/p/6747238.html 最近学习mybatis的时候感觉连接池的知识忘记了,所有复习下 一、什么是数据库连接池? 官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用...

浏览器缓存原理【转】

原文链接:https://www.cnblogs.com/wangpenghui522/p/5498427.html   为什么要使用web缓存?   Web缓存存在于服务器和客户端之间。Web缓存密切注视着服务器-客户端之间的通信,监控请求,并且把请求输出的内容(例如html页面、 图片和文件)另存一份;然后,如果下一个请求是相同的URL,则直接使用保存的...