在 localForage 中,數據倉庫
、實例
、storeName
和 name
是核心概念,用于管理底層存儲(IndexedDB/WebSQL/localStorage)。以下是詳細解釋和區別:
1. 數據倉庫 (Database)
- 定義:指底層的物理數據庫(如 IndexedDB 數據庫)。
- 作用:實際存儲數據的容器,由瀏覽器管理。
- 特點:
- 一個域名下可創建多個數據庫(通過不同的
name
區分)。 - 每個數據庫可包含多個 Object Store(通過
storeName
區分)。
- 一個域名下可創建多個數據庫(通過不同的
- 示例:
myAppDB
是一個 IndexedDB 數據庫。
2. 實例 (Instance)
- 定義:localForage 創建的獨立配置對象,用于操作數據。
- 作用:封裝數據庫的配置和操作方法(如
getItem/setItem
)。 - 特點:
- 通過
createInstance()
創建多個獨立實例。 - 每個實例有獨立的配置(
name
、storeName
等)。 - 實例間數據隔離(除非使用相同的
name
和storeName
)。
- 通過
- 示例:
const userStorage = localforage.createInstance({name: "myAppDB",storeName: "users" });
3. name
(數據庫名稱)
- 定義:數據庫的唯一標識。
- 作用:指定操作哪個底層數據庫。
- 規則:
- 相同
name
的實例共享同一個數據庫。 - 不同
name
的實例訪問完全獨立的數據庫。
- 相同
- 示例:
// 操作數據庫 "myAppDB" localforage.config({ name: "myAppDB" });
4. storeName
(存儲倉庫名稱)
- 定義:數據庫中的 Object Store(類似數據庫表)。
- 作用:在同一個數據庫中隔離不同數據集。
- 規則:
- 相同數據庫(
name
)下,不同storeName
的數據互不干擾。 - 在 IndexedDB 中表現為不同的 Object Store。
- 相同數據庫(
- 示例:
// 在數據庫 "myAppDB" 中創建兩個獨立倉庫 const config = { name: "myAppDB" }; const userStore = localforage.createInstance({ ...config, storeName: "users" }); const productStore = localforage.createInstance({ ...config, storeName: "products" });
概念關系圖
┌───────────────────────┐
│ 數據庫 (Database) │
│ name: "myAppDB" │
├───────────────────────┤
│ storeName: "users" │ → userStorage 實例操作的數據
├───────────────────────┤
│ storeName: "products" → productStore 實例操作的數據
└───────────────────────┘
關鍵區別總結
概念 | 作用 | 類比 |
---|---|---|
數據倉庫 | 物理存儲容器(IndexedDB 等) | 銀行的金庫 |
實例 | 操作數據庫的配置對象 | 銀行的不同業務柜臺 |
name | 數據庫的唯一標識 | 金庫的名稱(如“總行”) |
storeName | 數據庫中的子存儲空間(Object Store) | 金庫中的保險箱編號 |
使用場景示例
// 場景:隔離用戶數據和系統配置
const userStorage = localforage.createInstance({name: "appData",storeName: "user" // 存儲用戶數據
});const configStorage = localforage.createInstance({name: "appData",storeName: "config" // 存儲配置
});// 互不影響
userStorage.setItem("name", "Alice");
configStorage.setItem("theme", "dark");
通過合理配置 name
和 storeName
,可實現數據的模塊化存儲,避免命名沖突。
參考文檔
- MDN: IndexedDB
- oschina: localforage使用指南