簡體   English   中英

哪種數據結構適合用一個 Object 存儲多個鍵,復雜度為 O(1)

[英]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  
}

我們有三個觸發器需要找到指定的訂單並對其進行修改:

  1. 來自客戶端的基於 id 的用戶修改
  2. 定時器檢查過期需要根據id查找訂單
  3. Tick 數據處理邏輯需要根據名稱查找訂單

因此,為了方便 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM