Я збираюся побудувати свій перший реальний проект у Rails, який складається з веб-додатку, який складається з 3 основних частин:
- Статична частина, де не використовується база даних
- Частина реєстрації користувача, яка потребує бази даних, і я можу використовувати MySQL, оскільки кожен рядок користувача матиме однакові поля
- "Додаток", де користувачі зможуть створювати, упорядковувати, редагувати ... елементи у колекціях та ділитися ними з іншими користувачами
Буде кілька типів предметів, і кожен з них матиме різні варіанти, наприклад, у мене можуть бути "відео" елементи з такими параметрами:
- ід
- ідентифікатор користувача
- collection_id
- назва
- платформа (якщо вбудована)
- URL (якщо він вбудований)
- ім'я файлу (якщо він розміщений у моєму додатку)
- розмір файлу (ідентифікатор, розміщений у моїй програмі)
та "карта" елементів:
- ід
- ідентифікатор користувача
- collection_id
- назва
- платформа (google maps, bing maps ...)
- Розташування
- URL
- розмір карти
Як ви можете, тоді як для користувачів я можу використовувати MySQL для елементів, гнучкість MongoDB може бути корисною, оскільки для кожного елемента можуть знадобитися різні параметри, аніж іншого.
До цих пір я завжди використовував PHP та MySQL (завжди на спільному хостингу для невеликих проектів), і масштабованість - це абсолютно нове слово для мене.
У мене є час вчитися, але я хотів би мати можливість зробити щось конкретне за щось на зразок 1 місяця.
Я багато читав про MongoDB і NoSQL vs RDMS і MySQL, і після його спробу я мушу сказати, що мені подобається, як працює MongoDB: немає таблиць, жодних рядків та його документів JSON так:
- Що в моїй ситуації, що ти би ратував? чому?
- З приводу масштабованості можуть виникнути проблеми з MongoDB? якщо так, коли (з точки зору розміру БД) і чи можуть ці проблеми значно сповільнити додаток?
Редагувати: як програма працюватиме
Оскільки багато хто запитує, як би я хотів, щоб програма працювала:
- Користувач підписується
- Він увійшов до системи
- Він створив свою першу колекцію iside, яку він може створити нескінченно
- Елементи мають різний тип, і для кожного типу потрібні різні дані для збереження в базі даних, а тип елементів може бути доданий або змінений
Користувачі можуть створювати інші колекції та предмети всередині нього.
Таким чином, у нас є CRUD для колекцій та предметів всередині них, і кожна колекція / елемент передається конкретному користувачеві
Основна проблема MySQL полягає в тому, що вона не має гнучкої схеми, є спосіб вирішити це (вирішення?)?
Думаючи про NoSQL, у мене є єдиний сумнів щодо приєднання, наприклад, з урахуванням певного вибору, я хочу отримати дані, пов'язані з Користувачем, у колекції поле id = user_id
EDIT: Ідея продовжувати використовувати MySQL
Створіть поле в таблиці "елементи" з необов'язковими налаштуваннями, кожне налаштування поділене на | або інший символ.
Тоді я десь збережу структуру кожного елемента, необов'язкові параметри, наприклад, типу елемента "нотатки" потрібні два необов'язкові налаштування "колір" і "дивне_настройка", коли я отримаю дані з MySQL, я розділю поле для необов'язкових параметрів на масив знаючи, що перший елемент у масиві призначений для "кольору" тощо.
Як ти гадаєш? є проблеми з цим рішенням? у вас є інші ідеї?