Вот проблема. Мы работаем с MongoDB-PHP.
В нашем приложении у нас есть много групп пользователей, где пользователи могут создавать сообщения. В настоящее время мы поддерживаем отправку сообщений этими группами в документе этой группы в формате массива. Итак, когда нам нужно захватить первые 10 сообщений, мы можем захватить их из массива с помощью операции среза.
Например: случай 1
сбор сообщений: // в этой коллекции хранятся все сообщения различных групп
{ {"_id":"1","post_text":"....",...} {"_id":"2","post_text":"....",...} } `
группы коллекции: // эта коллекция содержит документы для каждой группы
{ { "_id":"1" "name":"Group ABC", "post_ids":{"1","2"...."100"} //1,2..100 represents MongoIDs of corresponding posts of this group //so i can slice first 10 posts of this group when someone visits this page } }
`
В отличие от хранения этих идентификаторов сообщений в документе группы , если мы используем индексирование на идентификаторе группы и сохраняем это в коллекции сообщений.
Например: Случай 2
сборники
{ {"_id":"1","group_id":"1","post_text":"....",...} {"_id":"2","group_id":"2","post_text":"....",...} }
Также обратите внимание, что в случае 1 нам не нужно применять какие-либо операции сортировки по мере того, как элементы массива подталкиваются, в то время как в случае 2 нам придется применять сортировку (по критерию временной метки) после операции поиска, которая будет считывать все документы из памяти и затем примените сортировку по ним.
Чья производительность была бы лучше с учетом того, что индексы будут храниться в ОЗУ?
Пожалуйста, дайте мне знать, если вопрос не ясен из этого вопроса.