探索集合 API:订单簿性能优化之旅
在金融交易系统中,订单簿的性能至关重要,它直接影响着交易的执行效率和系统的响应速度。本文将深入探讨不同订单簿实现的性能特点,并介绍如何通过 Scala 集合 API 的优化来提升订单簿的性能。
1. ListOrderBook 中的订单取消操作
在 ListOrderBook 中,支持通过 CancelOrder 命令根据订单 ID 取消现有订单。然而,这一操作面临着算法上的挑战。由于仅提供订单 ID,ListOrderBook 无法高效确定订单所在的买卖方。为了确定订单所在的价格水平,需要遍历买卖双方的价格水平来查找订单 ID,这一操作的时间复杂度与每侧价格水平的数量以及每个价格水平的长度成正比。
最糟糕的情况是提交一个不存在于订单簿中的订单 ID,此时需要遍历整个订单簿来确认该订单 ID 的不存在。恶意交易者可能会通过不断提交不存在的订单 ID 来降低 MVT 订单簿的操作速度。
假设取消请求引用的订单存在于订单簿中,并且找到了其价格水平,从订单簿中移除该取消订单的操作也很昂贵。取消操作是一个线性时间操作,需要遍历订单的链表并移除匹配订单 ID 的节点。以下是在 ListOrderBook 中取消卖单的代码实现:
orderBook.offers.find { case (price, priceLevel) => priceLevel.exists(_.id == idToCancel) }
.fold[(ListOrderBook, Event)](orderBook -> OrderCance
超级会员免费看
订阅专栏 解锁全文
994

被折叠的 条评论
为什么被折叠?



