Баланс, который я нашел, использует SQL в качестве нормализованной базы данных и Mongo в качестве денормализованной копии. Я использую ESB, чтобы держать их в синхронизации друг с другом. Я использую концепцию, которую я называю «подготовленные документы» и «хранимые документы». Сохраненные документы - это данные, которые хранятся только в монго. Полезно для данных, которые не являются реляционными. Подготовленные документы содержат данные, которые могут быть восстановлены с использованием данных в нормализованной базе данных. Они действуют как живые кэши в некотором смысле - их можно восстановить с нуля, если данные когда-либо не синхронизируются (в сложных документах это дорогостоящий процесс, поскольку эти документы требуют много запросов для перестройки). Они также могут обновляться по одному полю за раз. Это где служебная шина входит. Она отвечает на события, отправленные после обновления нормализованной базы данных, а затем обновляет соответствующие документы, подготовленные монго.
Используйте каждую базу данных в своих сильных сторонах. Разрешить SQL быть базой данных записи, которая обеспечивает целостность данных. Пусть Mongo будет базой данных только для чтения, которая работает быстро и может содержать вложенные документы, так что вам нужно меньше запросов.
** РЕДАКТИРОВАТЬ **
Я просто перечитал ваш вопрос и понял, что вы на самом деле просили. Я оставляю свой первоначальный ответ на случай, если он вообще пригодится.
То, как я бы обработал приведенный вами пример Stackoverflow, - это сохранение идентификатора пользователя в каждом комментарии. Вы загрузите пост, в котором будут все комментарии. Это один запрос.
Затем вы просмотрите данные комментария и извлечете массив идентификаторов пользователей, которые вам нужно загрузить. Затем загрузите их как пакетный запрос (используя оператор запроса Q.In ()). Это всего два запроса. Затем вам нужно будет объединить данные в окончательную форму. Необходимо соблюдать баланс между тем, когда это нужно делать, и тем, когда нужно использовать что-то вроде ESB для обновления каждого документа вручную. Используйте то, что лучше всего подходит для каждого отдельного сценария вашей структуры данных.