Я строю простую систему личных сообщений для большого сайта nosql, и я думаю о дизайне стола. Количество чтений, вероятно, равно (или вдвое) количеству записей, но для чтения нужны все (последние) сообщения.Как создать простую, но масштабируемую систему личных сообщений (nosql)?
- Моя первая мысль была сделать таблицу
threads
(столбцы: ThreadId, user1, user2), и таблицаmessages
(столбцы: MESSAGEID, ThreadId, MessageText). Однако некоторые симуляции показывают, что индексmessages
не поместится в ОЗУ. - Моя следующая мысль заключалась в том, чтобы сделать только одну таблицу
threads
(столбцы: user1, user2, contents) и обновить столбецcontents
каждый раз, когда кто-то отвечает в разговоре (используя$push
на массиве). Это медленнее, чем вставка, тем более, что длина этого текстового поля растет при каждом ответе.
Является ли моя вторая мысль правильным способом справиться с этой ситуацией? Или есть более эффективный способ добавления небольших текстов в большие тексты? В настоящее время я использую mongodb, но хочу изменить, если это необходимо.
Блестящий, спасибо! Основываясь на этом предположении, я думаю, что я буду использовать следующий вариант: таблицу 'recent_posts', которая будет использоваться как в методе 1, таблица' threads' для использования, как в методе 2, и каждые 24 часа (ночью) я очищаю recent_posts и добавьте их в поля накопления в таблице протектора. – user1111929