我应该为数据库使用什么?

时间:2013-02-20 17:15:38

标签: database vb.net excel ms-access database-design

我的vb.net代码计算从1901年到现在每个季度公司股票价格的增长率,并将其存储在数据表中。这需要一段时间才能完成(10-15分钟)。我希望在计算数据后将信息保存在数据表中,以便每次运行程序时都不必重新计算过去的增长率。当我打开我的程序时,我希望数据表包含已经计算过的任何增长率,所以我只需要计算新季度的增长率。

我应该将我的数据表存储在某种数据库中,还是有其他方法可以执行此操作?我的数据表非常大。它目前有450列(从1901年至今每季度一列),可以有数千行(每个公司一行)。这对于Microsoft Access来说太大了吗? Microsoft Excel可以选择吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

首先,目前还不清楚你实际上需要数据库。如果您不需要并发访问,客户端/服务器操作,ACID事务等等,您可以使用文件系统实现缓存。

如果你得出结论你确实需要一个DBMS,那么有许多不错的选择,包括免费的,如:PostgreSQL,MS SQL Server Express,Oracle Express,MySQL,Firebird,SQLite等......或商业广告,如:Oracle,MS SQL Server,IBM DB2,Sybase等...

我建议您使数据模型灵活,这样您就不必为每个新季度添加新列:

enter image description here

此模型也非常适合clustering(如果您选择的DBMS支持它),因此属于同一公司的计算在物理上紧密地存储在数据库中,可能会降低查询期间的I / O 。或者,您可以选择按年/季度进行聚类。

答案 1 :(得分:3)

我会将数据库设计更改为:

  • ID
  • 公司名称
  • 值1
  • 值2
  • 值3

作为您的列并开始将其保存为垂直表格。

然后,你没有你想象的那么多数据,所以我推荐一些免费的东西,比如mysql,甚至是nosql,因为你除了存储和检索数据之外什么都不做。任何基于文本的文件:你使用的xml,csv,.xls会慢一些,因为整个文件需要加载到内存中才能解析它。

答案 2 :(得分:2)

Excel对工作表的大小有限制,你不应该把它当作明确的“数据库”用于任何希望移植到不同结构的东西。它通常适用于电子表格和会计等事项,但您不应将其用于绝对真值数据库,如计算中所理解的那样。此外,Excel对可以包含的记录数量有限制:Worksheet size 65,536 rows by 256 columns as of 2003

Access可能对此有用,但是根据您正在查看的记录数量,您可能会遇到文件大小问题,速度减慢以及类似的一般问题。在一次开始拥有超过3,000条记录的情况下,最好使用其中一个大型RDBM或类似的东西; Oracle,MySQL,SQL Server等

答案 3 :(得分:1)

我认为主要问题可能是您设计数据库的方式。 每个季度的列都听起来不太好,特别是当您每个新季度都需要更改数据库架构时。

您可以从MS Access数据库开始,然后如果您遇到任何性能问题,请迁移到SQL Server数据库或其他内容。

同样,我认为您应该仔细查看您的数据库设计。

答案 4 :(得分:1)

我对股票数据有很多经验。在测试了很多方法之后,我认为对于一个简单的免费方法,你应该尝试SQL Server。您正在使用的数据量对于Access来说太多了(我想这不是您想要的唯一计算)。您可以免费使用SQL Server Express

对于这个设计,我将在SQL Server中创建一个名为HistoricalGrowthRate的数据库。我会为每个股票代码都有一个表格并将数据存储在那里。

实现此目的的一种方法是使用一个单独的数据库,其中包含您希望遵循的所有符号的表(如果您不能使用来自纳斯达克的CompanyList.csv)。循环遍历该表中的每个符号,并在HistoricalGrowthRate中运行创建表。如果要填充值,只需再次循环并插入值即可。您也可以从Access导出,这对您来说速度更快。

当您呼叫信息并提供访问信息的简便方法时,这将减少负载。因此,如果您想要AAPL的历史增长率,只需将连接字符串设置为HistoricalGrowthRate数据库,参考表AAPL并提取值。