Должен ли я использовать много коллекций, чтобы помочь структурировать мои данные в MongoDB? - PullRequest
0 голосов
/ 20 октября 2019

Я делаю приложение, синхронизируемое с сервером, с NodeJS и использую MongoDB. У меня есть все мои супер реляционные данные в MySQL. Но для пользователей Ежедневных мемуаров я собираюсь использовать Mongo, потому что, как вы, возможно, поняли, будет куча заметок / дневников, и я хочу изучить MongoDB, и это должно быть намного лучше для многих нереляционныхdata.

Я научился создавать БД и делать все, но что-то, что не рассматриваются во всех уроках, является самым важным из всего, как мне структурировать мои данные?

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

Заранее спасибо за ваше время и любыеhelp!

Пример 1. В моей базе данных есть одна ОГРОМНАЯ коллекция под названием «Дни», и каждая запись в этой коллекции выглядит следующим образом: (Извините, но как бы я ни думал об этом, это звучит какнаименее производительный вариант, как я уже сказал, я неопытный в Монго и могу ошибаться.)

{
userID: 902, //This user ID will be fetched from MySQL when authenticating users request. From what ive read, I need to run a command similar to this: “db.posts.createIndex( { author_name : 1 } )”, on this collection to somehow optimize performance?

//What day? No, I wont use Date for this, because then id have to turn my JSON Query data to Date before querying (Maybe I wouldnt have to, as Mongo may store it as string anyway). BUT, I am not sure whether i should use 3 separate Integer fields, or one string field. Which would be faster? (EDIT: I know three separate fields with int will be WAY faster, as my application also has to query data for one month, etc. MAYBE Im wrong, and this is bad practice, let me know.)

day: 12,

month: 5,

year: 2018,

//Actual stored data:

dayTitle: “Lame day at home..”,

dayDescription: “Installed arch..”,

hugeLoadOfIndividualSmallNotesForThisDayWithTimeStamps: [

    { data: “Woke up, start now”, time: “9:44”,

    { data: “Finally figured out what fdisk is”, time: “21:29” } } …

]
}

Пример 2. Моя база данных содержит коллекциюдля каждого пользователя, которого называют его userID (Это звучит ОЧЕНЬ хорошо и организовано для меня, и, исходя из здравого смысла, это будет звучать как наиболее производительный, но, как мне показалось, люди сказали, что это не будет хорошо, и это ТОЧНОпочему я спрашиваю здесь), и каждая запись в этой коллекции выглядит следующим образом:

{
day: 12,

month: 5,

year: 2018,

dayTitle: “Lame day at home..”,

dayDescription: “Installed arch..”,

hugeLoadOfIndividualSmallNotesForThisDayWithTimeStamps: [

    { data: “Woke up, start now”, time: “9:44”,

    { data: “Finally figured out what fdisk is”, time: “21:29” } } …

]
}

Пример 3: В моей базе данных есть коллекция на каждый день. (Это в основном то же самое, что и в примере 2, но будет меньше сборов. Я очень не уверен, будет ли это лучше, чем в варианте 2, а также это будет ВИД, сложнее реализовать из-за смены дней и т. Д.), Икаждая запись в этой коллекции выглядит так:

{
userID: 902,

dayTitle: “Lame day at home..”,

dayDescription: “Installed arch..”,

hugeLoadOfIndividualSmallNotesForThisDayWithTimeStamps: [

    { data: “Woke up, start now”, time: “9:44”,

    { data: “Finally figured out what fdisk is”, time: “21:29” } } …

]
}

Как уже было сказано, заранее спасибо, ребята!

1 Ответ

1 голос
/ 20 октября 2019

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

Я склонен использовать коллекции для группировки наборов данных в одном проекте, нокоторые имеют разные структуры данных.

Если бы вы разбили дни или пользователей на разные коллекции, как бы это масштабировалось? Если вы хотите запросить весь текст за все дни, хотите ли вы подключиться к нескольким тысячам разных коллекций, если ваше приложение использовалось в течение десяти лет? Попробуйте написать несколько тестовых примеров для разных пользовательских процессов и понять, как легко было бы написать запросы, чтобы получить им свои данные.

TLDR: Вероятно, лучше всего хранить вещи в одной коллекции и использовать индексы для сортировки.

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