@LittleJonny

Как хранить переписку VK в мобильном приложении?

Доброе время суток, сообщество!
Дома, в свободное время, я разрабатываю нативное приложение для ВК, которого нету в моей мобильной ОС (Sailfish OS). И у меня возникли некоторые сомнения каким образом сохранять переписку ВК для клиентского приложения. БД - SqLite.
Все данные приходят в json формате, и я думал их просто распарсить и добавлять в таблицу. И после записи в БД ,показывать переписку пользователю по запросу sql. Но, помимо самого сообщения и его атрибутов могут прийти пересланные сообщения, прикрепления и геометка, которые в json,е представляются в виде объектов. Думал создать для каждого такого объекта соответствующие таблицы, а таблице сообщений хранить только набор id на соответствующие записи. В БД создать 4 таблицы - Messages,Geotags,Attachments,FWD_Messages

Алгоритм работы предполагал таким:
1) запрос в вк на сообщения
2) парсинг json,a и запись в БД
3) получение сообщений из БД и вывод на экран пользователю.

Также данные об изменении статуса сообщений(особенно при активной переписке) поступают через longpoll запросы, что требует редактирования полей данных в сообщении.

Подскажите как правильно построить БД?
  • Вопрос задан
  • 604 просмотра
Решения вопроса 1
ychuperka
@ychuperka
Разработчик ПО
Я думаю, что в принципе концепция, которую ты выбрал - верна.
Т.е. имеем следующие таблицы БД: messages, geo_tags, attachments
Строки в geo_tags и attachments привязаны к строкам в messages, т.е. в таблице attachments у тебя есть столбец message_id, я думаю тут понятно. Хранить "вложенные" сообщения отдельно - это не правильно, их все нужно хранить в одной таблице, а между ними должны быть отношения предок -> потомок, у одного предка может быть сколько угодно потомков. Если ВК позволяет иметь несколько уровней вложенности сообщений (т.е. внутри вложенных могут быть другие вложенные и т.д.), то тут главное не делать рекурсий, нужно применить паттерн хранения таких отношений, например вот удачный паттерн https://www.percona.com/blog/2011/02/14/moving-sub...
Обязательно проставь индексы и составные индексы исходя из логики твоего кода, это ускорит выборку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы