我正在设计一个ASP.NET MVC Web应用程序,该应用程序将用于查找人员所在的位置并映射他们从不同应用程序发送的位置。系统有可能为每个用户提供大量的位置数据,每个用户大约需要3个月。我现在正在尝试决定如何为此设计MS SQL 2008/2012数据库。
天真地,会有一个位置更新表,其中包含以下列:
Id(int)
UserId(int)
纬度(双倍)
经度(双倍)
速度(int)
DateSent(datetime)
从我的阅读中看,分区表似乎是实现这一目标的最佳方式。如果这是真的,我对如何自动将数据划分为诸如“今天”,“本周”,“上周”,“上个月”等分区的方式感到有些困惑。拥有一个只用于备份的所有内容的大型存档。
如果我能提供任何可能有用的技术要求,请设计策略让我知道。我很欣赏那里的一些数据库专家的见解。
答案 0 :(得分:0)
注意:不确定您是否知道这一点,但表分区是一个价格昂贵的企业功能。您应该确保数据量合理升级。
a)您希望根据用于查询的逻辑分组对表进行分区。 "今天" "本周","上周","上个月"除非你的查询具有那些粒度,否则它们确实没有意义。更有可能是追踪习惯和习惯的变化。例如。这个月,上个月,3个月前。然后在第4个月结束时,你会切换出有3个月大数据的分区(现在是4个月大的数据)
b)表分区基本上将分区视为整体的一部分。一旦你设置了分区功能和架构,你就不必担心移动它等等。例如,如果您逐月对其进行分区,保留3个月的数据,则可以设置5个文件组。下个月1,当前" 3;几个月,#34;老"月。
c)我强烈建议你不要保留历史悠久的大型档案资料"所有内容"除非你需要它。假设这3个应用程序每10分钟发送一次GPS数据?这是每人每天144次插入或每月4320次插入。或每年51840。我提到这是每个人的权利吗?
我认为您需要先回过头来考虑一下这些要求:您为此设计了多少人。你想要存储这些数据的数据是什么......然后相应地设计数据库,那么看看你的设计和要求是否证明了企业版的合理性。