我的2便士值。有点渴望,但是……我的一个孵化项目也有类似的要求。与您相似,我的主要要求是文档数据库(本例中为xml)以及文档版本控制。它用于具有许多协作用例的多用户系统。我更喜欢使用支持大多数关键需求的可用开源解决方案。
顺带一提,我找不到任何一种产品可以提供足够的可扩展性(用户数量,使用量,存储和计算资源)同时提供这两种产品。 (可能)可以从中得出解决方案。随着我更多地使用git选项,从单用户角度转到多(milli)用户角度成为一个明显的挑战。不幸的是,我没有像您那样进行大量的性能分析。(..懒惰/早点退出..对于版本2,咒语)强大的力量!无论如何,我有偏见的想法此后演变为下一个(仍然有偏见的)替代方案:在各自领域,数据库和版本控制方面最好的工具组合而成。
虽然仍在进行中(...并略有忽略),但变形版本就是这个。
- 在前端:(用户界面)将数据库用于第一级存储(与用户应用程序接口)
- 在后端,使用版本控制系统(VCS)(例如git)对数据库中的数据对象执行版本控制
从本质上讲,这相当于在数据库中添加一个版本控制插件,并带有一些集成胶,您可能需要开发这些胶,但是要容易得多。
(应该)如何工作是主要的多用户界面数据交换是通过数据库进行的。DBMS将处理所有有趣且复杂的问题,例如多用户,并发e,原子操作等。在后端,VCS将对单个数据对象集执行版本控制(无并发或多用户问题)。对于数据库上的每个有效事务,仅对将被有效更改的数据记录执行版本控制。
至于接口胶水,它将采用数据库和VCS之间的简单接口功能。在设计方面,一种简单的方法是事件驱动的接口,其中来自数据库的数据更新将触发版本控制过程(提示:假定为 Mysql,使用触发器和sys_exec() 就实现的复杂性而言,它的范围从简单有效(例如脚本)到复杂而奇妙(某些已编程的连接器接口)。一切都取决于您要花多少钱,以及愿意花多少汗水。我认为简单的脚本应该可以发挥作用。为了访问最终结果(各种数据版本),一种简单的替代方法是使用VCS中的tag / id / hash版本引用的数据填充数据库的克隆(更多是数据库结构的克隆)。同样,该位将是接口的简单查询/翻译/映射作业。
仍然存在一些挑战和未知数,但是我想其中的影响和相关性将在很大程度上取决于您的应用程序需求和用例。有些可能最终成为非问题。其中的一些问题包括数据库和VCS这两个关键模块之间的性能匹配(针对具有高频数据更新活动的应用程序),在git端随时间推移作为数据的资源规模(存储和处理能力)以及用户增长:稳定,指数或最终达到平稳
在上面的鸡尾酒中,这是我目前正在酿造的
- 将Git用于VCS(由于仅使用2版本之间的变更集或增量,因此最初被认为是良好的旧CVS)
- 使用mysql(由于我的数据具有高度结构化的特性,因此具有严格的xml模式的xml)
- 与MongoDB一起玩耍(尝试使用NoSQl数据库,该数据库与git中使用的本机数据库结构紧密匹配)
一些有趣的事实-git实际上确实做了一些事情来优化存储,例如压缩和仅存储对象修订版之间的增量-是,git确实仅存储数据对象修订版之间的变更集或增量,它在哪里适用(它知道何时以及如何)。参考资料:packfiles,深入Git内部
-回顾git的对象存储(可寻址内容的文件系统),显示了与noSQL数据库(例如mongoDB)的惊人相似之处(从概念角度来看)。同样,以牺牲大量资金为代价,它可能会提供更多有趣的可能性来整合2和性能调整
如果到此为止,让我看看以上是否适用于您的情况,并假设适用于您的情况,那么它将如何与您上一次全面性能分析中的某些方面保持一致