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

2011-06-09 08:30:39 +08:00
 darasion
我简化的描述一下问题:

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

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

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

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

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

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

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


现在的主要问题有两个:

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

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

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

这个有点奇怪

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

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

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

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

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

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

我的意思是CouchDB在一個master上文檔只有最新的版本是有用的. 歷史的版本其實是用不了的. 所以要"基於某個版本"這樣的需求要實現的話, 還是需要把這個版本另存為另外一個文檔的. 這樣, 就和MySQL裡另存一條記錄(全量存储)沒有什麼本質區別了.

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

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

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

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

© 2021 V2EX