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

你能自己撸一个数据库吗?

  •  
  •   flowyi · 2017-05-24 23:48:45 +08:00 · 10791 次点击
    这是一个创建于 2738 天前的主题,其中的信息可能已经有所发展或是发生改变。
    作为一个程序员,特别是后端程序员,应该或多或少与数据库产生联系吧。
    那你有考虑过数据库是怎么实现的吗?如果让你一个人实现一个某个领域的数据库( RMDB,Full Text Search,NoSQL,k-v,Data Warehouse, Time-series, etc.),并跑在你公司的某个生产业务上。

    a. 你觉得能完成吗?
    b. 预计用多久?
    c. 为毛?
    d. 你的相关学习,工作经历是如何 能 /(不能)支撑你完成这个任务的?

    这是个很严肃的问题,可以随意扯蛋。
    第 1 条附言  ·  2017-05-25 10:01:39 +08:00
    :s/RMDB/DBMS/g


    个人愚见,现在如果要新写一个数据,绝大部分的工作在于工程层面,理论层面的大部分问题已经有前人研究清楚。所以我认为参考开源项目,甚至直接使用现成模块,从 0 手写,或者拼凑、修改获得一个满足某些特性的,且生产可用的数据库并不算很难,至少有些大公司甚至创业团队已经在实践了。数据库只是一个比较复杂的专有领域系统,任何经历过正规 cs 课程的程序员,有足够的参考资料情况下应该是可以写出满足某些特定需求的数据库的,要达到生产级别则还需要丰富的工程经验。
    第 2 条附言  ·  2017-05-25 17:31:59 +08:00
    大家普遍认为写数据库是一件非常有挑战性的事情,有些同学也曾经有过这些想法。

    附加问题:

    那如果有一家科技创业公司,专注于大数据与数据仓库领域,它的数据库产品已经被行业内的顶级客户所采用,且背后有爸爸支持资金不愁,qian 景广阔,你会不会心动动过来看看呢?

    Avatar show you the way!
    60 条回复    2017-08-06 17:51:17 +08:00
    hjc4869
        1
    hjc4869  
       2017-05-24 23:51:39 +08:00
    一个人做数据库放在生产业务上?
    msg7086
        2
    msg7086  
       2017-05-24 23:52:08 +08:00
    上过相关的课。但是自己撸一个就蛋碎了。
    Andiry
        3
    Andiry  
       2017-05-24 23:58:25 +08:00
    KVS 很简单
    DBMS 比较难,如果考虑性能的话
    flowyi
        4
    flowyi  
    OP
       2017-05-24 23:59:19 +08:00
    @hjc4869 并非不可能呀
    amanbolatbalabek
        5
    amanbolatbalabek  
       2017-05-25 00:03:35 +08:00 via iPhone
    A. 可以
    B. 2-3 周
    C. 实际项目花了这么多时间
    D. 没懂这问题
    nazor
        6
    nazor  
       2017-05-25 00:10:47 +08:00
    挺难的,需要考虑的太多。就算你有信心放在生产业务上,公司也不会放心。
    flowyi
        7
    flowyi  
    OP
       2017-05-25 00:26:06 +08:00
    @amanbolatbalabek 是应用于什么业务的? 2-3 周太屌了!
    em70
        8
    em70  
       2017-05-25 01:33:03 +08:00 via Android
    这是科学家干的事
    amanbolatbalabek
        9
    amanbolatbalabek  
       2017-05-25 01:35:23 +08:00 via iPhone
    @flowyi 我公司的,做国际物流。管理系统包括运输、客户、财务、订单、库房、车辆、等等模块。
    liuhaotian
        10
    liuhaotian  
       2017-05-25 01:43:06 +08:00 via iPhone
    @amanbolatbalabek 他说的是 DBMS 吧
    mengyaoss77
        11
    mengyaoss77  
       2017-05-25 02:14:54 +08:00 via Android
    软件工程都很费脑子
    binux
        12
    binux  
       2017-05-25 02:20:24 +08:00
    数据库这个范围太广了,任何单独一个点拿出来就是一个大工程。
    但是,LZ 听说过文件数据库吗?
    kaifeii
        13
    kaifeii  
       2017-05-25 02:26:58 +08:00
    不应该问问用什么语言吗
    Gathaly
        14
    Gathaly  
       2017-05-25 04:22:01 +08:00
    索引和 SQL 的编译实现得花不少时间吧,如果直接拿 mysql 改改应该可以,不过是否能用和实现是两回事....
    doctorlai
        15
    doctorlai  
       2017-05-25 05:13:29 +08:00
    没有必要 重新照轮子
    lsmgeb89
        16
    lsmgeb89  
       2017-05-25 05:21:48 +08:00 via Android
    从头做?没个 10 年写不完吧
    sinxccc
        17
    sinxccc  
       2017-05-25 05:22:41 +08:00
    回去翻着课本写个基本功能的数据库不难…加上一些某个领域的功能难度也不是那么大,考虑到性能优化略折腾但也不是特别困难的事情。

    但要能直接满足生产环境的要求…这得多牛的人才能一个人搞定这样的任务=_=
    sip2u
        18
    sip2u  
       2017-05-25 06:53:26 +08:00 via iPhone
    参考 tikv tidb 不就好了 @pingcap
    zhs227
        19
    zhs227  
       2017-05-25 07:24:26 +08:00
    造一个 dbms 然后让它稳定下来,不说十年八年,一年半载总是要有的吧
    如果是 kv 数据库应该简单一些,如果是通用的 RDBMS,应该会比较难。
    reus
        20
    reus  
       2017-05-25 08:28:25 +08:00
    可以,全职一年左右吧,理论都很成熟的了,还有借鉴,从小到大的实现都有参考,sqlite、postgresql 这些。
    fyyz
        21
    fyyz  
       2017-05-25 08:33:48 +08:00 via Android
    这玩意非常难,起码要写一个 sql 编译器,设计一个二进制数据库文件。如果不满足于基本的增删改查,要写一套事务系统,那难度就更大了。这些还是小问题,最难的是,这些东西尽量要避免出错,甚至对 bug 零容忍。否则一个小 bug 把数据库文件弄坏了,那怎么搞?
    firefox12
        22
    firefox12  
       2017-05-25 08:35:48 +08:00 via iPhone
    读完 sqlit 写一个出来 半年差不多
    svenFeng
        23
    svenFeng  
       2017-05-25 08:41:46 +08:00 via Android
    写一个 rdbms 不难,但是要用于生产环境。。。太难了,全都是坑
    svenFeng
        24
    svenFeng  
       2017-05-25 08:48:20 +08:00 via Android
    如果 kv 引擎、NoSQL,那还好,看一下开源的源码写出来一个至少自己用的感觉是没问题的,时间不清楚,最近打算写一个
    shakoon
        25
    shakoon  
       2017-05-25 08:56:04 +08:00
    这问题就像是:你有驾照吗?哦,老司机了啊,那你多久能造出一辆能上路的车来?
    flowyi
        26
    flowyi  
    OP
       2017-05-25 09:09:50 +08:00
    @liuhaotian 哈哈 你看出来我写错了
    liuhaotian
        27
    liuhaotian  
       2017-05-25 09:21:15 +08:00
    @flowyi 啊..难道你要实现的不是一个 DBMS 吗.. 他的描述好像是业务?
    loadinger
        28
    loadinger  
       2017-05-25 09:23:44 +08:00
    哈哈. 有人说什么什么简单, 2 3 天就搞定的.... 我只想说:放你玛的血....
    daysv
        29
    daysv  
       2017-05-25 09:27:42 +08:00
    我是来看各路大神显神通的
    xiaoqi
        30
    xiaoqi  
       2017-05-25 09:29:18 +08:00
    不撸,营养跟不上~
    QQ2171775959
        31
    QQ2171775959  
       2017-05-25 09:29:28 +08:00
    你们说的也太笼统了,没有一个具体的指标,没有什么好参考的,随便哪一块小的项目都有可能要你花上大半年时间都说不定。
    jhaohai
        32
    jhaohai  
       2017-05-25 09:30:30 +08:00 via iPhone
    撸一个简单的很快,但是要对标 oracle、db2 之类的就呵呵了
    liprais
        33
    liprais  
       2017-05-25 09:33:45 +08:00 via iPhone
    不可能的,光把 sql 这一块做到能用就一个人不可能
    cjyang1128
        34
    cjyang1128  
       2017-05-25 09:45:57 +08:00
    我们学校数据库原理课的大程就是撸一个数据库,当然不是一个人,是一个小组。主要有词法分析,b 树索引,数据存储并且包括 GUI,当时打酱油做了最简单的存储=-=,索引层是最难的。也有大神当年是一个人搞定的。。。惊为天人!
    junzki
        35
    junzki  
       2017-05-25 09:54:54 +08:00
    有一个东西叫 SSDB,就是一个人山寨了 Redis (作者自己说的)搞出来的东西。
    qianguozheng
        36
    qianguozheng  
       2017-05-25 09:59:28 +08:00
    你这么一说,我觉得还是可以做的。
    初期不考虑各种 benchmark, 比如想要实现内存数据库,类似 redis, 可以申请一个内存池,然后构建红黑数来存储数据结构,反正是 kv, 然后呢再搞个 cli 接口支持增删改查, 是不是一个简单的数据库就完成了?
    murmur
        37
    murmur  
       2017-05-25 10:02:28 +08:00
    小的比不上 sqlite 大的比不上 mysql 所以我做他干嘛
    likuku
        38
    likuku  
       2017-05-25 10:07:21 +08:00
    数据库目前是商业软件的品质上远胜于开源软件的领域。
    flowyi
        39
    flowyi  
    OP
       2017-05-25 10:08:21 +08:00
    @qianguozheng 这也太简单了……

    以前提到数据库,一般就专指 DBMS。现在各种特定领域的存储、查询系统也被笼统的归类到数据库里面,所以还真的很难界定。
    qianguozheng
        40
    qianguozheng  
       2017-05-25 10:27:05 +08:00
    @flowyi 再复杂的系统也是基于这种简单的架构来做的吧。
    liuhaotian
        41
    liuhaotian  
       2017-05-25 10:35:37 +08:00
    @flowyi
    不过“应用到具体工程”这个要求我觉得不是增加复杂度而是减小复杂度。
    查询优化这玩意儿从上世纪开始研究到现在一直在增加深入,没有到一个极限,就是因为查询不确定性。但是就好像到了具体的工程我们建立数据库之后可以根据自己的查询建立索引一样,我们可以根据具体工程中的查询做查询优化的子集,或者说针对性的查询优化。

    但是不管怎么说,要达到生产级别则还需要丰富的工程经验。
    begeekmyfriend
        42
    begeekmyfriend  
       2017-05-25 10:36:13 +08:00
    我自己当初也想撸一发,结果只撸出一个 B+树,你知道我花了多长时间才写对吗。。。
    begeekmyfriend
        43
    begeekmyfriend  
       2017-05-25 10:36:36 +08:00
    v2orz
        44
    v2orz  
       2017-05-25 10:39:12 +08:00
    一个良好的、可商用的 sqlparse,你觉得需要多久~不用说完整的 DBMS 了
    想想我还是太弱鸡
    flowyi
        45
    flowyi  
    OP
       2017-05-25 10:41:17 +08:00
    @begeekmyfriend 14 年 9 月份第一个 commit,最近一个是 17 年 5 月 2 号。
    begeekmyfriend
        46
    begeekmyfriend  
       2017-05-25 10:45:32 +08:00
    @flowyi 好歹赚了 200 颗星星,上了一次 trending,不过写数据库的梦想就此破灭了
    simen513
        47
    simen513  
       2017-05-25 10:49:11 +08:00
    就跟造车一样,四个轮子+发动机+椅子,就可以是个车了,老头乐就属于这个。
    但是要真正的推广好,全世界也就最出名的几大厂家也就只能生产出比较有限的几个流行车型,这还是考虑了好多因素的权衡的情况。
    flowyi
        48
    flowyi  
    OP
       2017-05-25 11:07:16 +08:00
    @simen513 和造车还是有比较大区别的。参考 TiDB,他们就做的挺好的。
    zgqq
        49
    zgqq  
       2017-05-25 13:18:11 +08:00
    begeekmyfriend
        50
    begeekmyfriend  
       2017-05-25 14:42:21 +08:00
    @zgqq 翻一下 commit 就知道。这是一个过程,之前是一个未知的问题,一直在探索,实际上掌握了诀窍以后就是个已知的问题,之后也就随便几天的事情了
    cute
        51
    cute  
       2017-05-25 15:25:16 +08:00
    @junzki 基于 leveldb
    magicdu
        52
    magicdu  
       2017-05-25 15:28:03 +08:00 via Android
    今天看公司的数据库关系表,捋了一上午了,眼疼啊。更别谈自己写个数据库出来了,现在自己设计优化数据库表关系都是个问题
    EyreFree
        53
    EyreFree  
       2017-05-25 16:13:32 +08:00
    表示只能撸一个精子库出来...
    ericbize
        54
    ericbize  
       2017-05-25 16:23:16 +08:00
    哇,那辆保时捷好帅啊,要不自己造一辆? can you ?
    paw
        55
    paw  
       2017-05-25 17:15:57 +08:00
    http://blog.codingnow.com/2011/01/memdb.html
    梦幻西游 文件数据库。。
    0915240
        56
    0915240  
       2017-05-25 17:27:32 +08:00 via iPhone
    讲真 不说独自了。

    诸位有给知名 db 贡献过的吗 😊
    c4pt0r
        57
    c4pt0r  
       2017-05-25 20:13:33 +08:00
    仔细想了下,还真能。。。
    c4pt0r
        58
    c4pt0r  
       2017-05-25 20:43:10 +08:00
    @0915240 不要打击大家的积极性嘛。。。
    wzw
        59
    wzw  
       2017-05-25 21:59:42 +08:00
    @junzki ssdb 超级好用
    codedump
        60
    codedump  
       2017-08-06 17:51:17 +08:00   ❤️ 1
    看怎么定义“数据库”了,类似 ssdb 那样其实就是在 leveldb 上层包一个网络层的就。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.