前端数据库 IndexedDB 详解:构建强大的离线Web应用

前端数据库 IndexedDB 详解:构建强大的离线Web应用

引言:为什么需要前端数据库?

在现代Web开发中,我们经常需要处理大量结构化数据。传统的localStoragesessionStorage虽然简单易用,但只能存储少量字符串数据,无法满足复杂应用的需求。IndexedDB应运而生——这是一个功能强大的浏览器内置数据库,支持存储大量结构化数据,提供索引、事务等高级功能,是实现离线应用、缓存机制和复杂数据处理的理想选择。

IndexedDB核心概念解析

1. 数据库(Database)

  • 每个源(协议+域名+端口)可以创建多个数据库
  • 每个数据库包含多个对象存储(类似于SQL中的表)

2. 对象存储(Object Store)

  • 存储键值对集合的主要容器
  • 键可以是路径、自增数字或自定义键生成器
  • 值可以是任何结构化可克隆对象

3. 索引(Index)

  • 允许高效查询对象存储中的数据
  • 可以基于对象属性创建多个索引
  • 支持唯一索引约束

4. 事务(Transaction)

  • 所有操作都在事务中执行
  • 三种模式:只读(readonly)、读写(readwrite)和版本变更(versionchange)
  • 提供原子性保证(全部成功或全部失败)

5. 游标(Cursor)

  • 用于遍历对象存储或索引中的记录
  • 支持方向控制(前进/后退)和范围查询

完整代码示例:实现一个联系人管理器

1. 初始化数据库

// 打开或创建数据库const dbName ='ContactDB';const dbVersion =1;const request = indexedDB.open(dbName, dbVersion); request.onerror=(event)=>{  console.error('数据库打开失败:', event.target.error);}; request.onupgradeneeded=(event)=>{ const db = event.target.result;// 创建对象存储(如果不存在)if(!db.objectStoreNames.contains('contacts')){ const store = db.createObjectStore('contacts',{  keyPath:'id', autoIncrement:true});// 创建索引 store.createIndex('name','name',{  unique:false}); store.createIndex('email','email',{  unique:true}); store.createIndex('phone','phone',{  unique:false}); store.createIndex('group','group',{  unique:false});}}; request.onsuccess=(event)=>{ const db = event.target.result; console.log('数据库成功打开');// 存储数据库引用供后续使用 window.contactDB = db;};

2. 添加联系人

functionaddContact(contact){ returnnew

Read more

【java】Set接口详解

【java】Set接口详解

Java 中 Set 接口详解:特性、用法与常见坑点 一、什么是 Set? Set 是 Java 集合框架中的一个接口,它继承自 Collection,用于存储不重复的元素。 一句话概括 Set: Set 是一个 不允许重复元素、通常不关心顺序 的集合。 Set 的核心特性(面试高频) 1. 元素唯一性 * 不允许存储重复元素 * “重复”的判断依赖于 equals()(以及某些实现中的 hashCode()) 2. 最多只存在一个 null * 接口层面允许 null * 是否支持、支持几个,由具体实现决定(这里只记结论即可) 3. 无索引、不可通过下标访问 * 没有 get(int index)

By Ne0inhk
【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理

【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理

目录 一、为什么需要 Disruptor?—— 背景与问题 二、核心设计思想 三、核心组件与原理 1. 环形缓冲区(Ring Buffer) 2. 序列(Sequence) 3. 序列屏障(Sequence Barrier) 4. 等待策略(Wait Strategy) 5. 事件处理器(EventProcessor) 6. 生产者(Producer) 四、工作流程示例(单生产者 -> 单消费者) 五、多消费者与依赖关系 六、总结:Disruptor 高性能的秘诀 一、为什么需要 Disruptor?—— 背景与问题 在高并发编程中,传统的队列(如 java.

By Ne0inhk
Java 大视界 -- 实战|Java + Elasticsearch 电商搜索系统:分词优化与千万级 QPS 性能调优(439)

Java 大视界 -- 实战|Java + Elasticsearch 电商搜索系统:分词优化与千万级 QPS 性能调优(439)

Java 大视界 -- 实战|Java + Elasticsearch 电商搜索系统:分词优化与千万级 QPS 性能调优(439) * 引言: * 正文: * 一、 项目概述与技术选型 * 1.1 项目核心价值 * 1.2 核心技术选型(基于官方稳定版本,无兼容性风险) * 1.2.1 技术栈明细(附官方出处) * 1.2.2 选型核心原则(实战验证,规避坑点) * 1.3 系统核心架构 * 1.3.1 架构分层说明 * 二、 核心实体设计与环境准备 * 2.1 核心实体设计(贴合母婴业务,字段精准选型) * 2.1.

By Ne0inhk

Trae java项目配置全局maven和jdk

** Trae java项目配置全局maven和jdk ** 依次打开:设置-开发环境-Maven-for-Java(或全局搜索Maven-for-Java配置) 找到以下设置,点击在settings.json中编辑 在出现的配置文件中,填入以下配置: {"maven.excludedFolders":["**/.*","**/node_modules","**/target","**/bin","**/archetype-resources"],"maven.settingsFile":"你本地文件地址,例如:E:\\****\\apache-maven-3.8.4\\conf\\settings.xml","workbench.colorTheme":"Default

By Ne0inhk