мій 2 пенси варто. Трохи туга, але ...... я мав подібну вимогу в одному зі своїх інкубаційних проектів. Як у ваших, мої ключові вимоги, коли база даних документів (xml в моєму випадку) з версією документа. Це було для багатокористувацької системи з безліччю випадків використання співпраці. Моєю перевагою було використання доступних рішень з відкритим кодом, які підтримують більшість ключових вимог.
Щоб вирішити переслідування, я не зміг знайти жодного продукту, який би забезпечив обидва способи, таким чином, що був достатньо масштабованим (кількість користувачів, обсяги використання, сховища та ресурси для обчислення). Я був упереджений до git за всі перспективні можливості, і (ймовірні) рішення, з яких можна було б вийти з нього. По мірі того, як я більше грав з git-варіантом, очевидним викликом стало перехід від точки зору одного користувача до перспективного (мілі) користувачів. На жаль, мені не вдалося зробити істотний аналіз ефективності, як ви. (.. лінивий / кинь рано ... для версії 2, мантра) Могу вам! У будь-якому разі, моя упереджена ідея з того часу перетворилася на наступну (все ще необ'єктивну) альтернативу: мережу інструментів, які є найкращими у своїх окремих сферах, базах даних та контролю версій.
Поки все ще працює (... і трохи нехтується), морфована версія просто така.
- на фронті: (користувальницьке використання) використовувати базу даних для зберігання 1-го рівня (взаємодія з користувацькими додатками)
- на бекенді, використовуйте систему управління версіями (VCS) (наприклад, git) для виконання версій об'єктів даних у базі даних
По суті, це було б додати плагін для управління версіями до бази даних, якийсь інтеграційний клей, який, можливо, доведеться розробити, але може бути набагато простіше.
Як би (це повинно було) працювати, що основний обмін даними багатокористувацького інтерфейсу здійснюється через базу даних. СУБД буде працювати з усіма цікавими та складними питаннями, такими як багатокористувацькі, паралельні можливості, атомні операції тощо. На бекенді VCS здійснюватиме керування версіями для одного набору об'єктів даних (відсутність одночасності чи багатокористувацьких питань). Для кожної ефективної транзакції в базі даних контроль версій здійснюється лише на записах даних, які були б ефективно змінені.
Що стосується клею, що поєднується, він буде виконуватись у вигляді простої функції взаємодії між базою даних та VCS. З точки зору дизайну, як простий підхід був би інтерфейс, керований подіями, оновлення даних із бази даних запускає процедури контролю версій (підказка: припускаючи Mysql, використання тригерів і sys_exec () blah blah ...). З точки зору складності реалізації, вона буде варіюватися від простого та ефективного (наприклад, сценаріїв) до складного та чудового (деякий програмований інтерфейс роз'єму). Все залежить від того, наскільки божевільний ви хочете піти з цим, і скільки потужного капіталу ви готові витратити. Я вважаю, що прості сценарії повинні робити магію. А для отримання кінцевого результату, різних версій даних, простою альтернативою є заповнення клона бази даних (більше клону структури бази даних) з даними, на які посилається тег версії / id / хеш у VCS. знову цей біт стане простим запитом / перекладом / картою завдання інтерфейсу.
Є ще деякі проблеми та невідомі, з якими потрібно вирішити, але я вважаю, що вплив та актуальність більшості з них значною мірою залежатимуть від ваших вимог та випадків використання. Деякі з них можуть просто не мати проблем. Деякі питання включають відповідність продуктивності між двома ключовими модулями, базою даних та VCS, для програми з активністю оновлення даних високої частоти, масштабування ресурсів (потужність зберігання та обробки) протягом часу на стороні git як даних, так і користувачів зростають: стійкі, експоненціальні або з часом плато
З коктейлю вище, ось що я зараз готую
- використання Git для VCS (спочатку вважався старим хорошим CVS за рахунок використання лише наборів змін або дельт між двома версіями)
- використання mysql (через сильно структурований характер моїх даних, xml зі строгими схемами xml)
- пограти з MongoDB (спробувати базу даних NoSQl, яка тісно відповідає рідній структурі бази даних, що використовується в git)
Деякі цікаві факти - git насправді робить зрозумілі речі для оптимізації сховища, такі як стиснення та зберігання лише дельта між ревізією об'єктів - ТАК, git зберігає лише набори змін або дельти між ревізіями об'єктів даних, де це застосовно (він знає коли і як). Довідка: packfiles, глибоко в кишечнику внутрішніх приміщень Git
- Огляд зберігання об'єктів git (файлова система, адресована вмістом), показує чітку схожість (з точки зору концепції) на базі даних noSQL, таких як mongoDB. Знову ж таки, за рахунок потужного капіталу, це може забезпечити більш цікаві можливості інтеграції 2 та налаштування продуктивності
Якщо ви досягли цього далеко, дозвольте мені, якщо вищезазначене може бути застосовно до вашої справи, і припускаючи, що це буде так, як це буде складатись до деяких аспектів у вашому останньому всебічному аналізі ефективності