我正在编写一个C#程序,我正在查看~5300个股票行情。我将数据存储在MySQL数据库中,其中包含以下字段:date,tickername,closingPrice,movingaverage50,movingaverage200,...以及其他一些字段。每个库存最多可包含15300个不同的数据点。所以总数据库将是5300x15300x6左右不同的字段。
我的问题是,除了一个大表外,是否有更有效的方法来存储所有这些数据?将数据分解成不同的表格,比如十年,会给我买点东西吗?是否有一些链接/网站我应该去了解我应该考虑哪些因素来设计数据库尽可能快,或者MySQL数据库本身是否有效?
我目前正在读取5500个excel文件,一次一个地用数据填充我的c#对象,这需要大约15分钟......我假设一旦我让MySQL继续下去就会被削减。< / p>
感谢您的帮助;对于一个开始考虑数据库设计的地方来说,这更像是一种捕鱼方式。
答案 0 :(得分:0)
评论太长了。
通常,以相同格式存储多个表是一个坏主意。这成为一个维护问题,并对某些类型的查询产生可怕的后果。因此,首选一个表。
总行数为486,540,000。这非常大,但不是非凡。
关于数据布局的问题不仅取决于数据,还取决于数据的使用方式。我的猜测是使用索引和分区可以解决您的性能问题。
在15分钟内处理5,500个Excel文件似乎相当不错。数据库是否会明显更快取决于服务器和应用程序之间的数据量。如果您将“Excel”文件作为CSV文本文件阅读,那么数据库可能不是一个很大的收获。如果您正在阅读Excel,那么可能会更好。
注意:使用数据库,您可以将处理从C#移动到数据库中。这允许数据库利用并行处理,这可以为性能改进开辟其他途径。
答案 1 :(得分:0)
PRIMARY KEY(ticker, date)
- 这样可以获得有关单个自动收报机的历史信息,因为它有效。PARTITION BY (TO_DAYS(date))
- 这导致所有INSERT
活动都在一个分区中。这个分区的大小是有限的,因此每晚分散插入5300个新行的随机访问可能仍然在缓存中。SMALLINT UNSIGNED
的2字节ticker_id
,链接到代码的规范化表。 3字节DATE
;对于INT UNSIGNED
,音量可能太大,要么使用FLOAT
(有一些舍入错误),要么使用DECIMAL
。价格很棘手 - 使用FLOAT舍入错误,使用DECIMAL过大:美国代码需要至少(9,4)(5个字节),如果你回到分数定价的日子会更糟(例如,5-9 / 16 )。