V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
darasion
V2EX  ›  问与答

怎样在数据库中设计出一个 svn ?

  •  
  •   darasion · 2011-06-09 08:30:39 +08:00 · 4007 次点击
    这是一个创建于 4914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我简化的描述一下问题:

    1、一个表的名字叫 File (文件)
    字段: id, name, size, content .... 等等。

    2、很多人都可以同时基于某个副本来进行修改删除添加。

    3、不同名字的文件会有很多。

    4、只要其中有一个人提交了修改,其他人的修改全部作废。(简化版的commit/update/merge等)

    5、作废的必须打回重新基于新的版本修改。

    6、文件可以通过复制的方式回滚到之前的某个状态。

    7、设计时可以加上其他的表。


    现在的主要问题有两个:

    1、对不同的文件的修改,如何进行版本的管理。 因为不同的文件同时保存在同一个表中,这样版本+1的那种如何控制呢??

    2、怎样避免同时对数据表修改所造成的版本不一致?
    11 条回复    1970-01-01 08:00:00 +08:00
    aligo
        1
    aligo  
       2011-06-09 08:37:14 +08:00
    使用couchdb,稍加改造,应该可以完成这个任务

    然后按照我以前做过的类似的东西
    4、只要其中有一个人提交了修改,其他人的修改全部作废。(简化版的commit/update/merge等)
    5、作废的必须打回重新基于新的版本修改。

    这个有点奇怪

    我的做法是每次修改都是以某个版本为基准,而最后只记录有变化的部分,这样所有版本互相之间是平行相等的,最终版本是由各个版本合体而成
    darasion
        2
    darasion  
    OP
       2011-06-09 08:39:45 +08:00
    @aligo 忘记说了。

    数据库仅限 mysql 。
    因为项目之前用的就是这个,改不了。并且别的数据库不仅我不会,而且组里的其他人也不会。
    aligo
        3
    aligo  
       2011-06-09 08:42:10 +08:00
    @darasion mysql是固定范型的,所以做起来会比较麻烦了,不过我记得你可以参考一个东西:wordpresss的posts表
    aligo
        4
    aligo  
       2011-06-09 08:45:40 +08:00
    其实比较麻烦的也只是没办法把修改历史embed进一个条目里- -
    apoclast
        5
    apoclast  
       2011-06-09 08:51:31 +08:00
    svn用的好像是berkeleyDB
    darasion
        6
    darasion  
    OP
       2011-06-09 09:29:56 +08:00
    @aligo 在本机装了一个 wp 3.1.3. , 但是发现我没找到查看历史修订的界面,这个在哪个页里能找到?

    很少写博客。囧。。
    vicalloy
        7
    vicalloy  
       2011-06-09 10:08:07 +08:00
    wp的没多少参考价值。
    wp和wiki一样是全量存储的。
    建议你去看看svn的原理介绍,这东西不好整。
    darasion
        8
    darasion  
    OP
       2011-06-09 10:10:33 +08:00
    我搜了很多关于wordpress保存revision 的东西。

    所有的文章都是讲怎样去掉这个动能。

    唉~~~
    real_newbie
        9
    real_newbie  
       2011-06-09 10:44:25 +08:00
    CouchDB的版本也不是用來回滾的. 主要是用來解決Replication時的沖突的.
    aligo
        10
    aligo  
       2011-06-09 13:28:46 +08:00
    @darasion 你创建一篇日志,然后反复编辑它,就会留下历史存档,在posts表里

    @real_newbie couchdb大体上还是能满足楼主的需求啊,当然那没有回滚功能,楼主看上去也不需要
    real_newbie
        11
    real_newbie  
       2011-06-09 13:33:41 +08:00
    @aligo

    我的意思是CouchDB在一個master上文檔只有最新的版本是有用的. 歷史的版本其實是用不了的. 所以要"基於某個版本"這樣的需求要實現的話, 還是需要把這個版本另存為另外一個文檔的. 這樣, 就和MySQL裡另存一條記錄(全量存储)沒有什麼本質區別了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1292 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.