高并发存文件求解决方案

shsyzl007 2016-05-09 09:20:05
数据每500ms过来一次,也就是每个品种每秒会过来两条数据,每条数据只有一个价格一个时间
我现在要实时保存50个品种的数据,这样算每秒大概需要保存100条数据

以下方法都发现有堵塞现象,前面的还没保存完后面的数据又来了。
1.把每个保存放在一个线程里面
2.每个品种自动生成一个txt保存
3.用sqlite,发现这个数据库事务保存数据非常快,单条保存也很慢。刚测的保存1000条数据大概10秒的样子,但今天在公司测的同样的代码保存100条数据需要6秒。

有什么好办法解决吗
...全文
304 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天凤凰601 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。 可以考虑事件触发机制,收到请求触发一个写事件,事件间是透明的,不会出现拥堵现象。
  • 打赏
  • 举报
回复
“数据库事务”是关系数据库的硬伤。所以如果你要高速处理数据持久化(例如每秒写几万条记录),那么你应该使用 NoSql,或者其它非数据库的数据持久化框架。这里主要就是避开“事务”机制。
  • 打赏
  • 举报
回复
sqlite只有在启用事务时比较快,如果不显式启用事务则慢得要死。 如果你要保存100条数据,你应该显式地在“一个”事务中保存这100条数据,而不应该用多个事务(或者不显式启用事务)。
大气污染是影响公众健康与生态环境的重要问题,精准的空气质量时空预测与污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测与源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测与污染源贡献度分析系统,融合监测、气象、工业排放与交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型与基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐与融合,构建时序与空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘与二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,与源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控与减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧