我正在编写一个从交易所获取订单簿的比特币交易者应用程序。典型的订单簿如下所示:https ://www.bitstamp.net/api/order_book/ (它有两部分,“出价”和“询价”,它们应该分开存储,但数据结构相同)。一种解决方案是只存储这个大订单的一部分,这将解决访问效率问题,但它引入了一系列与一致性和更新限制有关的其他问题。因此,目前看来,更好的解决方案是获取订单簿并不断更新。
现在,此交易者应用程序稍后会使用新订单和已删除的订单更新此获取的订单簿。例如,如果您在订单簿中以 900 美元的价格购买 1.5BTC,它可能会被完全取消,或者可能会更新为包含更多或更少的 BTC。此外,可以在该价格以下或以上添加新订单。
有两个关键操作:
快速找到价格完全相同的订单(在更新或取消的情况下)
快速找到价格最接近提供的价格但低于它的订单
在更新的情况下,我们可能实际上并不知道它是更新,因此我们可能会开始执行 (2) 并最终执行 (1)。
我不是数据结构方面的专家,所以我开始查看最常见的那些,现在我觉得它应该是某种树,但我不确定是哪一种。我最无知的猜测是一个数据结构,其中每个节点都是价格中的一个数字,因此,例如,要快速找到价格为 900 美元的所有节点,items['9']['0']
然后寻找叶节点。现在我脑子里还是一团糟,所以请不要对我评价太苛刻。任何建议都会很棒。