【求助】求一个大数据插入查询高并发的方案

灵雨飘零 2019-07-15 03:46:59
目前有这样一个需求:
有6个数据采集设备,同时往一个数据库(临时库)写入大量数据(每个采集设备每秒钟几万条),每个设备一个数据表,一次采集10分钟左右,每天会采集很多次,每次采集完成后,根据情况,如果数据觉得有用,需要通过程序将本次采集数据数据同步到正式库(先执行查询,把本次试验的数据查询出来再同步到正式库)。这样一天会产生上千万条甚至甚至上亿条数据,随之时间的推移,数据量会越来越大,查询也会越来越慢,有时候还会出现查询超时。同时还需要将采集的数据做实时显示(通过查询接口,实时查询当前数据)。相当于实时插入大量数据的同时,也要实时查询。

现在想到两个方案,但是感觉都不太好:1、做表分区,将每天的数据自动建立表分区。这样查询的时候就会从当天的分区表查询,查询速度会有提高,但是建立表分区,会需要在时间字段加聚焦索引,会影响插入性能。
2、做读写分离,主数据库做插入,从数据库做查询。然后所有查询的时候从从服务器读取。但实时性得不到保证,同时做数据库读写分离会不会影响实时大量数据插入??


大家有没有更好的方案呢???



...全文
85 点赞 收藏 4
写回复
4 条回复
灵雨飘零 2019年07月19日
引用 2 楼 吉普赛的歌 的回复:
1. 分出当前表和历史表。当前表只保留当天的数据,用sql代理作业 凌晨0点将前一天的数据转到历史表。
2. 做 alwayson 读写分离的延时是相当小的,一般情况也就几毫秒到几十毫秒,如果不做索引重建之类的大操作不存在实时性得不到保障的说法。

感谢,我目前的做法跟你的想法大致相同,我现在做了一个缓存数据表(缓存半个小时左右,主要考虑数据量太大),然后采用分发的机制同步到历史表。
回复 点赞
xiaoxiangqing 2019年07月16日
同意楼上的观点,高并发针对新增还算可以
回复 点赞
吉普赛的歌 2019年07月16日
1. 分出当前表和历史表。当前表只保留当天的数据,用sql代理作业 凌晨0点将前一天的数据转到历史表。 2. 做 alwayson 读写分离的延时是相当小的,一般情况也就几毫秒到几十毫秒,如果不做索引重建之类的大操作不存在实时性得不到保障的说法。
回复 点赞
唐诗三百首 2019年07月15日
设计建议: 1.查询时,用with(nolock)可减少高并发时的锁争. 2.新建历史数据库,把几乎不太可能查询到的数据(如3年前)归档保存到历史数据库, 前端程序也需同步修改,当查询3年前数据库时连接到历史数据库执行SQL.
回复 点赞
发动态
发帖子
疑难问题
创建于2007-09-28

9304

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告