V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xieyuheng
V2EX  ›  程序员

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

  •  1
     
  •   xieyuheng ·
    xieyuheng · 210 天前 · 2129 次点击
    这是一个创建于 210 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想用文件系统做数据库。

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

    设计文档:

    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  
       210 天前 via Android
    github 仓库没搜到,是闭源了吗
    aliceclark
        2
    aliceclark  
       209 天前
    跟我想象中的“数据库”不是太一样
    点进来之前还想着 mmap 不都是老黄历了么
    xieyuheng
        3
    xieyuheng  
    OP
       209 天前 via Android
    oxygenkun101
        4
    oxygenkun101  
       209 天前
    “数据库”最关键的存储的内容以及格式你是怎么定义的呢。
    xieyuheng
        5
    xieyuheng  
    OP
       209 天前
    @oxygenkun101 JSON 。设计文档的 数据表 章节中 又提到。
    matrix1010
        6
    matrix1010  
       209 天前
    如果只是 RESTful API 到文件的映射我觉得不能称为数据库。你可以称它是某种无代码工具,但和开发者传统认知中的数据库差别很大。从数据库直接生成 API 也有挺多现成方案
    xieyuheng
        7
    xieyuheng  
    OP
       209 天前
    @matrix1010
    我觉得可以称为数据库。并且在 SQL 出现以前,这种方案就被称为数据库几十年了。

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

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

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

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

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

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

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

    所以 ACID 有什么用?
    xieyuheng
        16
    xieyuheng  
    OP
       208 天前
    所以 ACID 感觉就是没什么意义的广告词里的东西,
    就像说酸奶中有 DHC ,有有益因子,
    牙膏有中国牙防组认证,
    奶粉说爱因斯坦大脑思维活跃,
    等等等等
    mikewang
        17
    mikewang  
       208 天前
    @xieyuheng
    这么做的缺陷就在于不同操作系统/文件系统下没有统一的一个锁机制,缺少了事务的功能,所以就是限制在简单场景下使用。
    为啥说锁机制比较重要呢,想象一下微信群很多人同时接龙,刷的很快的时候,经常会出问题:上一个人是 10 号,你填 11 号,结果你在填的时候别人抢先一步(他填了 11 号)。然后你也发了 11 号,结果上一个人发的内容就被你冲掉了。然后后面人也有同样的问题,最终填的乱七八糟; ACID 事务也同样,你在做一系列修改的过程当中,不希望其他人乱动你的数据,或者出现只改了一半的情况,那就要有事务,这个不是广告词。
    这种文件做的数据库,要保证各个操作有序进行,我想应该就是串行化了,效率上就没有其他类型的高。
    xieyuheng
        18
    xieyuheng  
    OP
       207 天前
    微信群接龙可还行。
    hefish
        19
    hefish  
       204 天前
    我还是乖乖的用 sqlite/mysql 吧。这个我怕将来有些需要 sql 的地方,这个没法实现。
    kkwa56188
        20
    kkwa56188  
       204 天前
    本来还想看一看 是怎么实现的,
    但 看到 OP 说 数据库里 ACID 没有用, 不予实现 的时候, 就默默的把这个时间省下了.
    xieyuheng
        21
    xieyuheng  
    OP
       204 天前 via Android
    你还是浪费时间来留了这条回复。哈哈哈哈哈
    xieyuheng
        22
    xieyuheng  
    OP
       204 天前
    @hefish 比如说什么需要 SQL 的地方,是文件系统没法做到的? index 和 query 语言我都有计划实现。
    mayli
        23
    mayli  
       199 天前
    webdav?
    xieyuheng
        24
    xieyuheng  
    OP
       199 天前
    @mayli 你是说 webdev?
    xieyuheng
        25
    xieyuheng  
    OP
       199 天前
    @mayli 如果你是指 webdev 。我是 webdev ,这个数据库也是专门为 webdev 的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   890 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:20 · PVG 05:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.