当前位置: 首页 > news >正文

浏览器内置NoSQL数据库IndexedDB

IndexedDB - 浏览器内容数据库

indexedDB 是一种浏览器内置的NoSQL数据库,它使用键值对存储数据,用于在客户端存储大量结构化数据。它支持离线应用程序和高效的数据检索,可以在 Web 应用程序中替代传统的 cookie 和 localStorage。
IndexDB是一种在浏览器中内置的NoSQL数据库,用于在客户端存储和检索数据。它提供了一种持久存储数据的方式,可以在离线状态下使用。

使用 indexedDB 需要以下步骤:

  1. 打开数据库:使用 indexedDB.open() 方法打开一个数据库,如果数据库不存在,则会创建一个新的数据库。

  2. 创建对象存储空间:使用 createObjectStore() 方法创建一个对象存储空间,用于存储数据。可以为每个对象存储空间设置一个名称和一个键路径,键路径用于指定对象存储空间中的每个对象的唯一标识符。

  3. 存储数据:使用 add() 或 put() 方法将数据存储到对象存储空间中。add() 方法用于向对象存储空间中添加新的数据,如果该数据已经存在,则会抛出错误。put() 方法用于向对象存储空间中添加或更新数据。

  4. 检索数据:使用 get() 或 getAll() 方法从对象存储空间中检索数据。get() 方法用于检索指定键路径的数据,getAll() 方法用于检索对象存储空间中的所有数据。

  5. 删除数据:使用 delete() 方法从对象存储空间中删除指定键路径的数据。

  6. 关闭数据库:使用 close() 方法关闭数据库连接。

需要注意的是,indexedDB 使用异步 API,需要使用回调函数或 Promise 处理返回结果。此外,indexedDB 只能在支持该 API 的浏览器中使用,需要检查浏览器是否支持 indexedDB API。

indexedDB 和 localStorage 的区别

indexedDB 和 localStorage 都是浏览器提供的客户端存储方案,它们之间的区别主要有以下几点:

  1. 数据存储方式:localStorage 存储的是字符串类型的数据,而 indexedDB 存储的是结构化数据。indexedDB 支持存储复杂的数据类型,例如对象、数组等,而 localStorage 只能存储字符串类型的数据。

  2. 存储容量:localStorage 的存储容量通常为 5MB 左右,而 indexedDB 的存储容量通常为几百 MB 或几 GB。indexedDB 可以存储大量的数据,适用于需要存储大量结构化数据的应用程序。

  3. 数据检索方式:indexedDB 支持基于索引的高效数据检索,可以通过索引快速查询数据。而 localStorage 只能遍历整个数据集合进行数据检索,效率较低。

  4. 事务支持:indexedDB 支持事务操作,可以确保数据的一致性和完整性。而 localStorage 不支持事务操作,无法保证数据的一致性和完整性。

  5. 浏览器支持:indexedDB API 在较新版本的浏览器中得到支持,而 localStorage API 在大多数浏览器中都得到支持。

综上所述,indexedDB 更适合存储大量结构化数据,并且支持高效的数据检索和事务操作;而 localStorage 更适合存储少量简单的字符串类型数据。

demo演示:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>IndexedDB</title></head><body>IndexedDB</body><script>const db = indexedDB.open('myDatabase', 1);let connection;db.onerror = function (e) {console.log('打开数据库失败');};db.onsuccess = function (e) {console.log('打开数据库成功')connection = e.target.result;// connection.close();};// 当数据库version变化的时候会触发这个回调,那么数据库从无到有也必然会发生版本变化,所以数据库初始化的时候必然会触发一次这个函数db.onupgradeneeded = function (e) {connection = e.target.result;connection.createObjectStore('myObjectStore', { keyPath: 'id' });};setTimeout(() => {const transaction = connection.transaction('myObjectStore', 'readwrite');const store = transaction.objectStore('myObjectStore');// 新增// const add = store.add({//     id: 1,//     name: 'pcm'// });// add.onsuccess = () => {//     console.log('add success');// };// // 更新// const update = store.put({//     id: 1,//     name: 'pcs'// });// update.onsuccess = () => {//     console.log('update success');// };// 查询// const read = store.get(1);// read.onsuccess = () => {//     console.log('read success', read);// };// 删除const remove = store.delete(1);remove.onsuccess = () => {console.log('remove');};}, 1000);</script>
</html>

keyPath是IndexDB中用于定义对象存储空间中每个对象的唯一键的属性。这个键可以是任何一个对象中的属性,例如ID、名称或日期等。在创建对象存储空间时,可以通过指定keyPath属性来定义唯一键。这样,在添加、更新或删除数据时,可以使用这个唯一键来引用和操作对象。


补充:
不是所有数据库操作都必须通过事务来进行。事务(Transaction)是数据库管理系统(DBMS)中的一个重要概念,用于确保数据库操作的一致性和完整性。事务是一系列数据库操作的单个逻辑工作单元,要么全部执行成功,要么全部回滚(撤销),以保持数据库在任何时间点都处于一致状态。

虽然事务提供了一种确保数据完整性的机制,但并不是所有的数据库操作都需要使用事务。以下是一些情况:

  1. 简单查询: 对于只涉及到读取而不涉及写入的简单查询,通常不需要使用事务。例如,SELECT语句可以独立执行,而不需要事务的保障。

  2. 单一操作: 当某个数据库操作是独立的、不依赖其他操作的时候,也可以不使用事务。例如,插入一条新纪录,如果这个操作不依赖于其他操作的结果,可能可以不使用事务。

  3. 不需要一致性保障: 在某些特定的情况下,如果不需要对数据库的一致性进行强制保障,那么可以选择不使用事务。这通常发生在对实时性要求较高、而一致性要求相对较低的应用中。

然而,在涉及到多个数据库操作、需要一致性保障、需要保证原子性、一致性、隔离性和持久性(ACID属性)的情况下,事务就显得尤为重要。在复杂的业务逻辑中,使用事务能够确保数据库的数据始终保持在一致的状态。

参考链接:https://www.yuque.com/qingfengaibiancheng/arvmg8/ga6ceg

参考链接2:https://www.bilibili.com/video/BV11V4y1Z7uJ/?spm_id_from=333.337.search-card.all.click&vd_source=4c263677a216945c0d21ca65ee15a5f9

相关文章:

浏览器内置NoSQL数据库IndexedDB

IndexedDB - 浏览器内容数据库 indexedDB 是一种浏览器内置的NoSQL数据库&#xff0c;它使用键值对存储数据&#xff0c;用于在客户端存储大量结构化数据。它支持离线应用程序和高效的数据检索&#xff0c;可以在 Web 应用程序中替代传统的 cookie 和 localStorage。 IndexDB是…...

网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍

应用层 应用层为应用软件提供接口&#xff0c;使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议&#xff0c;以及传输层所使用的端口等。TCP/IP每一层都让数据得以通过网络进行传输&#xff0c;这些层之间使用PDU ( Paket Data Unit,协议数据单元)彼此交换信…...

万宾科技智能井盖传感器,预防城市道路安全

随着城市交通的不断发展和城市化进程的加速推进&#xff0c;城市道路安全问题日益凸显。市政井盖作为城市道路的一部分&#xff0c;承担着重要的交通安全保障职责。然而传统的市政井盖管理方式存在许多不足。针对这些问题政府需要采取适当的措施&#xff0c;补足传统管理方式的…...

GCC/Make/CMake 工具链

阅读前可以思考的问题&#xff1a;&#xff08;答案在文章的最后面,小白可以略过&#xff09; GCC/Make/CMake是什么关系&#xff1f; 一个C程序编译为一个可执行文件&#xff0c;需要哪些过程&#xff1f; #include语句所引入的库&#xff0c;如何才能找到对应的完整源代码文…...

GO抽象工厂模式

既然工厂模式每个产品都需要实现对应的工厂类去生成相关实例&#xff0c;提取产品的共性&#xff0c;提高代码的内聚性&#xff0c; 就是抽象工厂模式要干的。在抽象工厂中&#xff0c;依然是不同产品对应不同的工厂类&#xff0c;但可以尽可能将具有相同共性的产品类别合在一起…...

Linux 磁盘/分区/修复 命令

目录 1. lsblk&#xff08;list block devices&#xff09; 2. fdisk&#xff08;fragment disk&#xff09; 3. gdisk 4. mkfs&#xff08;make filesystem&#xff09; 5. df&#xff08;display file-system disk space usage&#xff09; 6. du 7. fsck&#xff08;file-sy…...

php一句话木马免杀

php一句话木马免杀 针对于php一句话木马做免杀&#xff1a; 利用php动态函数的特性&#xff0c;将危险函数拆分成字符&#xff0c;最终使用字符串拼接的方式&#xff0c;然后重新拼接&#xff0c;后加括号执行代码&#xff0c;并且可以使用花指令进行包装&#xff0c;如无限i…...

深度学习人体跌倒检测 -yolo 机器视觉 opencv python 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…...

轻松整理文件夹,将视频文件全部归类到另一个文件夹!

如果你需要整理文件夹中的文件&#xff0c;将同一类别的文件归纳到一起&#xff0c;可以更加方便地管理和查找。现在&#xff0c;我们有一个简单而实用的方法&#xff0c;可以将文件夹中的所有视频文件归类到另一个文件夹中&#xff0c;让你的文件管理更加有序和高效。 首先&am…...

存储服务器特征是什么

存储服务器和普通服务器是有差别的&#xff0c;配置方式不同&#xff0c;因为存储服务器是为特定目标设计的&#xff0c;通常存储服务器是独立的单元&#xff0c;大多数时候是被设计成4U机架式&#xff0c;存储服务器一般是单机运作的&#xff0c;不与其他服务器连接。今天小编…...

Conditional GAN

Text-to-Image 对于根据文字生成图像的问题&#xff0c;传统的做法就是训练一个NN&#xff0c;然后输入一段文字&#xff0c;输出对应一个图片&#xff0c;输出图片与目标图片越接近越好。存在的问题就是&#xff0c;比如火车对应的图片有很多张&#xff0c;如果用传统的NN来训…...

OOM问题排查+Jvm优化

OOM问题排查&#xff1a; 1、top命令&#xff1a;查看cpu和内存的使用情况。 2、jstat命令&#xff1a;查看YGC和FGC情况&#xff0c;一般都是老年代不够用。导致OOM 3、jmap命令&#xff1a; 查看哪个类的实例过多,以每个类占用多少了内存。4、jstack 查看线程与线程之间的阻…...

链表:C++实现

引言&#xff1a; 链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。相比于数组&#xff0c;链表具有动态性和灵活性&#xff0c;可以高效地进行插入和删除操作&#xff0c;但是查找操作的时间复杂度较…...

使用JMX监控ZooKeeper和Kafka

JVM 默认会通过 JMX 的方式暴露基础指标,很多中间件也会通过 JMX 的方式暴露业务指标,比如 Kafka、Zookeeper、ActiveMQ、Cassandra、Spark、Tomcat、Flink 等等。掌握了 JMX 监控方式,就掌握了一批程序的监控方式。本节介绍 JMX-Exporter 的使用,利用 JMX-Exporter 把 JMX…...

蓝桥等考C++组别七级008

第一部分:选择题 1、C++ L7 (15分) 在判断是否满足循环条件之前,至少执行循环体语句一次的是哪种循环结构?( ) for循环while循环do-while循环以上都不是正确答案:C 2、C++ L7 (15分) 执行以下程序,会输出几个“*”?( ) for(int i = 0; i <= 10; i++){…...

sam和mobilesam导出预处理的onnx

一、前言 sam或者mobilesam的python推理都存在一些前处理,如下所示: sam.to(device=cuda) predictor = SamPredictor(sam) predictor.set_image(image) image_embedding = predictor.get_image_embedding().cpu().numpy() checkpoint = "./weights/mobile_sam.pt"…...

开源与闭源:大模型发展的双重走向

目录 前言开源和闭源的优劣势比较开源的优势闭源的优势 开源和闭源对大模型技术发展的影响对技术发展的影响对数据共享的影响对业务拓展的影响 开源与闭源的商业模式比较开源的商业模式闭源的商业模式 处在大模型洪流中&#xff0c;向何处去&#xff1f;结语 前言 随着人工智能…...

c# 逆变 / 协变

个人理解&#xff1a; 1. 逆变in向上兼容类 2. 协变out向下兼容类 在面向对象编程中&#xff0c;尤其是使用泛型时&#xff0c;in和out关键字用于限制类型参数的协变性和逆变性。 in关键字&#xff08;逆变&#xff09;&#xff1a; in关键字用于标记泛型类型参数的逆变性。…...

electron使用better-sqlite3打包失败(electron打包有进程没有界面)

remove *\chrome_100_percent.pak: Access is denied. 解决&#xff1a; 管理员权限执行&#xff1a;taskkill /IM 你的进程名.exe /F&#xff0c;再次执行build electron使用better-sqlite3打包后有进程没有界面 原因是代码及依赖包安装有误&#xff0c;模块丢失。主要分享的…...

2.6文件服务器

2.6文件服务器 一、Ftp 介绍 文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;&#xff0c;基于该协议FTP客户端与服务端可以实现共享文 件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接&#xff0c;主要用于控制FTP连接信息&#x…...

Hearthstone-Script完整指南:免费自动化你的炉石传说游戏体验

Hearthstone-Script完整指南&#xff1a;免费自动化你的炉石传说游戏体验 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script Hearthstone-Script是一款完全…...

UI-TARS桌面版:零代码AI自动化助手,用自然语言控制你的电脑

UI-TARS桌面版&#xff1a;零代码AI自动化助手&#xff0c;用自然语言控制你的电脑 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI…...

深入汽车电子安全:拆解NXP VR5510如何为S32G网关实现ASIL D功能安全

深度解析NXP VR5510&#xff1a;ASIL D级电源管理芯片在S32G网关中的安全架构设计 当S32G车载网关处理器需要处理来自自动驾驶域、智能座舱和传统ECU的海量数据时&#xff0c;其电源系统的可靠性直接关系到整车的功能安全。作为NXP专为ASIL D场景设计的PMIC&#xff0c;VR5510通…...

如何高效管理300+空洞骑士模组:跨平台模组管理器终极指南

如何高效管理300空洞骑士模组&#xff1a;跨平台模组管理器终极指南 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 你是否曾因《空洞骑士》模组管理而头疼&…...

老芯片新玩法:拆解一个古董VCD机,看看里面的CD4051是怎么工作的

老芯片新玩法&#xff1a;拆解古董VCD机探秘CD4051的硬核逻辑 周末在电子市场淘到一台90年代国产VCD播放器&#xff0c;拆开外壳时主板上一枚标着"CD4051BE"的黑色芯片引起了我的注意。这种上世纪70年代问世的模拟开关芯片&#xff0c;如今在二手市场单价不到2元&…...

MicroG在HarmonyOS系统上的兼容性挑战与解决方案

MicroG在HarmonyOS系统上的兼容性挑战与解决方案 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore MicroG作为一个开源的Google移动服务替代框架&#xff0c;为没有原生Google Play服务的Andr…...

在Ubuntu 20.04上从零部署BEVDet:一份给自动驾驶研究新手的保姆级避坑指南

在Ubuntu 20.04上从零部署BEVDet&#xff1a;一份给自动驾驶研究新手的保姆级避坑指南 自动驾驶领域近年来发展迅猛&#xff0c;其中鸟瞰图&#xff08;BEV&#xff09;感知技术因其独特的视角优势&#xff0c;成为环境感知任务中的热门研究方向。BEVDet作为这一领域的代表性算…...

从“解决”到“消解”:电车难题作为AI元人文的第一次工程实验

从“解决”到“消解”&#xff1a;电车难题作为AI元人文的第一次工程实验摘要传统自动驾驶伦理试图回答“算法应当如何选择”——本质上是旧主体结构内的规则修补。本文基于一篇题为《电车难题的一个原创解决方案》的博客&#xff0c;揭示其未被广泛识别的前提&#xff1a;该方…...

终极指南:如何用Fernflower让Java字节码“起死回生“

终极指南&#xff1a;如何用Fernflower让Java字节码"起死回生" 【免费下载链接】fernflower Decompiler from Java bytecode to Java, used in IntelliJ IDEA. 项目地址: https://gitcode.com/gh_mirrors/fe/fernflower 你是否曾经面对一堆编译后的Java字节码…...

VSCode 2026 + Trace32深度协同指南:实现AURIX TC4xx实时变量观测、CoreSight ETM流解析与UDS诊断会话一键触发(仅限首批内测License持有者公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026 车载开发适配教程 VSCode 2026 版本深度集成了 AUTOSAR Adaptive Platform&#xff08;ARA&#xff09;开发支持&#xff0c;专为符合 ISO 21434 和 ASPICE L2 标准的车载嵌入式系统设计。…...