大型集的主键设计和分区

时间:2015-05-28 15:45:53

标签: sql sql-server primary-key

我目前正在为sql server设计数据库,我需要处理大量数据。

上下文是我的以下内容:
由4680个芯片组成的底层作为唯一ID 每个芯片由66个点组成,并具有通过/失败布尔值 每个点为3个值(x,y,半径)

所以每20分钟我需要插入1个底片,对应308和880个斑点,这个24 / 24h 7 / 7d持续10年,产生80亿个斑点(我知道这听起来很多......)

我想过使用这样的复合键:
SUBSTRAT (INT ID)
CHIP (INT FK_SUBSTRATID,ROWNUMBER INT,COLNUMBER INT)
SPOT (INT FK_SUBSTRATID,CHIPROWNUMBER INT,CHIPCOLNUMBER INT,ROWNUMBER INT,COLNUMBER INT)

列号和行号从1-30开始迭代,用于芯片和点数

我也在考虑将所有斑点信息放入CHIP表中。我不知道这样的情况最好,因为我从未遇到过如此多的数据。

我想知道如何在这些表上使用分区,数据需要提供良好的响应时间,比方说30天,所以我计划添加一个字段InsertDate来对其进行分区。

编辑:
至于数据的使用,芯片信息将在30天内使用,以决定是否继续制造底层。 现场信息将用于对x,y偏差进行统计分析 应根据需要检索点和芯片信息至少10年 所有数据都需要保留以符合FDA要求

谢谢大家的建议

1 个答案:

答案 0 :(得分:0)

我会在关键设计的主要问题上推荐其他人,但是想回答一下插入和读取性能的问题。

当您需要有效地写入和读取大型数据集时,可能是使用单独的专用读写数据库的好时机。这个想法是你有两个不同的模式 - 一个针对快速写入进行了优化,一个针对快速阅读进行了优化。然后,您将通过输入数据工作的作业放在一起,并将其移动到可读的数据库/表中。权衡是你的书面数据不能立即获得(滞后取决于你喜欢处理写作的方式)。

方法类似(但不完全是)Command Query Responsibility Segregation - CQRS。要点是拥有专门的读取和写入组件可以让每个组件都高度调整其角色。