Как хранить комментарии Markdown - PullRequest
15 голосов
/ 06 февраля 2010

Я хочу использовать Markdown для системы комментирования на моем сайте, но наткнулся на следующую проблему: Что я должен хранить в базе данных - исходный комментарий в Markdown, проанализированный комментарий в HTML или оба?

Мне нужна версия HTML для просмотра и версия Markdown, если пользователю нужно отредактировать свой комментарий. Если я сохраню версию Markdown, мне придется анализировать комментарии во время выполнения. Если я сохраняю версию HTML, мне нужно преобразовать комментарий обратно в Markdown, когда пользователю нужно отредактировать его (для этого я нашел Markdownify , но он не безупречен). Если я храню обе версии, я удваиваю использованное пространство.

Какой будет лучший вариант? Кроме того, как Stack Overflow справляется с этим?

Ответы [ 3 ]

16 голосов
/ 06 февраля 2010

Храните оба. Это идет вразрез с правилами нормализации базы данных, но я думаю, что в данном случае это стоит того, чтобы оптимизировать скорость - анализ больших объемов текста - очень медленная операция.

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

13 голосов
/ 06 февраля 2010

Сохранение исходной уценки и анализ во время выполнения. Существует несколько проблем с сохранением преобразованной версии в базе данных.

  1. Если пользователь хочет отредактировать свой комментарий, вы должны конвертировать в обратном порядке проанализированный в исходную уценку
  2. Место в базе данных (всегда придерживайтесь правила, что если вам не нужно хранить его, не делайте)
  3. Изменения, внесенные в анализатор уценки, должны выполняться для каждого комментария в базе данных, а не просто отображаться во время выполнения.
5 голосов
/ 06 февраля 2010

Просто визуализируйте Markdown в HTML во время выполнения.

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

Просто взгляните на рендерер JavaScript в реальном времени, который использует SO. Это быстро.

Edit: Извините, мне следовало быть более ясным. Я имел в виду просто рендеринг в PHP. Вы избавите себя от головной боли - и, возможно, у вас есть более важные поводы для беспокойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...