Привет, у меня есть небольшой крикбокс типа cgi, который работает на сервере, и в настоящее время, когда кто-то оставляет комментарий, я просто форматирую этот комментарий в html i.e
<p class="title">$title</p>
<p class="comment">$comment</p>
и сохранить в плоском файле. Было бы быстрее и приемлемо низко в LOC для переопределения хранилища в xml или json, в простой спецификации моего собственного или придерживаться простого html-маршрута?.
Я не хочу использовать реляционную базу данных для этого.
Если плоский файл достаточно быстрый, тогда идите с этим, поскольку он очень простой и доступный. Хранение как XML и JSON, но использование плоского файла, вероятно, очень сопоставимо по производительности.
Возможно, вы захотите рассмотреть (проигнорировать это, если вы просто оставили его вне вашего вопроса), дезинфицировать/фильтровать текст, чтобы пользователи не могли сломать ваш HTML, например. введите "</p> " в тексте комментария.
Плоский файл - это самая быстрая форма сохранения. Период. Там нет форматирования, кодирования, индексирования, блокировки или чего-либо еще.
JSON (и YAML) налагают некоторые накладные расходы. Они будут медленнее. Там должно быть сделано какое-то форматирование.
XML налагает больше накладных расходов, чем JSON/YAML. Это будет медленнее. Там должно быть сделано достаточное количество форматирования.
Чем больше накладных расходов, тем медленнее будет.
Ни один из них не имеет ничего общего с дезинфекцией ввода комментария, чтобы он отображался как допустимый HTML. Вы должны использовать cgi.escape, чтобы избежать любых символов в виде символов в комментарии перед сохранением текста в файл.
XML - это хороший, чистый способ хранения данных этого типа. В Python вы можете использовать lxml для создания/обновления файла:
from lxml import etree
P_XML = 'xml_file_path.xml'
def save_comment(title_text, comment_text):
comment = etree.Element('comment')
title = etree.SubElement(comment, 'title')
title.text = title_text
comment.text = comment_text
f = open(P_XML, 'a')
f.write(etree.tostring(comment, pretty_print=True))
f.close()
save_comment("FIRST!", "FIRST COMMENT!!!")
save_comment("Awesome", "I love this site!")
Это простой старт, но вы могли бы сделать намного больше (т.е. настроить идентификатор для каждого комментария, читать в XML, используя парсер lxml, и добавлять к нему вместо добавления файла).