Выбор конкретного подхода зависит от требований проекта и предпочтений разработчика. Вот некоторые дополнительные факторы, которые могут помочь в принятии решения: - Сложность контента: Если контент в посте достаточно простой и не требует сложной структуры, первый подход с использованием собственных тегов может быть более простым и прямолинейным в реализации. Он позволяет сохранить структуру и порядок элементов контента без необходимости работы с дополнительными таблицами в базе данных. - Изменяемость стилей и компонентов: Если необходимо изменять стили или компоненты для каждого отдельного элемента контента, второй подход может быть предпочтительным. Он позволяет хранить стили и компоненты как отдельные записи в базе данных, что облегчает их изменение и управление. - Управление и редактирование контента: Второй подход также может быть удобным, если требуется предоставить редакторам или администраторам возможность легко управлять и редактировать контент. Они могут добавлять, изменять и удалять отдельные элементы контента без необходимости вмешательства в саму структуру поста. - Надежность и производительность: Первый подход может быть более эффективным в смысле производительности, поскольку не требуется работа с дополнительными таблицами и отношениями. Однако, в зависимости от объема контента и частоты его изменений, второй подход с отдельными элементами может предоставить более гибкое и масштабируемое решение. В конечном счете, выбор подхода будет зависеть от конкретных требований проекта и предпочтений разработчика. Рекомендуется провести дополнительный анализ и тестирование каждого подхода, чтобы определить наиболее подходящий вариант для конкретной задачи.
Хранение html кода в столбце поста нецелесообразно по нескольким причинам: 1. Использование памяти на хранение лишних html тегов. 2. Возможное ухудшение производительности, особенно при большом количестве постов. 3. Изменение стилей или компонентов может потребовать изменения кода. 4. Рекомендуется использовать собственные минифицированные теги для визуализации определенных блоков с помощью компонентов. 5. Хранение каждого элемента поста отдельно в базе данных, используя отношения к родительскому посту, позволит сохранить структуру и легко рендерить посты с помощью соответствующих компонентов.
Используйте собственные минифицированные теги, чтобы определенный парсер мог создавать нужные блоки с помощью компонентов. 20 лет назад этот вопрос был решен с помощью технологий XML/XSLT/XPath. Языки C#/dotNet, Java поддерживают этот стек, а также многие другие языки и библиотеки. Также можно использовать более простые шаблонизаторы, например Velocity или FreeMarker. Они изменяют постановку немного, но могут быть также рассмотрены. Хранение HTML-кода в столбце поста может быть нецелесообразным. С точки зрения суммарной стоимости владения (Total Cost of Ownership, TCO) база данных всегда будет дороже файловой системы. Самыми дешевыми вариантами будут хранилища типа Amazon S3, MS Blob, G-Drive. Если пересчитать удельно стоимость гигабайта, станет понятно. Храните каждый элемент поста в отдельной таблице базы данных со следующими полями: название элемента, позиция, содержание, идентификатор поста. Тут еще неясно, но существует эвристическое правило дизайна хороших NoSQL систем, согласно которому все данные для запроса должны лежать рядом и не требовать дополнительных действий. В идеале, для отдачи поста вы должны выполнить только один SELECT без использования join, подзапросов и агрегаций, а также без CONNECT-BY.
Хранить HTML код в столбце поста неэффективно по нескольким причинам: 1. Это приводит к избыточному использованию памяти для хранения HTML тегов. 2. Оптимизация на уровне байт обычно требует затрат на вычислительные мощности. 3. Это может снизить производительность, но производительность чего остается неясным. 4. Стили и компоненты могут изменяться, но код останется тем же. Однако, использование стилей через теги является лучшим вариантом для настройки визуального представления. 5. Рекомендуется использовать собственные минифицированные теги, которые позволят определенному парсеру создавать нужные блоки с помощью компонентов. Это похоже на пример использования BBCode на форумах для ограничения использования HTML в пользовательском вводе. Однако, такой подход требует дополнительной обработки при каждом выводе. 6. Хранение каждого элемента поста отдельно в базе данных с использованием отношений к родительскому посту позволит сохранить структуру и рендерить пост с использованием соответствующих компонентов в нужном порядке. Однако, не ясно, как именно будет рендериться шаблон поста.
Используйте собственные минифицированные теги, чтобы определенный парсер мог воссоздавать нужные блоки с помощью компонентов, которые могут быть динамическими. Это решение предлагалось 20 лет назад с помощью технологий XML/XSLT/XPath. Языки C#/dotNet, Java и многие другие поддерживают этот стек. Есть также более простые вещи, такие как шаблонизаторы Velocity и FreeMarker, которые могут немного изменить подход, но могут также быть рассмотрены. Хранение HTML-кода в столбце поста кажется нецелесообразным с точки зрения суммарной стоимости владения (TCO), так как база данных всегда будет дороже файловой системы. Самыми дешевыми вариантами будут хранилища типа Amazon S3, MS Blob и G-Drive, которые имеют более низкую стоимость на гигабайт. Если пересчитать стоимость гигабайта, станет понятно, что хранение каждого элемента поста отдельно в базе данных с информацией о его имени, позиции, содержимом и ID поста может быть неоптимальным и вызывает некоторую непонятность. Однако, есть эвристическое правило для дизайна хороших NoSQL систем - все данные для запроса должны находиться рядом физически и не требовать дополнительных действий. Идеальным случаем для отдачи поста будет сделать единственный SELECT без joins, подзапросов, агрегаций и без использования CONNECT-BY.