概述在时间序列与分区键场景下,范围+窗口分页能提高效率。本文提供端到端示例。范围与窗口分页function openDB(name) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onupgradeneeded = () => { const db = r.result; const s = db.createObjectStore('items', { keyPath:'id' }); s.createIndex('byTsType',['ts','type']); }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function pageByWindow(type, startTs, endTs, limit = 50, cursorAfter) { const db = await openDB('win'); const idx = db.transaction('items','readonly').objectStore('items').index('byTsType'); const range = IDBKeyRange.bound([startTs,type], [endTs,type]); const req = idx.openCursor(range, 'next'); const out = []; let skipped = 0; await new Promise((res, rej) => { req.onsuccess = e => { const c = e.target.result; if (c) { if (cursorAfter && skipped < cursorAfter) { skipped++; c.continue(); } else if (out.length < limit) { out.push(c.value); c.continue(); } else res(); } else res(); }; req.onerror = () => rej(req.error); }); db.close(); return out; }

发表评论 取消回复