[连载] 用文件系统做数据库 之一 设计文档

222 天前
 xieyuheng
我想用文件系统做数据库。

专门为个人开发者和小型团队而设计。

设计文档:

https://readonly.link/manuals/https://code-of-fidb.fidb.app/docs/manual/zh.json

目前我的实现并不完整。

欢迎指教。
2143 次点击
所在节点    程序员
25 条回复
512357301
222 天前
github 仓库没搜到,是闭源了吗
aliceclark
221 天前
跟我想象中的“数据库”不是太一样
点进来之前还想着 mmap 不都是老黄历了么
xieyuheng
221 天前
oxygenkun101
221 天前
“数据库”最关键的存储的内容以及格式你是怎么定义的呢。
xieyuheng
221 天前
@oxygenkun101 JSON 。设计文档的 数据表 章节中 又提到。
matrix1010
221 天前
如果只是 RESTful API 到文件的映射我觉得不能称为数据库。你可以称它是某种无代码工具,但和开发者传统认知中的数据库差别很大。从数据库直接生成 API 也有挺多现成方案
xieyuheng
221 天前
@matrix1010
我觉得可以称为数据库。并且在 SQL 出现以前,这种方案就被称为数据库几十年了。

传统的认知中的数据库,大多需要依赖特殊的保存数据的格式。
每个数据库平台都想要把你锁在他们的解决方案内,数据库版本的更新你就要跟着迁移。
实际上我不关心你的新型数据库增加了什么,我只想专心写 APP ,
让我的数据稳定,保持开放,不被锁在某个平台里。

所谓“从数据库直接生成 API 也有挺多现成方案”。

在我看来是更要不得的东西,
他们生成的 SQL 都是不需要你看到的,
这种平台更想要把你锁在他们的解决方案中。
xieyuheng
221 天前
打开 emacs 和 vim 就能修改和管理数据。不是很舒服吗?
kkocdko
221 天前
那为什么不用 SQLite 呢
dacapoday
221 天前
同样是 node.js 实现的 基于文件系统的数据库
https://github.com/arvindr21/diskDB

golang 实现的 基于文件系统的数据库
https://github.com/peterbourgon/diskv
https://github.com/recoilme/pudge

从设计文档看,楼主与他们的区别是额外设计了基于 http 的通信协议
但数据模型都是共通的,都是层次数据库,或者说文档型数据库
xieyuheng
220 天前
@dacapoday 多谢分享
fuyufjh
220 天前
你需要的是 kv store

虽然文件系统也可以看作是一个面向大 value 、没有 ACID 事务的 kv store ,但显然不推荐这么用
haierspi
220 天前
建议读一下 ecshop 的文本数据库
xieyuheng
220 天前
@fuyufjh 没有 ACID 事务会怎样?
xieyuheng
220 天前
atomicity, consistency, isolation, durability 什么意思呢?

银行想要实现银行账户的信息,也不会 update 两个数据的字段,也是用一个 append only 的账本实现的,不是吗?

所以 ACID 有什么用?
xieyuheng
220 天前
所以 ACID 感觉就是没什么意义的广告词里的东西,
就像说酸奶中有 DHC ,有有益因子,
牙膏有中国牙防组认证,
奶粉说爱因斯坦大脑思维活跃,
等等等等
mikewang
220 天前
@xieyuheng
这么做的缺陷就在于不同操作系统/文件系统下没有统一的一个锁机制,缺少了事务的功能,所以就是限制在简单场景下使用。
为啥说锁机制比较重要呢,想象一下微信群很多人同时接龙,刷的很快的时候,经常会出问题:上一个人是 10 号,你填 11 号,结果你在填的时候别人抢先一步(他填了 11 号)。然后你也发了 11 号,结果上一个人发的内容就被你冲掉了。然后后面人也有同样的问题,最终填的乱七八糟; ACID 事务也同样,你在做一系列修改的过程当中,不希望其他人乱动你的数据,或者出现只改了一半的情况,那就要有事务,这个不是广告词。
这种文件做的数据库,要保证各个操作有序进行,我想应该就是串行化了,效率上就没有其他类型的高。
xieyuheng
219 天前
微信群接龙可还行。
hefish
217 天前
我还是乖乖的用 sqlite/mysql 吧。这个我怕将来有些需要 sql 的地方,这个没法实现。
kkwa56188
216 天前
本来还想看一看 是怎么实现的,
但 看到 OP 说 数据库里 ACID 没有用, 不予实现 的时候, 就默默的把这个时间省下了.

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

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

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

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

© 2021 V2EX