我想在db中存储大量加密货币数据。然后,我想在网页上显示带有历史价格的漂亮javascript价格图。 问题是,我不确定正在使用哪种数据库设计来解决此问题,我当时正在考虑使用Mysql DB,但在这种情况下,也许我认为NOSQL db更好。
我需要什么
我的想法:
我提供了这种解决方案,但我需要知道这是否可行,或者我完全错误并且天真。 在这种情况下,我将有2个表,第一个父表将存储有关硬币的所有必要信息,子表将存储所有价格,但该子表将必须包含大量数据,这使我感到担忧。 / p>
我的表结构示例:
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有什么更好的? 预先谢谢你。
答案 0 :(得分:1)
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个有效数字,足够的范围)对绘制图形来说已经足够了。 / p>
所以,我建议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。
答案 1 :(得分:0)
说实话,这远非“巨大”。我们在这里谈论的不是数十亿条记录,因此任何索引正确的数据库都可以。