Я делаю проект, который занимается структурированной базой документов. У меня есть дерево категорий (~ 1000 категорий, до ~ 50 категорий на каждом уровне), каждая категория содержит несколько тысяч (до, скажем, ~ 10000) структурированных документов. Каждый документ содержит несколько килобайт данных в некоторой структурированной форме (я бы предпочел YAML, но это может быть также JSON или XML).
Пользователи этих систем выполняют несколько типов операций:
- получение этих документов по идентификатору
- поиск документов по некоторым структурированным атрибутам внутри них
- редактирование документов (т.е. добавление/удаление/переименование/слияние); каждая операция редактирования должна быть записана как транзакция с некоторым комментарием
- просмотр истории записанных изменений для конкретного документа (включая просмотр того, кто, когда и почему изменил документ, получив более раннюю версию, и, возможно, вернется к нему, если потребуется)
Конечно, для решения этой проблемы традиционным решением будет использование какой-то базы данных документов (например, CouchDB или Mongo) - однако эта функция управления версиями (история) соблазнила меня дикой идеей - почему я не должен использовать git
в качестве базы данных для этого приложения?
На первый взгляд это можно решить следующим образом:
- category = directory, document = file
- получение документа по ID = > изменение каталогов + чтение файла в рабочей копии
- редактирование документов с комментариями редактирования = > выполнение коммитов различными пользователями + сохранение сообщений фиксации
- history = > обычный git журнал и поиск старых транзакций
- search = > , что немного более сложная часть, я предполагаю, что это потребует периодического экспорта категории в реляционную базу данных с индексацией столбцов, которую мы разрешим искать по
Есть ли другие проблемы в этом решении? Кто-нибудь попытался реализовать такие бэкэнд уже (т.е. Для любых популярных фреймворков - RoR, node.js, Django, CakePHP)? Имеет ли это решение какие-либо последствия для производительности или надежности - т.е. Доказано, что git будет намного медленнее, чем традиционные решения для баз данных, или могут возникнуть проблемы с масштабируемостью/надежностью? Я предполагаю, что кластер таких серверов, которые нажимают/вытаскивают репозиторий друг друга, должен быть достаточно надежным и надежным.
В принципе, скажите, будет ли это решение работать и почему оно будет или не будет?