23 条回复  ·  273 次点击
body007 初学 2024-9-3 11:52:01
考虑 https://github.com/rqlite/rqlite 么?
wxf666 小成 2024-9-3 12:04:09
SQLite 不适合分布式写入。

要有高的写并发,就得利用 WAL ,尽可能缓冲多点事务,再落盘写入。

而官方说,WAL 模式要求所有进程在同一主机上,不能在网络文件系统上工作:

> All processes using a database must be on the same host computer; WAL does not work ofer a network filesystem. This is because WAL requires all processes to share a small amount of memory and processes on separate host machines obviously cannot share memory with each other.


@wwd179 #12

单机上使用的话,利用好 WAL ,加上外部互斥锁(或者一个进程专门处理写请求),可以实现很高的并发。

这两天我测试过,在电视盒子上(单核 Nginx 默认页压测 1W QPS ,性能不及 6 年前骁龙 636 千元机一半),

Python 的 FastAPI + SQLite + 去年本站被爬的千万数据:

- 200 模拟发帖回帖 + 全文索引 / 秒
- 1100 获取整帖(包括回帖者信息) / 秒
Mithril 小成 2024-9-3 12:11:01
SQLite 的锁是基于文件系统的,所以官方也不建议你把数据库文件扔 NFS 里,主要是有些 NFS 文件系统实现的时候锁的机制做的不好,多线程或多进程访问的时候有可能损坏你的数据库文件。

但有些文件系统的实现是明确说过支持全部的锁机制,没记错的话 AWS 的 EBS 就可以。这种情况下你把 SQLite 文件放上去共享也没问题。
xuanbg 小成 2024-9-3 12:11:34
生产用 nas 做数据备份还是把服务部署在 nas 上?
Mystery0 小成 2024-9-3 12:16:25
sqlite 不太清楚,h2 这种数据库的 db 文件丢 nas 里面连不了,真实项目踩过坑的,不过我估计 sqlite 应该也差不多
Rorysky 小成 2024-9-3 12:21:36
@ConfusedBiscuit sqlite 只支持一写多读,写的时候直接锁表
vx7298 小成 2024-9-3 12:22:13
国产的 go 要求不?😂
glcolof 小成 2024-9-3 14:43:08
既然前提是“数据库访问量不大”,可以单独开发一个后端程序,由它来读写 SQLite ,其它程序必须通过这个后端程序的接口来存取数据,就像网站前后端开发一样。
mayli 小成 2024-9-3 14:47:36
sqlite + litefs 试试
123
返回顶部