[连载] 用文件系统做数据库 之一 设计文档 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回技术问题时复制粘贴 AI 生成的内容
xieyuheng
V2EX    程序员

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

  •  1
     
  •   xieyuheng
    xieyuheng 2023-09-30 23:33:22 +08:00 2912 次点击
    这是一个创建于 790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想用文件系统做数据库。

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

    设计文档:

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

    目前我的实现并不完整。

    欢迎指教。
    25 条回复    2023-10-12 02:04:45 +08:00
    512357301
        1
    512357301  
       2023-10-01 02:57:38 +08:00 via Android
    github 仓库没搜到,是闭源了吗
    aliceclark
        2
    aliceclark  
       2023-10-01 08:57:28 +08:00
    跟我想象中的“数据库”不是太一样
    点进来之前还想着 mmap 不都是老黄历了么
    xieyuheng
        3
    xieyuheng  
    OP
       2023-10-01 09:15:20 +08:00 via Android
    oxygenkun101
        4
    oxygenkun101  
       2023-10-01 14:28:16 +08:00
    “数据库”最关键的存储的内容以及格式你是怎么定义的呢。
    xieyuheng
        5
    xieyuheng  
    OP
       2023-10-01 15:38:29 +08:00
    @oxygenkun101 JSON 。设计文档的 数据表 章节中 又提到。
    matrix1010
        6
    matrix1010  
       2023-10-01 18:50:41 +08:00
    如果只是 RESTful API 到文件的映射我觉得不能称为数据库。你可以称它是某种无代码工具,但和开发者传统认知中的数据库差别很大。从数据库直接生成 API 也有挺多现成方案
    xieyuheng
        7
    xieyuheng  
    OP
       2023-10-01 21:29:40 +08:00
    @matrix1010
    我觉得可以称为数据库。并且在 SQL 出现以前,这种方案就被称为数据库几十年了。

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

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

    在我看来是更要不得的东西,
    他们生成的 SQL 都是不需要你看到的,
    这种平台更想要把你锁在他们的解决方案中。
    xieyuheng
        8
    xieyuheng  
    OP
       2023-10-01 21:31:38 +08:00
    打开 emacs 和 vim 就能修改和管理数据。不是很舒服吗?
    kkocdko
        9
    kkocdko  
       2023-10-02 02:50:17 +08:00 via Android
    那为什么不用 SQLite 呢
    dacapoday
        10
    dacapoday  
       2023-10-02 07:34:11 +08:00
    同样是 node.js 实现的 基于文件系统的数据库
    https://github.com/arvindr21/diskDB

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

    从设计文档看,楼主与他们的区别是额外设计了基于 http 的通信协议
    但数据模型都是共通的,都是层次数据库,或者说文档型数据库
    xieyuheng
        11
    xieyuheng  
    OP
       2023-10-02 10:45:17 +08:00 via Android
    @dacapoday 多谢分享
    fuyufjh
        12
    fuyufjh  
       2023-10-02 15:38:14 +08:00
    你需要的是 kv store

    虽然文件系统也可以看作是一个面向大 value 、没有 ACID 事务的 kv store ,但显然不推荐这么用
    haierspi
        13
    haierspi  
       2023-10-02 16:11:36 +08:00
    建议读一下 ecshop 的文本数据库
    xieyuheng
        14
    xieyuheng  
    OP
       2023-10-02 19:36:12 +08:00
    @fuyufjh 没有 ACID 事务会怎样?
    xieyuheng
        15
    xieyuheng  
    OP
       2023-10-02 19:40:30 +08:00
    atomicity, consistency, isolation, durability 什么意思呢?

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

    所以 ACID 有什么用?
    xieyuheng
        16
    xieyuheng  
    OP
       2023-10-02 19:43:13 +08:00
    所以 ACID 感觉就是没什么意义的广告词里的东西,
    就像说酸奶中有 DHC ,有有益因子,
    牙膏有中国牙防组认证,
    奶粉说爱因斯坦大脑思维活跃,
    等等等等
    mikewang
        17
    mikewang  
       2023-10-03 03:03:59 +08:00
    @xieyuheng
    这么做的缺陷就在于不同操作系统/文件系统下没有统一的一个锁机制,缺少了事务的功能,所以就是限制在简单场景下使用。
    为啥说锁机制比较重要呢,想象一下微信群很多人同时接龙,刷的很快的时候,经常会出问题:上一个人是 10 号,你填 11 号,结果你在填的时候别人抢先一步(他填了 11 号)。然后你也发了 11 号,结果上一个人发的内容就被你冲掉了。然后后面人也有同样的问题,最终填的乱七八糟; ACID 事务也同样,你在做一系列修改的过程当中,不希望其他人乱动你的数据,或者出现只改了一半的情况,那就要有事务,这个不是广告词。
    这种文件做的数据库,要保证各个操作有序进行,我想应该就是串行化了,效率上就没有其他类型的高。
    xieyuheng
        18
    xieyuheng  
    OP
       2023-10-03 19:17:54 +08:00
    微信群接龙可还行。
    hefish
        19
    hefish  
       2023-10-06 07:47:05 +08:00
    我还是乖乖的用 sqlite/mysql 吧。这个我怕将来有些需要 sql 的地方,这个没法实现。
    kkwa56188
        20
    kkwa56188  
       2023-10-06 08:52:49 +08:00
    本来还想看一看 是怎么实现的,
    但 看到 OP 说 数据库里 ACID 没有用, 不予实现 的时候, 就默默的把这个时间省下了.
    xieyuheng
        21
    xieyuheng  
    OP
       2023-10-06 12:22:26 +08:00 via Android
    你还是浪费时间来留了这条回复。哈哈哈哈哈
    xieyuheng
        22
    xieyuheng  
    OP
       2023-10-06 12:36:21 +08:00
    @hefish 比如说什么需要 SQL 的地方,是文件系统没法做到的? index 和 query 语言我都有计划实现。
    mayli
        23
    mayli  
       2023-10-12 01:47:35 +08:00
    webdav?
    xieyuheng
        24
    xieyuheng  
    OP
       2023-10-12 02:03:06 +08:00
    @mayli 你是说 webdev?
    xieyuheng
        25
    xieyuheng  
    OP
       2023-10-12 02:04:45 +08:00
    @mayli 如果你是指 webdev 。我是 webdev ,这个数据库也是专门为 webdev 的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2694 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:26 PVG 21:26 LAX 05:26 JFK 08:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86