社区
C#
帖子详情
高并发存文件求解决方案
shsyzl007
2016-05-09 09:20:05
数据每500ms过来一次,也就是每个品种每秒会过来两条数据,每条数据只有一个价格一个时间
我现在要实时保存50个品种的数据,这样算每秒大概需要保存100条数据
以下方法都发现有堵塞现象,前面的还没保存完后面的数据又来了。
1.把每个保存放在一个线程里面
2.每个品种自动生成一个txt保存
3.用sqlite,发现这个数据库事务保存数据非常快,单条保存也很慢。刚测的保存1000条数据大概10秒的样子,但今天在公司测的同样的代码保存100条数据需要6秒。
有什么好办法解决吗
...全文
303
12
打赏
收藏
高并发存文件求解决方案
数据每500ms过来一次,也就是每个品种每秒会过来两条数据,每条数据只有一个价格一个时间 我现在要实时保存50个品种的数据,这样算每秒大概需要保存100条数据 以下方法都发现有堵塞现象,前面的还没保存完后面的数据又来了。 1.把每个保存放在一个线程里面 2.每个品种自动生成一个txt保存 3.用sqlite,发现这个数据库事务保存数据非常快,单条保存也很慢。刚测的保存1000条数据大概10秒的样子,但今天在公司测的同样的代码保存100条数据需要6秒。 有什么好办法解决吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
飞天凤凰601
2016-05-10
打赏
举报
回复
你怀疑你数据没作索引……
娃都会打酱油了
2016-05-10
打赏
举报
回复
sqllite?单机? 本来还想说消息队列的……
puler
2016-05-10
打赏
举报
回复
思路应该都是: 收集数据----统一分类存放到内存----集中插入数据库
cancerser
2016-05-10
打赏
举报
回复
不是什么大问题
先说说sqlite的问题,这货是文件型数据库,大规模并发就是排队,到这就是瓶颈,你如果换成SqlServer按照你的实现思路就没问题了。
如果你一定要使用sqlite,也可以,你需要将程序改成这样:每几秒保存一次(看心情),接到数据后放在内存里,看心情统一插入,人为避开文件瓶颈。10秒钟单开线程插一次,估计就没问题了。
不过我建议你改成,接到数据后插入数据库,插入完成后再次插入(插入时接收的数据保存在内存,以插入数据的时间为间隔进行操作)。这样就可以了。
tanta
2016-05-10
打赏
举报
回复
数据量不大的情况下,可以先把数据写入内存,然后间隔一定时间保存一次。
tanta
2016-05-10
打赏
举报
回复
引用 10 楼 oysy 的回复:
你怀疑你数据没作索引……
索引好像会影响插入速度?
xian_wwq
2016-05-10
打赏
举报
回复
没有事务的时候,SQLite的插入操作使用了太多的IO操作,而是用事务的话,只需要一次IO。 搜下 Sqlite批量插入, 如果优化后仍然不行, 那是不是该考虑换种数据库
xuzuning
2016-05-10
打赏
举报
回复
500ms 50条数据,分开处理的话 平均每条数据的处理时间是 10ms,如果按品种保存到文件的话,时间应该是充足的。不知为何会发生阻塞 SQLite 并不适合多线程工作,启用事务时就是单线程的, 500ms 50条数据,时间应该是够的 如果确因库文件较大,导致打开很慢的话(要是打开了就不关闭呢),可以考虑用内存库做中转 使用数据库时,插入操作不应打开索引
yingdediyi
2016-05-10
打赏
举报
回复
批量保存数据可以使用sqlcopybulk,执行效率很快
江南小鱼
2016-05-09
打赏
举报
回复
1、把每个保存放在一个线程里面
我估计会有线程间争夺资源的问题
2、每个品种自动生成一个txt保存
我估计你是每个品名启动一个线程,和方法一有同样的问题
3、用sqlite,发现这个数据库事务保存数据非常快,单条保存也很慢。刚测的保存1000条数据大概10秒的样子,但今天在公司测的同样的代码保存100条数据需要6秒。
大批量数据,不建议用sqlite。
可以考虑事件触发机制,收到请求触发一个写事件,事件间是透明的,不会出现拥堵现象。
以专业开发人员为伍
2016-05-09
打赏
举报
回复
“数据库事务”是关系数据库的硬伤。所以如果你要高速处理数据持久化(例如每秒写几万条记录),那么你应该使用 NoSql,或者其它非数据库的数据持久化框架。这里主要就是避开“事务”机制。
以专业开发人员为伍
2016-05-09
打赏
举报
回复
sqlite只有在启用事务时比较快,如果不显式启用事务则慢得要死。 如果你要保存100条数据,你应该显式地在“一个”事务中保存这100条数据,而不应该用多个事务(或者不显式启用事务)。
高并发
解决方案
面试经典情景题:
高并发
解决方案
情景模拟:在很多个用户同时访问网站的时候,例如:抢购或者双十一的时候。如何避免服务器宕机或者数据库挂掉的问题,请你提供几种
解决方案
。 1、静态资源与后台服务进行分离 静态资源主要包括图片、视频、js、css和一些资源
文件
等,这些
文件
因为没有状态所以分离比较简单,直接
存
放到响应的服务器就可以了,一般会使用专门的域名去访问。通过不同的域名可以让浏览器直接访问资源服务器而...
高并发
的
解决方案
1.应用和静态资源分离 刚开始的时候应用和静态资源是保
存
在一起的,当并发量达到一定程度的时候就需要将静态资源保
存
到专门的服务器中,静态资源主要包括图片、视频、js、css和一些资源
文件
等,这些
文件
因为没有状态所以分离比较简单,直接
存
放到响应的服务器就可以了,一般会使用专门的域名去访问。 通过不同的域名可以让浏览器直接访问资源服务器而不需要再访问应用服务器了。架构图如下: 2.页面缓
存
针对
高并发
处理
文件
解决方案
对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的
文件
操作方法完全没有问题。但如果并发高,在我们对
文件
进行读写操作时,很有可能多个进程对进一
文件
进行操作,如果这时不对
文件
的访问进行相应的独占,就容易造成数据丢失。 例如:一个在线聊天室(这里假定把聊天内容写入
文件
),在同一时刻,用户A和用户B都要操作数据保
存
文件
,首先是A打开了
文件
,然后更新里面的数据,但这里B也正好也打开了同一个...
PHP
高并发
秒杀
解决方案
PHP
高并发
秒杀
解决方案
本文提供PHP
高并发
秒杀
解决方案
(附加三个案例说明(普通流程,使用
文件
锁,使用redis消息队列)) 1:(正常流程,不做任何
高并发
处理),代码如下: <?php $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_...
C#
111,129
社区成员
642,532
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章