对于数据量较大的系统,数据库应该如何设计

King_hhuang 2013-08-07 05:04:03
设计一个监控系统,连接有多台终端,每台终端几秒钟更新一条数据,用户比较关心最新的数据(一天内的),但是他们也会经常查询历史数据,怎么设计数据库,可以使软件界面对最新数据的刷卡比较快,对历史数据的查询响应也比较快?
...全文
356 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2013-08-08
  • 打赏
  • 举报
回复
1、最新的刷卡数据保存到内存数据库中 2、定期将内存数据库中的数据迁移到关系数据库中,历史数据可以按时间或者按终端等分表存储
Shawn 2013-08-07
  • 打赏
  • 举报
回复
#1.触发器,个人认为不好,相当于同时两份数据,而且属于同一事务,历史表INSERT有问题时,会导致整个INSERT操作失败。 #2.分区表,也不建议。它的优点:按分区存储数据,可以把数据放在不同的文件组(文件组可放在不同的磁盘)来提高效率;且当按分区段查询时,只查询表中的某个分区,效率高。缺点:需要想办法定时增长分区;SQL没按分区段查询时,效率可能会更低 #3.数据量不大的话,且逻辑不复杂的情况下,建议自定义JOB,注意点: 归档时,用DELETE from 源表 output into 历史表 这种方式写,保证是一个事务,不会丢数据; 加上TOP(N)条件,一次删除N条,停1秒,再删除,保证不会影响其它SQL;WHERE 主键 < 100 and 日期 < getdate() 这种方式,就是说,你确定下主键的大概值,再用日期过滤,走的是聚集索引,加上TOP(N),删除的比较快
Andy__Huang 2013-08-07
  • 打赏
  • 举报
回复
1. 软件界面对最新数据的刷卡比较快 想最快,那就得考虑使用缓存. 2. 对历史数据的查询响应也比较快 对where和关联查询的字段进行索引,可以提高查询速度
hgwyl 2013-08-07
  • 打赏
  • 举报
回复
引用 楼主 King_hhuang 的回复:
设计一个监控系统,连接有多台终端,每台终端几秒钟更新一条数据,用户比较关心最新的数据(一天内的),但是他们也会经常查询历史数据,怎么设计数据库,可以使软件界面对最新数据的刷卡比较快,对历史数据的查询响应也比较快?
如果仅仅是这些情况 感觉单表就可以解决了,不需要多表或者其他操作 以“日期”或者“时间”作为聚集索引即可
King_hhuang 2013-08-07
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
[quote=引用 3 楼 King_hhuang 的回复:] 谢谢,目前数据量应该不算大; 之前的系统也是按你这种思路设计的 就是那个数据归档是怎么做的,之前做的是写一个存储过程将实时表中超过时间的数据移入历史表,然后在数据库中新建一个作业定时调用该存储过程
归档的话按你的方法可以了,记得移入之后要把原数据清空(不是在历史表),而且你的代码里面可能需要考虑是否要引用历史表,如果是2005以上,可以考虑使用分区表功能,不过这个有利有弊,并不是完全没有坏处的,要多测试[/quote] 谢谢,如果我插入数据在实时表时,设置触发器,直接给历史表中也插入数据;这样我查询数据的时候就不用再联合实时表和历史表查询了,这样会不会更好一点;分区表以前没用过,刚才了解了一下,好像就是数据库会根据你设置的某个条件分区存放,好像挺好的啊,有啥坏处呢,请老兄指点指点,我对数据库的了解很少,呵呵
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
引用 3 楼 King_hhuang 的回复:
谢谢,目前数据量应该不算大; 之前的系统也是按你这种思路设计的 就是那个数据归档是怎么做的,之前做的是写一个存储过程将实时表中超过时间的数据移入历史表,然后在数据库中新建一个作业定时调用该存储过程
归档的话按你的方法可以了,记得移入之后要把原数据清空(不是在历史表),而且你的代码里面可能需要考虑是否要引用历史表,如果是2005以上,可以考虑使用分区表功能,不过这个有利有弊,并不是完全没有坏处的,要多测试
King_hhuang 2013-08-07
  • 打赏
  • 举报
回复
谢谢,目前数据量应该不算大; 之前的系统也是按你这种思路设计的 就是那个数据归档是怎么做的,之前做的是写一个存储过程将实时表中超过时间的数据移入历史表,然后在数据库中新建一个作业定时调用该存储过程
Q315054403 2013-08-07
  • 打赏
  • 举报
回复
每台终端几秒钟才更新一条数据,几百台、几千台负荷也不大呀,在正确设计的情况下 若需咨询或协助,欢迎联系ME
Shawn 2013-08-07
  • 打赏
  • 举报
回复
#1.当天数据用一张表存储,历史数据用一张表存储(可以考虑表分区) #2.当天数据表根据查询设计合适的索引;历史数据根据查询设计合适的索引。 #3.系统空闲时,把数据归档。楼主能再说下数据量大概有多少,每日增多少,及其它要求吗?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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