Как хранить вики-сайты (vcs)

В качестве личного проекта я пытаюсь написать вики с помощью django. Я новичок в веб-разработке. Я на (раннем) этапе, когда мне нужно решить, как хранить вики-сайты. У меня есть три подхода, и я хотел бы знать ваше предложение.

Плоские файлы

Я рассматривал подход с использованием плоских файлов с системой контроля версий, такой как git или mercurial. Во-первых, мне бы хотелось посмотреть на несколько примеров вики, например http://hatta.sheep.art.pl/ < / а>. Во-вторых, vcs, вероятно, будет иметь дело с конфликтами редактирования и сохранением истории редактирования, так что мне не придется изобретать велосипед. И в-третьих, я, вероятно, легко мог бы клонировать репозиторий вики, так что я (или, если на то пошло, другие) могу иметь автономную копию вики.

С другой стороны, насколько мне известно, я не могу использовать модели django с плоскими файлами. Затем, если бы я хотел добавить поля на вики-сайт, например категорию, мне нужно было бы каким-то образом сохранить ссылку на этот плоский файл, чтобы связать поля в базе данных с плоским файлом. Кроме того, я не знаю, стоит ли иметь все вики-сайты в одном репозитории. Я полагаю, что более естественно иметь что-то вроде репозитория для каждого вики-сайта, соответственно. файл. И последнее, но не менее важное: я не уверен, но я думаю, что использование плоских файлов ограничит мои возможности развертывания, потому что веб-хосты, возможно, не позволяют создавать файлы (я думаю, например, о Google App Engine)

Хранение в базе данных

Сохраняя вики-сайты в базе данных, я могу использовать модели django и связывать произвольные поля с вики-сайтом. Мне, наверное, было бы легче развернуть вики. Но я бы не получил таких функций vcs, как история и разрешение конфликтов как таковых. Я искал расширения django, чтобы помочь мне, и нашел django-reversion. Однако я не совсем понимаю, соответствует ли это моим потребностям. Отслеживает ли он изменения модели, например, если я изменяю файл модели django, или отслеживает ли он содержимое моделей (что соответствует моим потребностям). Кроме того, я не вижу, поможет ли мне реверсия django с конфликтами редактирования.

Хранение репозитория vcs в поле базы данных

Это было бы моим идеальным решением. Он сочетал бы в себе преимущества обоих предыдущих подходов без недостатков. Это; У меня были бы функции vcs, но я бы сохранил вики-сайты в базе данных. Проблема в том, что я понятия не имею, насколько это возможно. Я просто представляю себе сохранение вики-сайта / источника вместе с репозиторием git / mercurial в поле базы данных. Тем не менее, я почему-то сомневаюсь, что поля базы данных так работают.

Итак, я открыт для любых других подходов, но это то, что я придумал. Кроме того, если вам интересно, вы можете найти дрянной ранний тест, над которым я работаю, здесь http://github.com/eugenkiss/instantwiki-test


person Eugen    schedule 23.05.2010    source источник
comment
связанные вопросы, если это поможет вам ответить на мой вопрос stackoverflow.com/questions/873801/ stackoverflow.com/questions/1583595/   -  person Eugen    schedule 24.05.2010


Ответы (2)


Ни в одном из вариантов вы не думали, хотите ли вы иметь возможность выполнять поиск в своей вики. Если это необходимо, наличие «живой» копии каждой страницы в базе данных с полнотекстовым поиском было бы чрезвычайно полезным. По этой причине я бы лично каждый раз сохранял страницы в базе данных - иначе вам придется где-то создавать свой собственный индекс.

Что касается регистрации версий, вам нужно сохранить только живую копию в индексируемом формате. Вы можете автоматически создать элемент истории в своей модели «страницы», когда измененная страница записывается обратно в базу данных. Вы можете сократить накладные расходы на хранение более ранних версий страницы, сжав данные, если в этом возникнет необходимость.

Если вы ожидаете большого количества журналов изменений, вы можете прочитать этот ответ здесь:

Как эффективно хранить историю изменений?

person Steve Mayne    schedule 27.05.2010
comment
Я, наверное, забыл упомянуть, что поиск для меня не важен. Что касается вашего ответа: я думаю, я должен отметить его как правильный ответ, потому что это тоже то, к чему я пришел. Я почему-то не мог представить, как иметь модель истории, но этот комментарий просветил меня: lethain.com/entry/2008/oct/15/ Также интересна ваша ссылка на эффективное сохранение изменений в истории - person Eugen; 28.05.2010

Создание вики - это весело и полезно, но уже существует множество готовых пакетов программного обеспечения для вики. Я предлагаю Список вики-программ из Википедии. В частности, MoinMoin и Trac хороши. Наконец, Джон Сазерленд создал wiki с помощью Django.

person mcandre    schedule 25.05.2010