随着 Blocklet 数量的日益增多,我们面临的数据量持续扩大。原先使用 Nedb 数据库的潜在问题也日益凸显,尤其是在运行内存占用和数据安全方面。近期,由于 Nedb 数据丢失问题,导致线上 Blocklet 数据(Test Store)丢失,为此我们不得不加快数据库的切换进程。目前,我们已将 Blocklet Store 的默认数据库从 Nedb 迁移至 SQLite,新的数据库架构现已上线,欢迎大家体验!
为什么是SQLite#
运行内存的减少#
Nedb 通过将所有数据加载到内存中以实现查询功能,但随着数据量的增加,这种方式极大地消耗了运行内存,可能导致性能问题甚至服务崩溃。
迁移到 SQLite 后,数据库通过索引优化磁盘读取效率,无需占用大量内存,从而显著减少了服务器的运行内存使用。实际运行数据显示,迁移后内存占用明显下降,性能更加稳定。
数据丢失风险#
近期,由于异常引起的服务奔溃,导致 Test Store 一段时间内的数据丢失,致使用户 Blocklet 无法访问。我们发现是由于 Nedb 的数据持久化是异步完成的,在服务崩溃时可能导致数据未及时写入磁盘,造成数据丢失。
迁移到 SQLite 后,数据库采用事务机制和 WAL (Write-Ahead Logging) 模式,确保数据一致性和安全性。即使系统异常或崩溃,未完成的事务也不会影响数据库文件的完整性,极大降低了数据丢失的风险。
其他优势#
- 更强的查询能力 SQLite 支持标准 SQL 查询,包括复杂的多表连接(JOIN)、子查询和窗口函数,能够适应更多复杂的场景。在应用扩展中,可以轻松使用标准 SQL 来构建更加灵活的功能。
- 更好的可扩展性 SQLite 能够很好地处理中小型数据集,即使数据量达到数十 GB,仍然可以高效运行。
- 丰富的工具和生态支持 SQLite 拥有广泛的工具支持(如 DB Browser for SQLite)和活跃的社区生态,便于调试和管理。在 Node.js 中,在批量插入和高并发场景中表现出色。
注意#
此次变更是需要迁移数据的,如果您使用了我们的 Blocklet Store,升级时我们已经设置了自动迁移脚本,会自动将 Nedb 迁移到 SQLite,同时我们也会自动帮您检查是否有数据丢失并尝试帮您恢复。恢复失败,您可以通过 /api/console/blocklets/meilisearch_sync_failed
接口查看恢复失败 Blocklet,启动 Blocklet Store 后可以查看这些数据是否丢失。遇到任何问题或需要帮助,请随时与我们联系,我们将竭诚为您服务。
备注:丢失数据已通过技术手段恢复。
我们一起改进:#
- fatych CrypThor
- CrypThor
- copy install url 的 demo 图片宽高比变形 Zhu Liang
- should render blocklet with correct host Shijun Wang
- limit changelog display to recent entries if too long Shijun Wang
帮助我们改进#
我们期待着您在新版本的 Blocklet Store 中享受更好的用户体验!
最后,感谢每位用户的关注和支持,将持续改进以更好地满足您的需求。如果您在使用过程中有任何需求、建议或问题,请前往社区进行反馈。我们将尽最大努力提供帮助。