有没有人在生产用过 sqlite+nas 分布式存储的?

16 天前
 chen0520

数据库访问量不算大,甲方要求如果用数据库只能用特定的国产数据库,我网上搜了一下几乎没啥介绍,所以就想能不能直接不通过实体的数据库,目前我能想到的方案就这个,我主要担心瞬时的的简单并发会不会有问题,有人有相关经验吗

2583 次点击
所在节点    Go 编程语言
32 条回复
wxf666
16 天前
SQLite 不适合分布式写入。

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

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

> All processes using a database must be on the same host computer; WAL does not work over 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
16 天前
SQLite 的锁是基于文件系统的,所以官方也不建议你把数据库文件扔 NFS 里,主要是有些 NFS 文件系统实现的时候锁的机制做的不好,多线程或多进程访问的时候有可能损坏你的数据库文件。

但有些文件系统的实现是明确说过支持全部的锁机制,没记错的话 AWS 的 EBS 就可以。这种情况下你把 SQLite 文件放上去共享也没问题。
xuanbg
16 天前
生产用 nas 做数据备份还是把服务部署在 nas 上?
Mystery0
16 天前
sqlite 不太清楚,h2 这种数据库的 db 文件丢 nas 里面连不了,真实项目踩过坑的,不过我估计 sqlite 应该也差不多
Rorysky
16 天前
@ConfusedBiscuit sqlite 只支持一写多读,写的时候直接锁表
vx7298
16 天前
国产的 go 要求不?😂
glcolof
16 天前
既然前提是“数据库访问量不大”,可以单独开发一个后端程序,由它来读写 SQLite ,其它程序必须通过这个后端程序的接口来存取数据,就像网站前后端开发一样。
mayli
16 天前
sqlite + litefs 试试
chen0520
16 天前
@body007 这个包不知道能不能集成到实际项目中,而不是单独的实体,单独的实体都要审查的
xsen
16 天前
实现个数据库服务做 sqlite 缓存,写排队,读则缓存——未击中再访问数据库
表设计要合理,尽量不要跨表写
cadmuxe
15 天前
像上面说的 sqlite 的锁是文件系统实现的。nfs 不支持这个。
我家里的 nas 和 container host 不是一个机器,nfs 挂的文件。Plex 因为这个不能正常工作。
thinkingbullet
15 天前
https://github.com/rqlite/rqlite 基于 sqlite 的分布式关系数据库,支持 window,Linux,macOS

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1069791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX