Подключение к базе данных в Singletone

У меня многопользовательская поддержка server который основан на qxmpp библиотека написана на Qt и расширены путем наследования QXmppServerExtension, Итак, мой вопрос: Considering multi-user support in my server, whether it's safe or not to use a Singletone class for database connection and holding a connection for QSqlQuery? Так как все расширения, которые работают через базу данных, используют его соответственно.

1 ответ

Решение

Вы можете прочитать больше о синглетах в целом, почему они считаются плохими во многих случаях:

Что такого плохого в синглетонах?

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

Основываясь на обсуждении, всегда лучше убедиться, что у вас есть какой-то эталонный тест, когда разница в сложности не очевидна. В вашем особом случае, с дополнительной 216 КБ памяти для около 1000 клиентов, вы получите около 250 МБ дополнительной памяти.

Я немного округлю это число на всякий случай. Это никоим образом не сравнимо с емкостью вашего сервера, которая составляет около 16 ГБ. Если у вас есть другие службы, требующие памяти, они, вероятно, будут более обидным местом для поиска оптимизации.

При этом, если вы хотите использовать синглтоны, вы можете реализовать это поверх макросов Q_GLOBAL_STATIC или Q_GLOBAL_STATIC_WITH_ARGS в Qt. Обратите внимание, что это также было публично в Qt 4, хотя и недокументировано. Насколько я знаю, в Qt 4 он не имел надлежащей безопасности потоков, хотя в Qt 5 он был значительно улучшен.

Другие вопросы по тегам