python - 用于处理实时流市场数据的 Python 中性能最高的数据结构
问题描述
我即将处理实时流媒体股票市场数据,每秒数百个“滴答”(dict
s),将它们存储在内存数据结构中并分析数据。
我正在阅读pandas
并对此感到非常兴奋,只是得知append
不推荐使用 pandas 的功能,因为它会在每个单独的附加项上复制整个数据帧。因此,对于高频流数据(例如金融或传感器数据)的实时处理和分析来说,它似乎pandas
几乎无法使用。
所以我回到了原生 Python,这很好。为了节省 RAM,我正在考虑滚动存储最后 100,000 个数据点左右。
什么是性能最好的 Python 数据结构?
我正在考虑使用一个列表,并插入数据点编号 100,001,然后删除第一个元素,如del list[0]
. 这样,我可以保留最后 100,000 个数据点的滚动历史,因为我的索引会越来越大。在 Python 中似乎不可能实现本机“滚动”数据结构(如在 C 中具有 16 位索引和增量而没有溢出检查)?
在 Python 中实现我的实时数据分析的最佳方法是什么?
解决方案
您描述的工作流程让我想到了一个deque
,基本上是一个列表,它允许在一端(例如右侧)扩展,同时从另一端(例如左侧)弹出(获取/删除)它们。该参考甚至有一个简短的双端队列配方列表来说明诸如实现tail
或维护移动平均线(作为生成器)等常见用例。
推荐阅读
- c++ - 输出的简单重定向与实现记录器
- asp.net-core - 为什么 Newtonsoft [JsonIgnore] 停止在 asp core mvc 中工作
- regex - 16位身份证的正则表达式如何写,规则如下?
- javascript - 为什么 obj.constructor.prototype 并不总是等于 obj.__proto__?
- javascript - 如何将用于 React SPA 的 Paypal Javascript SDK 与后端服务器验证集成?
- macos - IDE 不尊重 macOS 中的环境变量
- c - 是否可以将结构指针转换为c中的函数指针?
- c# - 如何在 Blazor 中通过 Entity Framework Core 运行原始 SQL 查询
- firebase - 如何解决此错误“无法分配'用户'类型的值?' 键入“字符串?”?
- node.js - Electron js + Axios xhr.js:120 拒绝设置不安全的标头“user-agent”