我将在Rails中构建我的第一个真实项目,该项目包含一个由3个主要部分组成的网络应用程序:
- 不使用数据库的静态部分
- 用户注册部分将需要一个数据库,我可以使用MySQL,因为每个用户的行将具有相同的字段
- 用户可以在其中创建,组织,编辑...项目的“应用”,并与其他用户共享
将有几种项目类型,每种类型都有不同的选项,例如,我可能有带有以下选项的“视频”项目:
- ID
- 用户身份
- collection_id
- 标题
- 平台(如果嵌入式)
- 网址(如果已嵌入)
- 文件名(如果托管在我的应用程序中)
- 文件大小(我的应用程序上托管的ID)
和“地图”项:
- ID
- 用户身份
- collection_id
- 标题
- 平台(谷歌地图,必应地图...)
- 位置
- 网址
- 地图尺寸
对于用户,我可能会使用MySQL作为项目,因此MongoDB的灵活性可能会很有用,因为每个项目可能需要与另一个项目不同的选项
到目前为止,我一直使用PHP和MySQL(始终在小型项目的共享主机上使用),而可扩展性对我来说是一个全新的词。
我有时间学习,但我希望能够在1个月内完成一些具体的工作。
我已经阅读了很多有关MongoDB和NoSQL以及RDMS和MySQL的文章,尝试之后,我不得不说我喜欢MongoDB的工作方式:没有表,没有行以及它的文档JSON像这样:
- 在我的情况下,您会推荐什么?为什么?
- 关于可伸缩性,MongoDB可能存在问题?如果是的话(以数据库大小计),是否会出现这些问题,从而使我的应用程序速度大大降低?
编辑:应用程序将如何工作
由于许多人问这是我希望该应用程序如何工作:
- 用户注册
- 他已登录
- 他创建了自己的第一个收藏系列,可以创建无限的物品
- 项目是各种类型的,每种类型需要在数据库中保存不同的数据,并且可以添加或修改项目的类型
用户可以在其中创建其他集合和项目。
因此,对于集合及其内部的项目,我们都有CRUD,每个集合/项目都针对特定的用户
MySQL的主要问题是它没有灵活的架构,有办法解决这个问题(解决方法?)?
考虑NoSQL时,我唯一的疑问就是联接,例如,鉴于某个特定的选择,我想检索与集合中id = user_id的User相关的数据
编辑:继续使用MySQL的想法
在“项目”表中创建带有可选设置的字段,每个设置均用|分隔。或其他符号。
然后,我将在某处保存每个项目的可选设置的结构,例如,“ notes”项目类型需要两个可选设置“ colour”和“ strange_setting”,当我从MySQL获取数据时,我会将可选设置的字段拆分为一个知道数组中的第一项是用于“颜色”的,依此类推。
你怎么看?该解决方案有问题吗?你还有其他想法吗?