Sobes.tech
Back to questions
Senior
4

Расскажи про in-memory хранилище позиций и балансов с синхронной персистентностью из резюме.

Companies where asked
OZONOZON

Answer from AI

sobes.tech AI

In-memory хранилище позиций и балансов — это структура данных, которая хранит актуальные значения позиций и балансов в оперативной памяти для быстрого доступа и обновления. Синхронная персистентность означает, что при каждом изменении данных они одновременно записываются в долговременное хранилище (например, базу данных или файл), чтобы избежать потери данных при сбое.

В контексте Golang такая система может выглядеть как карта (map) с mutex для потокобезопасности, где ключ — идентификатор позиции или счета, а значение — структура с балансом. При обновлении баланса сначала обновляется in-memory структура, затем синхронно вызывается запись в базу данных. Это обеспечивает консистентность данных между памятью и диском.

Пример упрощённой реализации:

type BalanceStore struct {
    mu       sync.Mutex
    balances map[string]float64
    db       *sql.DB
}

func (bs *BalanceStore) UpdateBalance(id string, amount float64) error {
    bs.mu.Lock()
    defer bs.mu.Unlock()

    bs.balances[id] += amount

    // Синхронная запись в БД
    _, err := bs.db.Exec("UPDATE balances SET amount = ? WHERE id = ?", bs.balances[id], id)
    if err != nil {
        // При ошибке откатываем изменения в памяти
        bs.balances[id] -= amount
        return err
    }
    return nil
}

Такой подход позволяет быстро читать и обновлять данные из памяти, при этом гарантируя, что данные не потеряются при сбое, так как запись в базу происходит синхронно.