Ви повинні використовувати вбудовані документи, якщо це статичні документи або їх не більше кількох сотень через вплив на продуктивність. Я певний час займався цим питанням. Нещодавно Ася Камська, яка працює архітектором рішень для MongoDB, написала статтю про "використання піддокументів".
Я сподіваюся, що це допоможе тому, хто шукає рішення чи найкращу практику.
Перш за все, ми повинні врахувати, чому ми хотіли б зробити таке. Зазвичай я радив би людям вставляти речі, які вони завжди хочуть повернути, коли вони отримують цей документ. Зворотний бік цього полягає в тому, що ви не хочете вставляти речі в документ, які ви не хочете повертати назад.
Якщо ви вбудовуєте активність, яку я виконую в документ, спочатку вона буде чудово працювати, тому що вся моя активність знаходиться саме там, і за допомогою одного читання ви зможете отримати все, що ви можете мені показати: "Ви нещодавно натиснули на це і тут ваші останні два коментарі ", але що відбувається через півроку, і мені все одно, що я робив давно, і ти не хочеш їх показувати мені, якщо я спеціально не шукаю старого заняття?
По-перше, ви в кінцевому підсумку повернете все більший і більший документ і піклуєтеся про меншу і меншу його частину. Але ви можете використовувати проекцію лише для повернення частини масиву, справжня біль полягає в тому, що документ на диску стане більшим, і він все ще буде прочитаний, навіть якщо ви збираєтеся лише повернути частину його кінцевому користувачеві, але оскільки моя діяльність не припинятиметься, поки я активна, документ продовжуватиме зростати та зростати.
Найбільш очевидна проблема з цим - це врешті-решт ви досягнете ліміту документа в 16МБ, але це зовсім не те, про що ви повинні турбуватися. Документ, який постійно зростає, матиме все більшу і більшу вартість щоразу, коли йому доведеться переїхати на диск, і навіть якщо ви вживатимете заходи щодо пом’якшення наслідків фрагментації, ваші записи будуть загалом непотрібними, впливаючи на загальну ефективність всієї вашої програми.
Є ще одне, що ви можете зробити, що повністю знищить продуктивність вашої програми, і це проіндексувати цей постійно зростаючий масив. Це означає, що щоразу, коли документ із цим масивом переміщується, кількість записів індексу, які потрібно оновити, прямо пропорційна кількості індексованих значень у цьому документі, і чим більший масив, тим більшим буде це число бути.
Я не хочу, щоб це лякало вас від використання масивів, коли вони добре підходять для моделі даних - вони є потужною особливістю моделі даних бази даних документів, але, як і всі потужні інструменти, її потрібно використовувати в правильних обставинах і його слід використовувати обережно.