1

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

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

谢谢!

4

5 回答 5

4

First of all, it's unclear you actually need a database. If you don't need things such as concurrent access, client/server operation, ACID transactions etc... you might as well just implement your cache using the file system.

If you conclude you do need a DBMS, there are many good choices, including free such as: PostgreSQL, MS SQL Server Express, Oracle Express, MySQL, Firebird, SQLite etc... or commercial such as: Oracle, MS SQL Server, IBM DB2, Sybase etc...

I suggest you make your data model flexible, so you don't have to add new column for each new quarter:

enter image description here

This model is also well suited for clustering (if your DBMS of choice supports it), so the calculations belonging to the same company are stored physically close together in the database, potentially lowering the I/O during querying. Alternatively, you may choose to cluster on year/quarter.

于 2013-02-20T18:22:06.823 回答
3

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

  • ID
  • 四分之一
  • 公司名称
  • 价值1
  • 价值2
  • 价值3

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

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

于 2013-02-20T17:34:56.840 回答
2

Excel 对工作表的大小有限制,对于希望移植到不同结构的任何内容,您都不应该真正将其用作明确的“数据库”。一般来说,它对电子表格和会计之类的东西很有用,但你不应该将它用于计算中所理解的绝对真实数据库。此外,Excel 对可以包含的记录数有限制:截至 2003 年,工作表大小为 65,536 行 x 256 列

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

于 2013-02-20T17:21:16.493 回答
1

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

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

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

于 2013-02-20T17:26:28.163 回答
1

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

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

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

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

于 2013-02-20T17:39:12.303 回答