2011-10-17 35 views
4

我们将有一个MS SQL Server数据库,每秒读取100次,在一小时内均匀分布2,400个插入,并在一个小时内均匀分布14,400个更新。每个月,环境可以增长1,7M行。列数在20以下。拆分表格来处理100次插入/秒?

我们是一个有60台起重机的集装箱码头,每个集装箱码头在特定时刻处理1个集装箱。这些表的属性是a/o:crane_ID(3个字符),container_ID(11个字符),container_unique_number(双精度),container_status(1个字符)和一堆其他细节。

在任何给定的时刻,最多60条记录(一台起重机处理一个容器)将“活跃”;其余的是历史数据。

活动记录上的更新将使用3列进行读取,其中一个字段(container_unique_number)是唯一的。 100个I/O(来自各种客户端的所有不同进程)扫描所有活动记录或活动的特定container_id。 一半的过程基本上是专用于一台特定的起重机。

,我们所面临的设计问题是:

  • 如果我们建立一个适用于所有起重机的所有记录,用100个查询(截然不同的过程中)每秒的活动记录一个公共表,将我们性能问题?
  • 或者我们应该为每台起重机建立一个专用(但同样)的工作台,并将具体工艺专用于特定工作台,例如,与起重机1相关的工艺只读表CRANE1_blablabla?
  • 如果我们建立一个公共表格,我们应该将“已完成”记录移出到归档表格吗?完成记录的最大数量是什么?在存档之前,您可以允许在这个“活动”表中坐下吗?

感谢, 西蒙

+0

通常,主轴驱动器或入门级RAID *不能*每秒处理100 *提交*(根据其他因素,7.2K RPM应达到30,15K到60左右)。提交是昂贵的,与实际同步相比,插入/更新/“操作”*非常便宜* - [真实] ACID支持的价格。这将通过数据库和微调(或禁用)同步到非易失性存储的能力而有所不同,这可能会在极端情况下稍微增加数据丢失的变化。 – 2011-10-17 06:15:40

+0

for'和其他一些细节。'是指与容器移动直接相关的细节(容器移动时它是否改变)还是应该放在'容器'表中的东西(例如容器的最终目的地)? – Seph

回答

3

一个表。这比硬件更多的是硬件。放入一个固态硬盘的日志和数据,你是不错的。

拆分到多个表格会让大多数公司感到厌烦,即使“假设”的性能提升。有很好的理由。

这些天您可以在桌面硬件上每秒执行100个操作。

+0

希望不仅仅是一个*单一的SSD ;-)他们快速(*非常令人难以置信*在IOPS比主轴更好),但也容易突然停止工作;首先不是一个“死亡勾号”:-(标准冗余/备份仍然处于完全有效状态+1 – 2011-10-17 06:23:04

+0

是的,我没有深入讨论这个问题,但是它们都快速地被映射到光盘上,因子为100;)或者更多。 – TomTom

+1

另外值得指出的是,即使把它分成60个不同的表格,你也会得到相当差的性能,因为你会将数据分割到一个主轴驱动器上。即使分裂成60个不同的表格,您仍然每秒提交100次,现在它在磁盘上超过60个不同的位置,而不是在同一个位置。 – Seph

3

我不担心读取或写入的水平。绝对值很低

为所有起重机构建一个表格:不要将信息编码到表格名称中。

如果你想删除存档记录,并且如果你需要在live表中有一些,那么在第8天后通过一些批处理过程就可以了。如果您不需要活动表中的存档数据,请立即移动它,否则只需使用一个表并查看Slowly changing dimension以将其全部保存在一个位置