高并发账户记录查询

面对高并发账户记录查询,本文提供了解决方案。通过有序行存、利用索引、关联查询和数据更新策略,有效提升性能。以某银行活期明细查询为例,详细介绍了如何在硬盘存储上建立行存文件、多级索引,以及如何进行内存中的关联计算,确保查询速度和用户体验。
摘要由CSDN通过智能技术生成

【摘要】
面对高并发账户记录查询问题,按照本文的介绍一步一步操作,就能有效提升性能。点击了解高并发账户记录查询

 

问题描述

高并发账户记录查询在银行、互联网企业、通信企业中广泛存在。例如:网上银行、手机银行、电商个人账户查询、互联网游戏账户等等。这类查询有三个共同点:

1、  数据总量非常大。用户数量本身就非常多,再加上多年的账户数据,数据量可以达到几千万甚至上亿条。

2、  访问人数众多。几百万甚至上千万人访问,属于高并发查询。

3、  不能让用户等待。手机、网页要达到秒级响应,否则严重影响用户体验。

下面以某银行账户活期明细查询为例,给出这类问题的解决办法。

某银行共一亿个活期账户,每个账户平均每月有7条数据,每年数据总量84亿条。每条数据中的机构字段,还要关联分支机构表(几千条)记录。在性能上,要求单台服务器支持一千个以上的查询,响应时间不能超过1秒。

有序行存

活期明细数据随着时间增长非常快,一年就有84亿条。如果放到内存中,需要大量内存空间,硬件投入成本太高,所以要放到硬盘上存储。分支机构表只有几千条数据,可以放在内存中存储。

在硬盘上存储,要考虑是行存还是列存。列存数据分块压缩,能减少遍历数据量。但由于账户查询是随机的,整块读取会有额外解压计算。而且每次取数都针对整个分块,复杂度较高,性能不如行存。因此,这个场景要选择行存存储,如下图:

..

图1:行存和列存

具体的实现可以采用Java、C++、SPL等高级语言。这里我们以代码量最少的SPL语言为例讲解。

  A
1 =connect("db").cursor(“select *   from detail order by id")
2 =file("detailR.ctx") 
3 =A2.create@r(ID,CORPID,AMT).append(B1)

代码示例1

A1:连接生产数据库,用游标读取活期存款数据,按照账户id排序。

A2:建立本地组表文件。

A3:建立组表,并从数据库游标读取活期存款明细数据,写入文件。

 

其中,A3中的@r选项,就是建立行存文件。一年84亿条数据都导出,时间会比较长。但是这是一次性的工作,后续就只需要追加增量数据即可。增量数据的追加方法,后面会有介绍。如果按照账户排序会对生产数据库造成较大压力,可以导出之后基于文件排序。排序使用SPL的sortx函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值