好吧,今天这个问题一直困扰着我。
问题:我目前通过多播以极高的速率接收股票报价数据。我已经解析了这些数据,并以下列形式接收它。
-StockID:Int-64
-TimeStamp:从纪元开始的
微秒 -Price:Int
-Quantity:Int
每秒解析数百个这样的数据包。我试图通过将这些数据打包到由 stockID (key == stockID)(value == array of [timestamp, price, quantity] 元素) 散列的字典/哈希表中来减少存储端的计算。
我还希望每个字典代表 5 分钟间隔内的时间戳。当传入数据的时间戳超过 5 分钟时间间隔时,我希望这些新数据进入代表下一个时间间隔的新字典。此外,一个特殊的键将在键 -1 处散列,告诉该字典每天属于哪个特定的 5 分钟间隔(因此,如果您在上午 12:32 收到一些东西,它应该散列到键 -1 处值为 7 的字典中,因为这表示该特定日期从上午 12:30 到上午 12:35 的时间间隔)。一旦时间过去,过期的 dict 可以发送到 dataWrapper。
现在,您可能正在想出一些想法。但这里有一个很大的限制。进来的时间戳不一定严格增加;但是,如果一个间隔结束后等待大约 10 秒,那么可以安全地假设每个进入的数据都属于当前间隔。
我做所有这些复杂事情的原因是为了减少我的应用程序存储端的计算。通过上面的设置,我的存储端线程可以简单地遍历字典中的所有键、值对并将它们存储在存储系统上的相同位置,而无需重新打开文件、重新分配组或更改目录。
祝你好运!顺便说一句,我将不胜感激任何答案。:)
如果你可以用 python 给我发送一些东西(这就是我正在做的项目),但我可以完全理解 Java、C++、Ruby 或 PHP。
概括
我正在尝试将股票数据放入代表每个字典 5 分钟间隔的字典中。数据附带的时间戳决定了它应该放入哪个特定的字典。这可能相对容易,只是时间戳在输入时不会严格增加,因此一旦 5 分钟过去,字典就不能立即发送到数据包装器时间戳,因为不能保证在 10 秒内不再接收任何数据,在此之后可以将其发送到包装器。
我只想要任何可以帮助我安排这个的想法、算法或部分实现。我们如何在时间戳(用于数据)和实际时间(10 秒缓冲区)内切换字典的当前使用。
澄清编辑
5 分钟窗口应该是数据驱动的(基于时间戳),但是 10 秒超时似乎是时钟时间。