引入
最近有需求做一个在B端的长期数据储存方案,主要是需要将大量数据结构化储存,避免每一次启动都去服务端重复拉取数据
第一个想到的前端持久化数据存储方案理所当然想到localstorage,但是它有一个最大5M的空间限制,这大小远远不够,因此我们将视线转移到前端数据库,半年前我接的有看到过sqlite.js这样的东西,于是我们很快找到了它
sql.js
从官网示例关键代码来看
const initSqlJs = require('sql.js');
// or if you are in a browser:
// const initSqlJs = window.initSqlJs;
const SQL = await initSqlJs({
// Required to load the wasm binary asynchronously. Of course, you can host it wherever you want
// You can omit locateFile completely when running in node
locateFile: file => `https://sql.js.org/dist/${file}`
});
// Create a database
const db = new SQL.Database();
// NOTE: You can also use new SQL.Database(data) where
// data is an Uint8Array representing an SQLite database file
似乎第12行非常重要,它也表明了 data is an Unit8Array,那么意味着它并不能完成数据长期化储存,它的任务是当一个引擎,在内存中操作SQL,那么我们再去思考,有没有什么东西可以储存这个data呢?
顺水摸鱼就摸到了IndexedDB,这好像也是一个前两年很火的东西,一样的我们去MDN看看
IndexedDB - Web API 接口参考 | MDN (mozilla.org) https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API
看官网介绍:IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而 IndexedDB 提供了这种场景的解决方案。本页面 MDN IndexedDB 的主要引导页 - 这里,我们提供了完整的 API 参考和使用指南,浏览器支持细节,以及关键概念的一些解释的链接。
好家伙,似乎IndexedDB直接就从底层支持了索引,可以处理复杂结构化数据,那么我们仔细看看接口
IndexDB
先看概念
概念
IndexedDB 是一个事务型数据库系统,类似于基于 SQL 的 RDBMS。然而,不像 RDBMS 使用固定列表,IndexedDB 是一个基于 JavaScript 的面向对象数据库。IndexedDB 允许你存储和检索用键索引的对象;可以存储结构化克隆算法支持的任何对象。你只需要指定数据库模式,打开与数据库的连接,然后检索和更新一系列事务。
说人话:类似于MongoDB那样的文档类型数据库,但是支持事务
同步
IndexedBD是完全异步的,同步的API已经被移除,但是如果开发者有需求并且需求够多(
标签:存储,const,探索,前端,db,key,put,数据库,store From: https://www.cnblogs.com/yeuoly/p/17777982.html