#Backend для сервиса комментариев

Для данного решения выбрана реализация дерева комментариев Adjacency List потому что предполагается достаточно частое изменение ветвей дерева. Изучив доступные материалы я пришел к выводу, что рекурсивные запросы PostgreSQL не сильно проигрывают в производительности выборкам из других реализаций деревьев в базе данных (Nested Sets, Materialized Path), а иногда даже превосходят их. При этом Adjacency List избавляет от неоходимости заботиться об обновлении других узлов дерева при изменении узла.

Для получения всех дочерних узлов комментария или сущности используются рекурсивные запросы. При этом передаются на клиент они с помощью StreamingHttpResponse. Узлы в передаваемом списке отсортированы по пути, т.е. за родителем идут потомки. К каждому элементу списка добавлено поле path вида '/root_id/id/id/id/parent_id/current_node_id'. Решение использовать StreamingHttpResponse здесь обусловлено тем что мы не можем предположить заранее объем ответа. В случае очень большого результата StreamingHttpResponse заблокирует воркер, но при этом не будет допущено зависание всего сервера из-за нехватки памяти.

Выгрузка истории комментариев в xml также осуществляется с помощью StreamingHttpResponse по той же причине. Добавление других форматов выгрузки может осуществляться добавлением нужного класса в comments/writers.py