我经常接到一些订单,我需要存储它们并从中建立一个聚合。订单将有一个 ID,并且会有一个与之关联的工具类型。订单还可以附加一些事件,例如添加、更新或删除。如果是更新事件,则订单不会附加工具类型,但订单 ID 相同。例如:如果我有一个订单 ID 为 100 的工具“xyz”的订单,稍后我可以获得一个事件以将 ID 为 100 的订单更新 20 美元,并且该事件不会出现工具类型(命令)。
一旦我收到订单,我需要为独特的工具建立一个订单簿,例如工具“xyz”应该包含订单簿中所有收到的订单。
我的问题是如何有效地存储它以及我应该使用什么样的数据结构?
订单看起来像这样:
public class Order
{
public Order(Action add, int id, string instrument, int price)
}
订单簿:
public class OrderBook
{
public string Instrument;
public List<Order> AllOrders;
}
选项1:
当我收到订单时更新 a Dictionary<int,OrderBook>
,将 key 作为订单 ID,并为该工具创建一个订单簿。
问题:这将处理更新事件,我可以检查订单是否已经存在,然后更新订单簿。然而,一个工具类型应该只有一个订单簿,这里违反了这个条件,因为工具“xyz”可能有多个添加订单通过,也使得操作变得困难。
选项 2:
更新 , 的字典Dictionary<OrderBook, List<int>>
,其值作为订单 ID。
问题:这将解决上述问题,但是当我收到更新事件时,我必须检查每个值列表(即订单 ID 列表)以查看订单是否已经存在,因为工具类型是将是空的,我无法通过 OrderBook 键查看。
订单实时下降,存储和检索操作必须更高效(如果不是 O(1) 然后 O(logn)),请问有没有更好的方法来构建这个?
注意:OrderBook 是一种工具的所有订单的集合,并且对于该工具来说是唯一的。订单将针对特定价格的工具,并且同一工具将有许多订单。我从其他人(第三方库)获得订单以及事件,我负责构建订单簿。