【发布时间】:2021-11-15 11:41:36
【问题描述】:
我正在创建一个基于历史每日股票报价进行计算的网站。现在我有 5 个表对应于字母表中的不同字母(按符号组织)。
这是我用于构建表的 create 语句的示例。
CREATE TABLE `EOD_QRSTU` (
`symbol` varchar(10) NOT NULL,
`open` decimal(10,5) DEFAULT NULL,
`close` decimal(10,5) DEFAULT NULL,
`high` decimal(10,5) DEFAULT NULL,
`low` decimal(10,5) DEFAULT NULL,
`volume` int(11) DEFAULT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`date`,`symbol`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
最常见的查询是为两个日期之间的特定符号选择行。例如,这个表现在有大约 500,000 行,并且需要长达 8 秒的时间来为两年范围内的特定符号返回大约 400 行。为什么需要这么长时间?雅虎财经等网站如何快速加载图表? 我一直在考虑将每只股票的数据存储在文件系统中自己的文件中,任何人都可以对这种方法提供一些见解吗?如果这种方式足够快,我什至不需要限制返回的行数,我可以简单地返回文件中的每一行。 CSV 会是合适的文件格式吗?
如果重要的话,我现在正在使用 PythonAnywhere 来托管网站,并且正在使用带有 Flask-SQLalchemy 的 Python 作为后端。我也计划很快迁移到 AWS,这会解决部分问题吗?
【问题讨论】:
-
数据库通常比文件系统快得多
-
@RiggsFolly 我已经将它作为主键索引?
-
使用
explain了解查询在做什么。如果它很好地使用索引,那么您将处于内存中可以容纳的极限。关系数据库在可扩展性方面从根本上受到限制,但是像您描述的 500k 行应该在适度系统的限制范围内。你的mysql服务器的内存设置够吗?
标签: mysql database-design