我正在设计一个金融应用程序,可以节省许多证券的报价。 历史数据可以是每个安全性数百和数百万的报价(并且可能存在数百和数千种不同的证券)。
将每个安全性的引用保存在单独的表中是否更好,还是可以使用一个巨大的表?
如果我使用一个表,我需要提供符号+时间的唯一键以防止重复引号,而使用多个表将要求我只使用单列键作为时间列。
谢谢
顺便说一句,我问这个,因为我开始使用Entity Framework,似乎我不能在运行时使用它来创建表而不添加ADO.NET,因此我需要提前知道我需要哪些表(和所以我不能为新证券添加新表格。或者我错了吗?答案 0 :(得分:4)
表格可以partitioned超过存储空间,但可能不符合您的利益:
虽然分区可以提供很好的功能 好处,它增加了行政 开销和复杂性 实现你的对象,其中 可能更多的是负担而不是收益。 具体来说,您可能不想这样做 分区小表或表 目前符合性能和 维护要求。打折 前面提到的场景使用 分割以减轻负担 移动行和数据 - 你应该 考虑您的方案是否有 决定时这种负担 是否实施分区。
此外,如果您的目标是将数据分成单独的文件组(最终是磁盘组/阵列),您可以使用存储系统实现同样的目标(组中有多个驱动器的SAN LUN,具有许多驱动器的RAID阵列)推动分散负荷。)
如果您的存储空间充足且代码紧张,您的应用程序可以使用一个表格。
答案 1 :(得分:3)
拥有程序生成的表总是一个坏主意。如果你的系统花费太长时间来实现它的目标,也许你应该考虑一个OLAP Cube - 毕竟,它们是为它们设计的。
答案 2 :(得分:1)
对于单个表以及适当选择的索引和约束,您应该没问题。
您可以对表进行分区,但主要用途不是为了提高性能,而是为了管理,因为这样可以删除旧数据并以滚动方式添加新数据分区。除了时间,这可能对你没用;你不太可能按股票代码进行分区 - 我不确定管理分区有什么好处。
我可能会考虑将聚集索引作为自动收报机(可能是一个int代理进入自动收录表或者只是自动收报机)和时间。
在这样一个简单的数据模型中,它将与维度模型无法区分,但如果您想要阅读有关数据仓库性能的维度建模,这可能很有用,特别是使用正交的特征/缺点日期维度和时间维度。如果您的数据是在盘中,则可能需要使用单个日期时间列。
答案 3 :(得分:0)
不要对不同的证券使用不同的表格。请!这最终会给你带来比你解决的问题更多的问题。
如果将安全性设置为聚簇索引的第一列(8字节或更少,请在必要时使用人工int键)并使索引尽可能短,您的性能将会很好。即使引擎必须进行扫描以满足查询,也始终会提供安全性,因此它将对表或索引进行范围扫描。
如果绝对必要,您可以对表格进行分区。在SQL 2008或更高版本中,您还可以创建仅覆盖表中一部分行的filtered indexes。
更新不会出现与单独表格不同的问题。
将安全性作为第一列的插入应该永远不会给出问题。您最终将没有混合页面(每页多个证券),因此插入将与单独表格完全相同,因为安全值不会导致页面拆分(尽管它们可能由其他问题)。