localforage的数据仓库、实例、storeName和name的概念和区别
在 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
,可实现数据的模块化存储,避免命名冲突。