gpt4 book ai didi

mysql - 处理百万行

转载 作者:行者123 更新时间:2023-11-29 23:06:41 25 4
gpt4 key购买 nike

嗨,最近我需要通过从不同类型的交易所导入市场数据并进行分析来处理市场数据

市场表非常简单,它由下面的列组成

market_name varchar(45) => this will be exchange name
market_type varchar(5) => buy sell bids of asks
currency varchar(8) => cur1_cur2 e.g usd_eur
volume decimal(30,10)
price decimal(30,10)
import_time int => unix time

由于从不同交易所获取数据的协议(protocol)存在一些限制,我最多只能每 5 秒更新一次数据。

现在的问题是这样的:

对于一个交易所,每 5 秒我就会导入两种市场类型的买入和卖出。每个市场类型都会有100条记录。

因此,我将在一天的时间内导入一次交易所

( 86400 / 5 ) * 2 * 100 = 3,456,000 row

我将导入一个月

3,456,000 * 30 = 10,368,000 row

目前我们有 5 个交易所,每个交易所有 2 种货币,这意味着我们将在一个月内导入约 100,368,000 行。

现在为了进行分析,我们将输出以下数据:

  1. 所选交易所 (2 - 4) 和一种货币的最新导入数据,这很简单。
  2. 所选交易所 (2 - 4) 和所选一种货币的一日数据。
  3. 与上述相同,但数据多于一个月且少于一年。

您会看到有些数据暂时不会使用,但我们仍然需要保留它以供将来使用。

处理这个问题的最佳方法有什么建议吗?

目前我总是使用 MySQL 作为数据库,但我不确定它是处理此问题的正确数据库。

最佳答案

第 1 步:标准化。将 market_name 和 market_type 以及货币从庞大的 VARCHAR 更改为 ENUM 或 TINYINT。这会将数据大小减少一半。 DECIMAL(30,10) 占用 14 个字节,并且精度远高于所需的精度。找出最大的值是多少。小数位数是否像美国目前常见的那样限制为 2 位?或者您是否需要更多小数位。 FLOAT(4个字节,大约7位有效数字)可以吗?这一改变也将节省很多。

第 2 步:确定您是否“永远”需要该数据。如果不是,“清除”政策是什么?按月分区可能会更好。这将使清除变得简单且非常快速,而且它可能对某些查询有所帮助。

第 3 步。请向我们展示实际的 SELECT;我们需要进一步调整它们,并看看还可以进行哪些其他收缩/优化/等操作。

第 4 步。“汇总表”有帮助吗?也就是说,与其保留上个月 5 秒的数据,不如保留 1 分钟甚至 1 小时的数据就足够了吗?这将节省大量空间,并极大地加快查询速度。

第 5 步。在决定分区和 SELECT 之后,我们来讨论索引。

我可以详细说明其中任何一个;您想了解哪些方面的更多详细信息?

关于mysql - 处理百万行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com