IndexedDB에는 다음과 같은 주요 기능이 있습니다.
1. 대용량 데이터 저장: IndexedDB는 오프라인 애플리케이션을 위한 로컬 캐시 저장, 온라인 애플리케이션을 위한 대용량 데이터 저장 등 많은 양의 데이터를 저장할 수 있습니다.
2. 구조화된 데이터: IndexedDB는 객체 저장소를 사용하여 데이터를 저장합니다. 각 객체에는 고유하게 식별하는 키가 있습니다. 개발자는 필요에 따라 다양한 저장 공간을 생성하고 각 저장 공간에 객체의 구조를 정의할 수 있습니다.
3. 쿼리 및 작업: 개발자는 IndexedDB를 사용하여 데이터 추가, 업데이트, 삭제 및 검색을 포함한 다양한 쿼리 및 작업을 수행할 수 있습니다. 인덱스를 사용하면 쿼리 효율성을 향상시켜 특정 데이터에 더 빠르게 액세스하고 검색할 수 있습니다.
4. 트랜잭션 지원: IndexedDB는 트랜잭션 메커니즘을 지원합니다. 이는 일련의 작업에서 데이터 일관성이 유지될 수 있음을 의미합니다. 데이터 무결성과 일관성을 보장하려면 트랜잭션의 작업 집합을 성공적으로 커밋하거나 롤백해야 합니다.
코드 예시
다음은 IndexedDB를 사용하는 간단한 샘플 코드로, 저장 공간 생성, 데이터 추가, 데이터 쿼리 방법을 보여줍니다.
// 打开或创建 IndexedDB 数据库
var request = indexedDB.open("myDatabase", 1);
request.onerror = function(event) {
console.log("打开数据库错误");
};
request.onupgradeneeded = function(event) {
var db = event.target.result;
// 创建一个名为 "customers" 的存储空间,并定义一个键路径
var objectStore = db.createObjectStore("customers", { keyPath: "id" });
// 在存储空间中创建一个索引
objectStore.createIndex("name", "name", { unique: false });
// 数据填充
objectStore.add({ id: 1, name: "Alice", email: "[email protected]" });
objectStore.add({ id: 2, name: "Bob", email: "[email protected]" });
};
request.onsuccess = function(event) {
var db = event.target.result;
// 开始一个只读事务
var transaction = db.transaction(["customers"], "readonly");
// 获取存储空间对象
var objectStore = transaction.objectStore("customers");
// 使用索引查询数据
var index = objectStore.index("name");
var request = index.get("Alice");
request.onsuccess = function(event) {
var customer = event.target.result;
console.log(customer);
};
transaction.oncomplete = function(event) {
db.close();
};
};
이 샘플 코드는 "myDatabase"라는 IndexedDB 데이터베이스를 열거나 생성하는 방법을 보여줍니다. "onupgradeneeded" 이벤트 핸들러에서 "customers"라는 저장소를 만들고 여기에 일부 데이터를 추가합니다. 그런 다음 "onsuccess" 이벤트 핸들러에서 읽기 전용 트랜잭션을 수행하고 인덱스를 사용하여 "Alice"라는 고객 데이터를 쿼리하고 결과를 콘솔에 인쇄합니다. 마지막으로 트랜잭션의 "oncomplete" 이벤트 핸들러에서 데이터베이스 연결을 닫습니다.