---
# System prepended metadata

title: 回應關於 airaRetail 目前的設計
tags: [airaRetail]

---

---
tags: airaRetail
---

### 為什麼要用 QDrant ？
向量資料庫有獨有的資料結構及演算法幫助我們在譬如搜尋鄰近相似向量時能夠更快的找到我們想要找的向量。

就很像建索引，如果沒有索引，在最慘情況下我們就只能幾乎遍訪完資料(假設 10 萬筆資料，我們要的資料在 99,999，那我們就得走這麼多次)，才能找到我們要的東西。相反的，如果有建好索引，我們可以按照索引只要跑可能最多幾百筆資料，就能找到我們要的東西。

而傳統資料庫（譬如 Mongo）沒有專為要作向量運算 (計算 cosine similarity) 的資料儲存的結構或是演算法。

具體來說，假設有 40 萬個向量要找最鄰近的 10 個，
QDrant 讓我們可以不用做完 40 萬次點積運算就能找到的結果。

### 列出 NES 這項預計要修改的方向有哪些？
#### 1. 拆分並精簡儲存的向量數
原本是只有一個 collection，儲存每個人每天辨識到的向量（每人每天會有多筆向量）。

現在拆成兩個 collections，`faces_{日期}` 每人每天只存一筆向量（這是為了避免偏差越滾越大）。

另外，NES 改成從系統開始運作到目前為止，每人只存一筆向量。

#### 2. 前後比較
##### 更改前
假設每天有 2000 人到訪，每人每天有 2000 個向量。
讓資料滾 90 天，原本計算 NES 要走的資料筆數：
2000 x 2000 x 1 + 2000 x 2000 x 30 + 2000 x 2000 x 60 + 2000 x 2000 x 90 = 724000000

#### 更改後
按新的計算方式：
2000 (假設已存在在 `faces_{日期}`)
2000 + 2000 = 4000