我想在数据库中存储大量加密货币数据。然后我想在网页上显示带有历史价格的漂亮 JavaScript 价格图表。 问题是我不确定哪种数据库设计最适合这个问题,我正在考虑 Mysql DB,但在这种情况下 NOSQL db 可能更好,我不知道。
我需要什么:
- 我需要跟踪至少 100 种具有历史和历史记录的加密货币 当前价格和其他股票信息,如成交量等……
- 我将每 10 分钟为每个加密插入一次新数据 ((6 记录/小时 * 24 小时 * 365 天) * 每个加密 100 = 5 256 000 每年新纪录)
- 我需要查询每种代币的不同时间范围才能在网页上绘制图表。
我的想法:
我提出了这个解决方案,但我需要知道这是否可以,或者我完全错误且天真。 在这种情况下,我将有 2 个表,第一个父表将在其中存储有关硬币的所有必要信息,子表将在其中存储所有价格,但该子表必须包含大量数据,这让我感到担忧。
我的表结构示例:
tbl_coin_detail:
id. |Tick_name | Name |Algorithm |Icon
1 | BTC |Bitcoin |SHA256 |path/to/img
2 | ETH |Ethereum |Ethash |path/to/img
.
.
.
tbl_prices:
id | price_USD | price_EUR | datetime | Volume_Day_BTC | FK_coin
1 | 6537.2 | 5 632,28 | 2018-07-01 15:00:00 | 62121.7348556964 | 1
2 | 466.89 | 401.51 | 2018-07-01 15:01:00 | 156373.79481106618 | 2
.
.
.
另一个想法是为每种代币价格制作单独的表格,这意味着 100 个包含所有历史和当前价格以及股票信息的表格,而不是一张巨大的表格。 我真的不确定这里,什么是更好的,一张表中的所有价格对于简单查询来说都是好的,但我想这可能是巨大的性能瓶颈,从单独的表中进行查询对于查询来说会更糟糕,因为我需要编写查询对于每个表,但它可以帮助提高性能。
你能指出我如何解决这个问题的正确方向吗? SQL DB 和 NOSQL 哪个更好? 预先感谢您。
最佳答案
MySQL 建议...
您有 Volume_Day_BTC
,但您说“6 条记录/小时”——是每日记录还是更细粒度的记录。
数据量不是很大,但在开始之前缩小数据类型将是有益的。
id
是不必要的;请改用PRIMARY KEY(coin, datetime)
。
仔细考虑价格和数量的数据类型。一个极端是空间(因此,某种程度上是速度);另一方面,精度。
DOUBLE -- 8 bytes, about 16 significant digits, large range
DECIMAL(17, 11) -- 8 bytes, limited to $1M and 11 decimal places (not enough?)
DECIMAL(26, 13) -- 12 bytes, maybe big enough?
etc.
是否可以汇总一个月内的数据以节省空间?每小时或每日平均/高/低等。这对于加快获取绘图数据非常有用。
特别是,我建议按币+日保留一个包含交易量、价格等的汇总表。考虑使用FLOAT
(4 个字节,7 个有效数字,足够的范围),因为对于绘图。
所以,我推荐 3 个表:
Coins -- 100 rows with meta info about the currencies.
Prices -- 5M rows/year of details -- unless trimmed (400MB/year)
Summary -- 36500 rows/year for graphing range more than, say, a week. (4MB/yr)
对于较短范围的图表来说,每小时汇总表可能是值得的。没有必要进行每周或每月的总结;它们可以足够高效地从日常生活中获得。
使用 InnoDB。
关于mysql - 正确的数据库设计,在数据库中存储大量的股票加密货币数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211782/