Как хранить вики-сайты (vcs) - PullRequest
3 голосов
/ 24 мая 2010

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 мая 2010

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

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

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

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

0 голосов
/ 25 мая 2010

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

...