我正在为我的网络应用程序构建后端;它将充当前端的 API,并将用 Python(准确地说是 Flask)编写。
在对设计和实现做出一些决定之后,我进入了数据库部分。我开始思考 NoSQL 数据存储是否可能比传统的 SQL 数据库更适合我的项目。以下是应该由数据库处理的基本功能描述,然后是我可以提出的关于我应该选择哪种类型的存储的优缺点列表。最后说说我为什么考虑使用 RethinkDB 而不是其他 NoSQL 数据存储。
API 的基本功能
API 仅包含几个模型:Artist
、Song
、Suggestion
和。User
UserArtists
我希望能够添加User
带有一些关联数据的 a 并将一些Artist
s 链接到它。我想根据要求将Song
s 添加到Artist
s 中,并Suggestion
为 a生成 a User
,其中将包含 anArtist
和 a Song
。
也许最重要的部分之一是Artist
s 将定期链接到User
s (并且Artist
s 也可以从系统中删除 - 因此也可以从 s 中删除User
- 如果它们不满足某些标准)。Song
s 也将被动态添加到Artist
s。这意味着User
s 没有固定的 s 集合,Artist
s 也没有Artist
固定的 s 集合Song
——它们将不断更新。
优点
对于 NoSQL:
- 灵活的模式,因为不是每个
Artist
人都有 FacebookID 或Song
SoundcloudID; - 虽然是 JSON API,但我相信我会从记录存储为 JSON 的事实中受益;
- 我相信 s 的数量
Song
,尤其是Suggestion
s 的数量会增加很多,因此 NoSQL 会在这里做得更好;
对于 SQL:
- 它的固定模式可能对模型之间的关系派上用场;
- Flask 支持 SQLAlchemy,这对定义模型很有帮助;
缺点
对于 NoSQL:
- 关系更难实现,更新模型类似于事务涉及一些代码;
- Flask 没有任何包装器或模块来简化事情,因此我需要实现某种包装器来帮助我在执行数据库操作时使代码更具可读性;
- 我不确定应该如何存储我的记录,尤其是
UserArtist
s
对于 SQL:
- 操作很庞大,我必须定义模式,检查列是否有默认值,分配默认值,验证数据,开始/提交事务——我相信对于像 API 这样简单的东西来说太麻烦了;
为什么要重新思考数据库?
我考虑过 RehinkDB 可能为我的 API 实现 NoSQL,原因如下:
- 它看起来比其他解决方案更简单、更轻量;
- 它具有原生 Python 支持,这是一大优势;
- 它实现了表连接和其他可以在我的 API 中派上用场的东西,这在模型之间有一些关系;
- 这是相当新的,我看到了社区的很多暗示和爱。还有意愿不断添加利用数据库交互的新事物。
考虑到所有这些,我很高兴听到关于 NoSQL 或 SQL 是否更适合我的需求的任何建议,以及对这两者的任何其他赞成/反对意见,当然,还有对我没有说明的事情的一些更正适当地。