首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理百万行

处理百万行
EN

Stack Overflow用户
提问于 2015-02-02 01:41:08
回答 4查看 74关注 0票数 0

嗨,最近我需要从不同的交易所导入市场数据,并对其进行分析。

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

代码语言:javascript
运行
复制
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

由于协议中对从不同交换机获取数据的限制,我最多只能每5秒更新一次数据。

现在的问题是:

每5秒一次,我将进口两个市场类型的买卖。每个市场类型都会有100张唱片。

所以,在一天的时间里,我将进口

代码语言:javascript
运行
复制
( 86400 / 5 ) * 2 * 100 = 3,456,000 row

在一个月的时间里我将进口

代码语言:javascript
运行
复制
3,456,000 * 30 = 10,368,000 row

目前我们有5种货币,每种2种货币,这意味着我们将在一个月内进口大约100,368,000美元。

现在,对于当前的分析,我们将输出以下数据:

  1. 最后一次为选定的exchange (2-4)和一种货币导入数据,这很简单。
  2. 选定的交易所(2-4)和选定的一种货币的一天数据。
  3. 与上述相同,但数据超过一个月,不到一年。

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

有什么最好的方法来解决这个问题吗?

目前,我一直使用MySQL作为我的数据库,但我不确定它是否是正确的数据库。

EN

回答 4

Stack Overflow用户

发布于 2015-03-02 02:32:38

第一步。正常化。将market_name和market_type以及货币从庞大的VARCHAR转换为ENUM或TINYINT。这会把数据减少一半。十进制(30,10)需要14个字节,而且精度远高于所需。找出最大价值是什么。小数位数是否限制在2位以内,就像目前在美国一样常见?还是你需要更多的小数位。浮动(4个字节,大约7个有效数字)做什么?这一变化也将节省大量资金。

第二步,决定你是否需要“永远”的数据。如果不是,“清洗”政策是什么?按月划分可能会更好。这将使清除非常简单和快速,此外,它可能有助于一些查询。

第三步。请向我们展示实际的选择;我们需要进一步优化它们,另外看看还可以做什么收缩/优化/等等。

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

步骤5.在决定了PARTITIONing和选择之后,让我们讨论INDEXes。

我可以详细说明其中的任何一个,你想要更多的细节吗?

票数 1
EN

Stack Overflow用户

发布于 2015-03-04 00:09:04

第一步:标准化的好主意,我可以使小数点在4左右变小。我听说浮点数在计算价格相关数字方面名声不好。

第二步:这就是我们还不知道的问题,所以只需保留一切:D

第三步:我们从所有的5秒中得到OHLC的价格,我们更新到每个只节省15分钟,所以现在保存的数据应该少得多。

第四步:我给了他们一分钟,他们说慢点,哈哈。

第五步:除了价格和成交量外,几乎所有的东西都有索引。

我更喜欢SELECT 1,因为它通常非常慢:D,我稍后将select放在下面的答案中。

票数 0
EN

Stack Overflow用户

发布于 2015-03-04 00:24:58

我的数据正在向这个结构变化。

代码语言:javascript
运行
复制
market_name varchar(45)
market_currency_pair varchar(10)
market_type varchar(5)
market_time datetime
market_position_id int(11)
average_volume decimal(30,10)
open_value decimal(30,10)
high_value decimal(30,10)
low_value decimal(30,10)
close_value decimal(30,10)

我可以减少列的一部分:D,顺便说一句,您如何计算每种类型的字节?

我还没有select查询,但这是一个场景:

  1. 选择每个市场过滤器的OHLC价格,根据您希望看到的成交量,通过对average_volume的求和来计算。
  2. 选择O/H/L/C价格为2到4的市场过滤器,根据您希望看到的数量,通过平均成交量之和计算。

我最关心的是我是否保存了正确的数据,这就是我每5s (v是体积,p是价格)的grep。

代码语言:javascript
运行
复制
market_position_id   first 5s   second 5s   third 5s   ...  last 5s
1                   v:10,p:20   v:11,p:30   v:8,p:16        v:12,p:15
2                   v:11,p:30   v:12,p:28   v:10,p:17       v:11,p:14
and so on

然后,我总结如下,这将保存到上表:

代码语言:javascript
运行
复制
market_position_id  average_volume  open  high  low  close
1                   9.6             20    30    15   15
2                   11              30    30    14   14 
and so on
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28270047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档