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服务器等方面进行探讨,并提供一些实际的解决方案。 首先,高性能的服务器是大型...
因此,必须在设计阶段就考虑高并发和大数据量的场景。 - 数据异常案例:例如,日期临界时的并发访问可能导致数据错误,如统计系统在日期切换时的并发插入,可能会插入多条重复记录。 - 数据冗余和完整性:为了保证...
### 大数据量和高并发下的数据库SQL优化 #### 数据库结构的设计 1. **合理的数据库模型设计**: ...通过上述方法的综合运用,可以在大数据量和高并发环境下有效提升数据库性能,确保系统的稳定运行。
在本项目中,"java抽奖系统后台 springboot+mybatis redis队列处理高并发.zip",我们可以探索几个关键的IT技术及其在构建高效抽奖系统中的应用。以下是对这些技术的详细说明: 1. **SpringBoot**: SpringBoot是...