# idb-playground **Repository Path**: ever-lose/idb-playground ## Basic Information - **Project Name**: idb-playground - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-02 - **Last Updated**: 2025-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目创建 vue create ## IDB 是否已经足够能成为一个生产环境使用的复杂数据库? 我是觉得仅适合那种不需要复杂的数据和查询的环境, 比如说简单的日志存储. 环境和生态的限制 1. SQLite 在 Electron , Android 等平台可移植性都更好, 它完全可以用, 而 IDB 就只能用于浏览器中. 而有 IDB 使用场景的基本是重型的办公应用如 Electron, 而不是浏览器. 2. IDB 有存储限制, 它必须存在 C 盘, 不能自由的更改写的地址, 总是有些人只给 C 盘留较少的空间. 3. IDB 缺少插件, 它没有类似 dump 备份, 也无法全文检索. 接着是使用层面的苦恼 1. IDB 特别的底层, 对于事务的处理编写代码时有情况没处理到位, 我曾经遇到过批量操作时读取到脏数据(报错 data too long), 而整个事务都挂了的情况, 而不是某一条 IDBRequest 操作失败, 这种 case 也没有特别好的解决办法. 2. IDB 是非关系性数据库, 存储的数据没有约束, 直接塞入一个对象, 维护一段时间后, 经常因为代码不加判定, 而让存储的数据的内容变得乱七八糟. 比方说我存一个消息对象, 他本该是拥有 10 个字段的, 但代码里临时对对象塞了一些判断用的属性, 塞入 db 了也不自觉, 最后导致可能拥有的字段有 20 个. ## 记录 indexedDB open 后不触发任何回调的 case 情况 1: 1. 打开一个 tab 一直维持数据库连接, 假设数据库版本当前为 1 2. 编译代码使得数据库版本升级到 2. 3. 打开另一个 tab 试图 open 版本为 2, 但是它收不到任何回调. 打开 chrome://indexeddb-internals/# 查看浏览器的连接有个在 pending 的. (如果两个都打开正常, 那只有 open: 2) ``` Origin: http://127.0.0.1:8917 Storage partition - top level site: http://127.0.0.1:80 Storage key: http://127.0.0.1:8917/ Bucket: '_default' Size: 3793 Last modified: Tue Dec 17 2024 10:22:15 GMT+0800 (中国标准时间) Open connections: 1 Paths: /Users/chenziyun/Library/Application Support/Google/Chrome/Default/IndexedDB/http_127.0.0.1_8917.indexeddb.leveldb /Users/chenziyun/Library/Application Support/Google/Chrome/Default/IndexedDB/http_127.0.0.1_8917.indexeddb.blob Force close Download Start Recording Open database: nim-accid Connection counts: open: 1 active opens/deletes: 1 pending opens/deletes: 2 ```