JAVA高并发问题,大数据,频繁I/O操作。

大概描述一下问题情况:架构基于BS模式。1、后台后台程序有一个基于Socket的程序,大概一秒钟1W~10数据,每条数据都不是一样的,但是每过几秒钟这几万数据就需要更新一... 大概描述一下问题情况:
架构基于BS模式。
1、后台
后台程序有一个基于Socket的程序,大概一秒钟1W~10数据,每条数据都不是一样的,但是每过几秒钟这几万数据就需要更新一次(每条都需要更新)。
2、前端大概也有1~10万数据,其实就是一个ID,它对应的就是后台1~10万唯一数据的ID,前端程序每隔几秒钟需要读取后台最新的数据并展示,前端每刷新一次获取的结果都是最新的,而且需要以最快的速度获取,客户端的访问量10万左右。

当前方式:
1、现在的方式是后端直接Socket接收到后存HashMap,因为查询速度快,但是高并发的情况下,尤其是量很大时问题蛮多。
2、前端Ajax轮询获取(虽然不可取,但是现在已有的条件只能这样做)。

有几种方式现在需要排除掉,现有条件不能足以实现。
1、基于HTML5的WebSocket

问题:
主要是后台有没有更加优越的方案,有去了解过内存数据库,但是内存数据库对高并发处理情况自己并没有深入,因为我的数据不是批量的,这10万数据都是单条插入的,所以想找到一种更为合理的解决方案,能够实现在存储、读取能承受高并发的压力。至少每秒钟5万级别以上。

分我暂时只给50,因为如果没有满意的答案就浪费了,如果有满意的给150分(追加100分)。
展开
 我来答
1058106015
推荐于2017-04-18 · TA获得超过268个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:124万
展开全部
建议采用缓存处理,按照你说的这种数据量,基于redis的缓存完全可以满足,存取速度可以10W+的,另外,拟采用的hashMap 是ConcurrentHashMap还是其他,页面展示是增量查询还是直接所有的再查询一次,socket数据接收你是用的netty还是mina,这都需要经过仔细的斟酌考虑设计的。有这么大的并发的需求,完全可以考虑做分布式集群的,估计这只是领导想要的目标吧
追问
ConcurrentHashMap,Socket这块暂时用的Mina接收
我担心的是每隔5秒钟内就进行10万数据的更新,这个量是每天不断支持的,但是不一定每一条都会更新,正常情况都更新。这样刷IO会比较严重。
追答
第一:考虑适当延长更新时间间隔
第二:在不延长时间间隔的情况下,采用事务处理或批处理,10W条数据不是很多,也不是很大,redis在1s内完全可以全部处理完
第三:尽量不要采用普通的关系型数据库如Oracle、MySQL,即便采用,也要考虑定时批量入库,建议直接采用 内存数据库
第四:不建议直接用Hadoop,毕竟Hadoop是高延迟的分布式系统,其功能主要用于离线数据的处理,你的应用应该属于低延迟的系统。
还有什么疑问,可加QQ讨论。
坚持564
2014-02-19
知道答主
回答量:24
采纳率:0%
帮助的人:14.6万
展开全部
缓存服务器集群,读取信息从缓存服务器读,那后台读取数据高并发应该会好点
hadoop 集群也会好很多,现在hadoop火的不行了,hadoop2也出来了,赶紧学习新技术
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zh2157524
2014-02-19 · TA获得超过462个赞
知道小有建树答主
回答量:387
采纳率:50%
帮助的人:401万
展开全部
java并发包的hashmap就够了,业务逻辑设计的就有问题

并发包hashmap与同步 hashmap在多线程10W条数据之后,性能不是一个级别的

每次获取最新 就先过滤一遍cache然后再进行数据库查询 然后组合结果

更新 可以多线程 取单队列(并发包hashmap)然后同步更新

这是我以前的设计逻辑
追问
不明白你说的并发包hashmap是什么?
我接收消息用的是Mina。
追答
ConcurrentHashMap  并发包应该没问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式