优化SQL Azure中的股票数据存储

时间:2012-06-17 17:30:47

标签: sql-server azure-sql-database

我想将历史股权价格数据存储在 SQL Azure 数据库的表格中。 我将每15分钟获得约10万股股票价格,其中一些可能会或可能不会改变其价值。所以我需要每天存储(5000 * 32(8小时* 4次)= 160000)160000条记录。

目前,权益表具有以下结构,大约有20列。

Equity table
---------------
ID INT PK,
Name Varchar(20),
Value Money,
Currency Varchar(10),
.......

我想存储历史价格的新表格(HistoricalPrices)包含以下结构。

HistoricalPrices
-------------------
ID INT PK,
EquityID INT FK,
[Date] DateTime,
Value Money

如果我每天存储这160000条记录,那么在一个月内,我的表将获得大约500万条记录。

我的问题是,这个表如何处理数据,我是否遇到任何性能问题,在维护这些数据方面有没有其他方法,我是否需要对表结构进行任何更改等?

2 个答案:

答案 0 :(得分:2)

通过适当的索引和群集,性能不应成为适当的选择性查询的问题。传统的操作问题,如备份,重建索引作业以及限制返回的数据量都需要考虑,尽管这不是Azure的问题。

请注意,Azure数据库大小限制可能会迫使您在某个时间点(http://blogs.msdn.com/b/sqlazure/archive/2010/06/24/10029719.aspx)水平分区(分片)(Azure不支持TABLE分区。)

http://msdn.microsoft.com/en-us/library/ms345146(v=sql.90).aspx

另外要考虑的是你的32位整数PK的溢出 - 尽管目前的价格你有超过50年的价值,如果你跟踪增加的频率(例如更多的交易所或更多的股票),你将需要考虑一个64位的INT。

答案 1 :(得分:0)

由于您的音量要求,您应该考虑使用联盟(http://msdn.microsoft.com/en-us/library/windowsazure/hh597452.aspx)。如果您的记录在一个批次中插入/更新,您可能需要将它们分解为特定的值范围。但一般来说,Federations是SQL Azure的首选分片机制。在完成存储设计之前,请检查该功能。

如果有兴趣,请查看我的博客,了解与联邦设计相关的具体信息:http://geekswithblogs.net/hroggero/archive/2011/07/23/preparing-for-data-federation-in-sql-azure.aspx