Voy a construir mi primer proyecto real en Rails que consiste en una aplicación web compuesta de 3 partes principales:
- La parte estática donde no se utiliza ninguna base de datos.
- La parte de registro de usuario que requerirá una base de datos y puedo usar MySQL ya que la fila de cada usuario tendrá los mismos campos
- La "aplicación" donde los usuarios podrán crear, organizar, editar ... elementos en colecciones y compartirlos con otros usuarios
Habrá varios tipos de elementos y cada uno tendrá diferentes opciones, por ejemplo, puedo tener elementos de "video" con las siguientes opciones:
- carné de identidad
- ID_usuario
- colección_id
- título
- plataforma (si está integrada)
- url (si está incrustado)
- nombre de archivo (si está alojado en mi aplicación)
- tamaño de archivo (ID alojado en mi aplicación)
y elementos de "mapa":
- carné de identidad
- ID_usuario
- colección_id
- título
- plataforma (google maps, bing maps ...)
- ubicación
- url
- Tamaño de mapa
Como puede, mientras que para los usuarios puedo usar MySQL para los elementos, la flexibilidad de MongoDB puede ser útil ya que cada elemento puede necesitar diferentes opciones que otro elemento
Hasta ahora siempre he usado PHP y MySQL (siempre en hosting compartido para pequeños proyectos) y la escalabilidad es una palabra totalmente nueva para mí.
Tengo tiempo para aprender, pero me gustaría poder hacer algo concreto en algo así como 1 mes.
He leído mucho sobre MongoDB y NoSQL vs RDMS y MySQL y después de probarlo tengo que decir que me gusta cómo funciona MongoDB: sin tablas, sin filas y sus documentos JSON así:
- En mi situación, ¿qué le recomendarías? ¿por qué?
- ¿Sobre la escalabilidad puede haber problemas con MongoDB? En caso afirmativo, ¿cuándo (en términos de tamaño de base de datos) y estos problemas pueden ralentizar mi aplicación considerablemente?
Editar: cómo funcionará la aplicación
Como muchos preguntaron, así es como me gustaría que funcionara la aplicación:
- Un usuario se registra
- Ha iniciado sesión
- Creó su primera colección junto con la cual puede crear infinitos artículos.
- Los elementos son de varios tipos y cada tipo necesita datos diferentes para guardarse en la base de datos y el tipo de elementos puede agregarse o modificarse
Los usuarios pueden crear otras colecciones y artículos dentro de él.
Entonces tenemos CRUD para colecciones y artículos dentro de ellos y cada colección / artículo se refiere a un usuario específico
El principal problema con MySQL es que no tiene un esquema flexible, ¿hay alguna forma de resolver esto (una solución?)?
Pensando en NoSQL, la única duda que tengo es acerca de unirse, por ejemplo, dada una cierta colección, quiero recuperar datos relacionados con el usuario con el campo id = user_id en la colección
EDITAR: idea para seguir usando MySQL
Cree un campo en la tabla de "elementos" con configuraciones opcionales, cada configuración dividida por un | u otro símbolo
Luego guardaré en algún lugar una estructura de la configuración opcional de cada elemento, por ejemplo, el tipo de elemento "notes" necesita dos configuraciones opcionales "color" y "strange_setting", cuando obtenga los datos de MySQL dividiré el campo para configuraciones opcionales en un matriz sabiendo que el primer elemento de la matriz es para "color" y así sucesivamente.
¿Qué piensas? ¿Hay algún problema con esa solución? tienes otras ideas