`

高并发,大数据量,你的系统考虑哪些问题?

 
阅读更多

 

1,订票系统案例,某航班只有一张机票,假定有1w个人打开你的网站来订票,问你如何解决并发问题(可扩展到任何高并发网站要考虑的并发读写问题)

       问题,1w个人来访问,票没出去前要保证大家都能看到有票,不可能一个人在看到票的时候别人就不能看了。到底谁能抢到,那得看这个人的“运气”(网络快慢等)

      其次考虑的问题,并发,1w个人同时点击购买,到底谁能成交?总共只有一张票。

      首先我们容易想到和并发相关的几个方案 : 锁 同步

       同步更多指的是应用程序的层面,多个线程进来,只能一个一个的访问,java中指的是syncrinized关键字。锁也有2个层面,一个是java中谈到的对象锁,用于线程同步;另外一个层面是数据库的锁;如果是分布式的系统,显然只能利用数据库端的锁来实现。

       假定我们采用了同步机制或者数据库物理锁机制,如何保证1w个人还能同时看到有票,显然会牺牲性能,在高并发网站中是不可取的。使用hibernate后我们提出了另外一个概念:乐观锁悲观锁(即传统的物理锁);采用乐观锁即可解决此问题。乐观锁意思是不锁定表的情况下,利用业务的控制来解决并发问题,这样即保证数据的并发可读性又保证保存数据的排他性,保证性能的同时解决了并发带来的脏数据问题。

      hibernate中如何实现乐观锁:

      前提:在现有表当中增加一个冗余字段,version版本号, long类型
      原理:1)只有当前版本号》=数据库表版本号,才能提交
                  2)提交成功后,版本号version ++

       实现很简单:在ormapping增加一属性optimistic-lock="version"即可,以下是样例片段

<hibernate-mapping>
    <class name="com.insigma.stock.ABC" optimistic-lock="version" table="T_Stock" schema="STOCK">

 2,股票交易系统、银行系统,大数据量你是如何考虑的

首先,股票交易系统的行情表,每几秒钟就有一个行情记录产生,一天下来就有(假定行情3秒一个) 股票数量×20×60*6 条记录,一月下来这个表记录数量多大? oracle中一张表的记录数超过100w后 查询性能就很差了,如何保证系统性能?

   再比如,中国移动有上亿的用户量,表如何设计?把所有用于存在于一个表么?

    所以,大数量的系统,必须考虑表拆分-(表名字不一样,但是结构完全一样),通用的几种方式:(视情况而定)

   1)按业务分,比如 手机号的表,我们可以考虑 130开头的作为一个表,131开头的另外一张表 以此类推

   2)利用oracle的表拆分机制做分表

  3)如果是交易系统,我们可以考虑按时间轴拆分,当日数据一个表,历史数据弄到其它表。这里历史数据的报表和查询不会影响当日交易。

当然,表拆分后我们的应用得做相应的适配。单纯的or-mapping也许就得改动了。比如部分业务得通过存储过程等

3)此外,我们还得考虑缓存

    这里的缓存,指的不仅仅是hibernate,hibernate本身提供了一级二级缓存。这里的缓存独立于应用,依然是内存的读取,假如我们能减少数据库频繁的访问,那对系统肯定大大有利的。比如一个电子商务系统的商品搜索,如果某个关键字的商品经常被搜,那就可以考虑这部分商品列表存放到缓存(内存中去),这样不用每次访问数据库,性能大大增加。

   简单的缓存大家可以理解为自己做一个hashmap,把常访问的数据做一个key,value是第一次从数据库搜索出来的值,下次访问就可以从map里读取,而不读数据库;专业些的目前有独立的缓存框架比如memcached 等,可独立部署成一个缓存服务器。

分享到:
评论

相关推荐

    高并发处理.大数据量

    此外,在大数据量系统中,需要考虑数据的分析和挖掘。例如,在电商系统中,需要对用户的行为进行分析,以提高用户体验。可以使用数据挖掘技术来分析用户的行为,并提供个性化的服务。 高并发处理大数据量需要考虑多...

    大型高并发高负载网站的系统架构

    大型高并发高负载网站的系统架构是一个复杂的技术问题,需要从多方面进行考虑和解决。本文将从高性能服务器、数据库、编程语言、Web服务器等方面进行探讨,并提供一些实际的解决方案。 首先,高性能的服务器是大型...

    浅析大数据量高并发的数据库优化

    今天我们将讨论的是大数据量高并发的数据库优化,希望对大家有所帮助。如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统...

    利用Kafka实现大话务并发数据流的吞吐系统.pdf

    为了解决这个问题,需要设计一个高吞吐量的大话务并发数据流系统。 二、技术选型 在选择技术栈时,需要考虑到业内实时流式处理技术的发展和运营商本身信令数据源的特点。基于此,我们选择了Kafka作为消息队列组件...

    大数据量高并发的数据库优化,sql查询优化

    如果不能设计一个合理的数据库模型,...所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16日出现的数据异常的情况,并

    高并发支付系统架构设计与实践.pdf

    该系统需要解决的问题包括用户与支付服务器建立快速的通讯网络,读各种配置数据,读用户绑卡信息,对支付订单表的写入,支持高并发抢购或秒杀等问题。 在支付系统架构设计中,需要考虑到数据分级、缓存机制、分布式...

    大数据量高并发的数据库优化详解

    如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段...所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16

    高性能高并发服务器架构大全

    整理的高性能高并发服务器架构文章,内容预览:  初创网站与开源软件 6  谈谈大型高负载网站服务器的优化心得! 8  Lighttpd+Squid+Apache搭建高效率Web服务器 9  浏览量比较大的网站应该从哪几个方面...

    java处理高并发高负载类网站的优化方法.docx

    MySQL是最常用的数据库管理系统,但是在数据量达到100万以上时,MySQL的效率会急剧下降。为了解决这个问题,我们可以使用M-S(主-从)方式进行同步复制,将查询和操作分别在不同的服务器上进行操作。更好的方法是...

    AI科技大本营在线公开课《高并发优化思路》Python后台开发 高并发场景优化及解决方案 共40页.pdf

    在高并发场景中,服务器压力增加、资源不足、请求量无法提升等问题是常见的。为了解决这些问题,本文将讨论高并发优化思路和方案。 资源不足 在高并发场景中,资源不足是一个常见的问题。为了解决这个问题,可以...

    高并发高负载系统架构

    网络带宽的提升可考虑的因素包括: 更大带宽、多线路接入、独享带宽; 服务器在大负载的情况下,对网络带宽的占用是十分可观的。 策略:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。

    mysql大数据高并发处理

    如果不能设计一个合理的数据库模型,...所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16日出现的数据异常的情况,并

    SQL Server高并发和大数据存储方案

    这里将告诉您Sqlserver 高并发和大数据存储方案,具体实现方法:  随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战。下面分享下对实际10万+峰值的平台的数据库优化方案。与大家一起讨论,...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    Java高并发高性能分布式框架从...高并发- 多级缓存(分布式缓存)高并发- 池化在应用系统开发过程中,我们经常会用到池化技术,如对象池、连接池、线程池等 ,通过池化来减少一些消耗,以提升性能。 对象池通过复用对象

    安徽大学计算机操作系统期末考试题及答案定稿版.pdf

    6. 设计批处理多道系统时,首先要考虑的是系统效率和吞吐量。批处理多道系统是一种操作系统架构,用于管理多个作业的执行。 7. 当进程因时间片用完而让出处理机时,该进程应转变为就绪状态。进程状态的转换是操作...

    企业数据架构规划.docx

    在选择企业数据架构时,需要考虑多个因素,如业务需求、数据量、系统可用性和可靠性等。不同的架构模式适合不同的业务场景,需要根据实际情况进行选择和搭配。 构建和维护 企业数据架构规划的构建和维护是一个复杂...

    数据库系统概论第四版答案

    文件系统与数据库系统的区别是:文件系统面向某一应用程序,共享性差,冗余度大,数据 独立性差,记录内有结构,整体无结构,由应用程序自己控制。数据库系统面向现实世界, 共享性高,冗余度小,具有较高的物理独立...

    SpringBoot+Zookeeper+Dubbo打造分布式高并发商品秒杀系统.zip

    社区支持:全球的开发者社区意味着您可以在遇到问题时找到大量的资源和支持。 无论您是初出茅庐的Java新手,还是经验丰富的开发者,这个项目都将为您提供一个深入了解SpringBoot的机会。无论您是想学习新的技能,...

Global site tag (gtag.js) - Google Analytics