# 核心概念

本頁說明 ToriiDB 中會直接操作的物件：store、session、資料庫、entry 與保留鍵命名空間。

## Store、Session 與資料庫

一個 `Store` 擁有 16 個獨立資料庫，編號 `0` 到 `15`。每個資料庫有各自的 `sync.RWMutex`、記憶體 `map[string]*Entry`、目錄 `db_N/` 與只載入一次的保護。資料庫在第一次被任何操作觸及時才從磁碟重播。

| Handle | 建立方式 | 共用 | 擁有 |
|---|---|---|---|
| `Store` | `store.New(dir, apiKey...)` | 無 | 所有資料庫、embedder、背景 wait group、過期計時器 |
| `Session` | `Store.Session()` | 資料庫、embedder、wait group | 自己的選定資料庫索引 |

`Select(index)` 只改變被呼叫的 handle 的索引，且拒絕 `0-15` 以外的值。索引是無鎖的 `int`，併發呼叫端必須各自使用自己的 `Session`；daemon 因此每個請求建立一個。

## Entry

```go
type Entry struct {
    Key       string
    Type      ValueType
    CreatedAt int64
    UpdatedAt *int64
    ExpireAt  *int64
    Vector    []float32
    // value 與 parsed 未導出
}
```

`Entry.Value()` 回傳原始字串。未導出的 `parsed` 欄位快取解碼後的 JSON，只能透過 `setValue()` 或 `setParsed()` 修改，因此不會與原始字串脫節。`Get` 回傳在讀鎖下取得的 entry 複本。

## 保留命名空間

以 `__torii:` 開頭的鍵存放內部資料，例如 embedding 快取（`__torii:embed:<sha256>`）。掃描類操作會跳過它們，避免混入應用程式結果。點查詢如 `GET __torii:...` 刻意允許，方便除錯。

## 相關頁面

- [值型別](/zh/core-concepts-value-types)
- [過期](/zh/core-concepts-expiration)
- [錯誤](/zh/core-concepts-errors)
