© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
25 мая 2018 г. 13:42

БД для хранения истории сообщений

qt, база данных, бд, c++, sqlite, PostgreSQL, чат

Добрый день. Пишу чат на qt. Нужно сделать так, чтобы при нажатии на определенного пользователя подгружалась история переписки с ним. Возникло несколько вопросов. Какую бд посоветуете для хранения сообщений? Я пока остановился на sqlite или postgresql. И как можно сделать так, чтобы более старые сообщения подгружались по мере необходимости, ведь если переписка будет огромная и будет подтягивать сразу целиком, то будут проблемы с производительностью. Буду признателен за помощь.

Добрый день!


Для серверной части используйте postresql, если планируете и сервер писать для вашего чата.
Для кеширования сообщения в клиенте используйте однозначно sqlite. Использовать для клиента postgresql - это неправильно.

Что касается подгрузки, то здесь нужно отталкиваться от даты последнего сообщения, либо отталкиваться от ID (который должен быть уникальным для каждого сообщения).

Примерный мехнизм может быть такой. Если вы используете для отображения сообщений что-нибудь наподобие QListView, то у него можно использовать изменение значений вертиклаьного скроллбара. Если значения изменились до крайних, например до 0, то нужно проверить ID, самого старого сообщения в списке и попытаться подгрузить например ещё 50, которые ещё старше.

Для Django рекомендую VDS-хостинг TIMEWEB

Спасибо за ответ, я с чатом раньше дела не имел, разъясните пару моментов? Получается на сервере будет postgre, где должна быть вся информация о пользователях (логин, пароль, имя, дата рождения к примеру). А на клиенте будет sqlite, где будет храниться именно переписка с пользователями?

Если вы делаете чат с клиент-серверной архитектурой, то да, на этом самом сервере имеет смысл использовать postresql, но поначалу можно использовать SQLite для тестирования и т.д. Подключить postgresql на серверное приложение труда не составит. По сути сервер может даже быть написан на чём-то ином, а не на Qt.

У клиентских приложений можно использовать базу данных для кеширования сообщений, чтобы каждый раз не грузить все сообщения с сервера.

Это означает, что на сервере может храниться абсолютно вся переписка, а на sqlite у клиента дублированная переписка как кеш, в данном случае пользователь может запрашивать сообения сначала из кеша, а потом догружать то, чего у него нет из сервера.

Получается такой классический вариант клиент-серверного чата.

Для Django рекомендую VDS-хостинг TIMEWEB

Понял, спасибо)

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
24 сентября 2018 г. 17:42
edorofeeva

C++ - Тест 001. Первая программа и типы данных

  • Результат 100баллов,
  • Очки рейтинга10
24 сентября 2018 г. 17:37
edorofeeva

C++ - Тест 001. Первая программа и типы данных

  • Результат 66баллов,
  • Очки рейтинга-1
23 сентября 2018 г. 14:38
No Names

C++ - Тест 001. Первая программа и типы данных

  • Результат 60баллов,
  • Очки рейтинга-1
Последние комментарии
25 сентября 2018 г. 15:24
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Это запись метода которая работает параллельно с БД, данные из парсера поступают в БД и в наш метод одновременно
25 сентября 2018 г. 14:56
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Как можно динамически отображать данные в таблице? На COM-порт непрерывно приходят данные, я их принимаю сохраняю в БД, а после остановка приема/передачи данные отображаются в таблице. В табли...
25 сентября 2018 г. 10:43
Евгений Легоцкой

Qt/C++ - Урок 017. QGraphicsScene или как работать с графикой в Qt

Прямо так не написано. Хотя соглашусь, что в качестве улучшения вызов данного метода здесь к месту.
25 сентября 2018 г. 10:37
reef425

Qt/C++ - Урок 017. QGraphicsScene или как работать с графикой в Qt

В статье написано, что таймер сработает один раз. Но это не так. Было бы хорошо добавить timer->setSingleShot(true); После инициализации таймера.
24 сентября 2018 г. 15:09
Евгений Легоцкой

Qt Linux - Урок 001. Автозапуск Qt приложения под Linux

А вот здесь у меня есть пример использования supervisor. https://evileg.com/ru/post/3/ Вся статья вам там не интересна, интересен только шаг с настройкой supervisor. Он получается ...
Сейчас обсуждают на форуме
25 сентября 2018 г. 15:57
Евгений_Канусовский@1981

Чтение файлов в python

Вот код: import sys from re import matchfrom vira import *from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtWidgets import (QDialog, QFileDialog, QMessageBox, QLineEdit, QProgr...
25 сентября 2018 г. 13:51
DmitrySD

Трансляция видео с помощью VLC по RTP

Спасибо! Данная команда не дала результата. В итоге сделал трансляцию через ffmpeg. ffmpeg.exe -f gdigrab -framerate 30 -i desktop -vcodec libx264 -preset:v veryfast -b:v 4000k -f...
25 сентября 2018 г. 13:39
Arrow

Настройка Qt Creator для Android

Конечно отпишусь.
25 сентября 2018 г. 12:22
avovana

Автозапуск и авторестарт Qt Gui Application в Linux

Не получается... Решил пробовать скрипт, выполняемый при загрузке. В скрипте вечный цикл по старту программы.
Присоединяйтесь к нам в социальных сетях