IndexedDB 트랜잭션에서 범위 정의

IndexedDB란 무엇인가요?

IndexedDB는 브라우저에 상당한 양의 구조화된 데이터를 저장하고 색인을 사용하여 이러한 데이터에 대한 고성능 검색을 수행하기 위해 진화하는 웹 표준입니다. 즉, IndexedDB는 객체 저장소입니다. 컬렉션 행과 열이 있는 테이블이 있는 관계형 데이터베이스와는 다릅니다. 이는 애플리케이션을 설계하고 빌드하는 방식에 영향을 미치는 중요하고 근본적인 차이점입니다 (자세한 내용은 기본 개념 참조).

새로운 기능

친구를 변경합니다. 간단한 문법 변경으로 처리하지 않으면 몇 가지 변경 사항이 발생합니다.

이제 버전 17부터 IndexedDB 트랜잭션의 범위가 객체 저장소로 지정되지 않으면 Chrome에서 오류가 발생합니다. 데이터의 모든 읽기와 쓰기는 트랜잭션 내에서 수행되므로 데이터베이스에 트랜잭션을 만들고 범위 (예: 액세스하려는 객체 저장소)를 지정하고 액세스 종류 (읽기 전용 또는 쓰기)를 결정해야 합니다.

코드에서의 의미 Database.transaction에 빈 배열을 전달하는 대신 다음과 같이 해 보세요.

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

범위를 특정 객체 저장소 또는 객체 저장소 목록으로 지정해야 합니다.

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

트랜잭션에서 올바른 범위와 모드를 사용하여 데이터 액세스 속도를 높일 수 있습니다. 다음은 몇 가지 팁입니다. 범위를 정의할 때는 필요한 객체 저장소만 지정하세요. 이렇게 하면 범위가 겹치지 않는 여러 트랜잭션을 동시에 실행할 수 있습니다. 필요한 경우에만 READ_WRITE 트랜잭션 모드를 지정합니다. 범위가 겹치는 여러 READ_ONLY 트랜잭션을 동시에 실행할 수 있지만, 객체 저장소에는 하나의 READ_WRITE 트랜잭션만 있을 수 있습니다.

기타 출처:

그럼 다음번엔 가까운 곳까지 웹을 계속 이용해야 해요.