[英]Which data structure is suitable to store multiple keys with one Object and Complexity is O(1)
在開發交易核心系統時,假設有一個訂單 object 為:
class Order{
name string, // symbol name
id int,
price float64,
tp_price float64,
sl_price float64,
type int, // 0 - market order, 1 - limit order, 2 - stop order, 3 - stop limit order
expiration datetime
}
我們有三個觸發器需要找到指定的訂單並對其進行修改:
因此,為了方便 Tick 數據處理,我使用以下數據結構: map(key with symbol name , data is ordered array order array ) 真實數據,如:
map['AUDCAD'] = array(order1, order2,order3, ...)
map['CADUSD'] = array(order7, order8,order9, ...)
然后當分時數據(ask/bid) 出現時,我們可以在 map 中輕松找到基於符號名稱的所有訂單。
但是如果來自客戶端的訂單修改請求,我必須循環所有 map 以找到指定的訂單,這是不好的。
我們還需要在多線程模式下處理訂單。
所以我的問題是:哪種數據結構適合我的情況:找到具有多個鍵(訂單 ID 或符號名稱)且復雜度為O(1)的訂單。
任何想法都非常感謝。
您可以使用具有兩個映射的結構:
type orderIndex struct {
sync.RWMutex
orderByID map[int]*Order
orderByName map[string][]*Order
}
插入時, Lock()
排序索引,並將順序添加到兩個映射。
查找時, RLock
索引,並在其中一張地圖中查找順序。
如果您需要保護並發訪問的單個訂單,您可以添加一個Mutex
到訂單結構,或者如果您需要批量更新訂單,則使用Lock()
作為orderIndex
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.