gpt4 book ai didi

python - 记录高频数据而不丢包

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:55 25 4
gpt4 key购买 nike

我正在使用带有 python 绑定(bind)的 QuickFix,以及用于数据管理的 pandas。

我已经处理这个问题一段时间了,在 SO 或 Google 上没有找到任何明确的问题/答案。它涉及低延迟环境中的代码效率和架构。

我正在记录财务数据。这是非常高的频率。在快速期间,(小型)消息每 15 毫秒左右到达一次。 QuickFix 将每条消息传递给我编写的消息破解器,它执行以下操作:

  1. re解析消息
  2. 转换消息每个元素的数据类型(在本例中大约有 8 个)
  3. 用 8 个元素更新 pandas 数据框的值
  4. 在本地计算机上打开一个 .csv 文件,附加 8 行元素,关闭文件。

一个非常简单的过程,但是乘以几百个市场,结果是我的电脑无法处理。每天 2 到 100 次之间的任何时候,计算机都会卡住、掉线,我会丢失大约 20 秒的数据(大约 13,000 个样本!)

我目前正在研究 PyTables,看看是否可以加快我的进程。但我对计算机科学的了解还不够,无法真正了解速度问题的核心,希望得到一些智慧。

.csv 文件有问题吗?我可以使用 PyTables 和 HDF5 来加快速度吗?做这样的事情的“正确”方法是什么?

最佳答案

尝试将数据写入内存数据库或队列,或时间序列数据库,然后持久保存到磁盘。尝试来自 in mem databases 的东西或 time series databases

或者简单地尝试将时间序列数据写入MSMQ或另一个 MQ。

我现在读到 Pandas 是一种用于 Python 的内存数据库。没听说过。上面的列表中有很多!此外,为了回答您的一些问题,正确的做法是考虑价格持久性的每个“层”上的每个操作。首先,你的网络 IO 操作将比你的 CPU 更昂贵。其次,您的网络很容易出现带宽不堪重负的数据 Storm 。您需要一个大数据管道来处理突发事件。

因此,每条价格消息到达您的网络接口(interface)时,都必须先通过 TCP 堆栈(大概),然后才能到达您的 CPU。 UDP is quicker than TCP但如果您使用的是 QuickFIX,那么您将使用 TCP。

然后数据报通过 OSI layers 解包它到达您的 CPU,它开始循环执行指令,假设 CPU 在其他地方不忙。在这里,基本上如果您有任何 IO(到磁盘或任何地方),您的 CPU 将旋转等待 IO 完成。操作系统可能 context switch如果您的进程优先级太低,则转到另一个进程。或者,您的线程模型可能导致太多 context switches ,最好对这种事情使用单线程,这样就没有了。

执行此操作的“正确”方法是您希望通过 CPU 从 NIC 获取数据并将其放入 MQ 或内存空间。然后,您可以稍后批量写入数据库......(每分钟或您决定的任何时间)

关于python - 记录高频数据而不丢包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609858/

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