对于JSON API,选择RethinkDB而不是传统SQL的合适程度如何?

时间:2013-12-15 17:37:48

标签: python sql database nosql rethinkdb

我正在构建我的网络应用程序的后端;它将作为前端的API,它将用Python编写(确切地说是Flask)。

在做出有关设计和实施的决定后,我进入了数据库部分。我开始考虑NoSQL数据存储是否比传统的SQL数据库更适合我的项目。以下是一个基本的功能描述,应该由数据库处理,然后我可以提出一个关于我应该选择哪种类型的存储的优缺点列表。最后说一下为什么我考虑过RethinkDB而不是其他NoSQL数据存储。

API的基本功能

API只包含几个模型:ArtistSongSuggestionUserUserArtists

我希望能够添加User一些关联数据,并将一些Artist链接到它。我想根据请求将Song添加到Artist,并为Suggestion生成User,其中包含ArtistSong {1}}。

最重要的部分之一可能是Artist定期链接到User s(以及Artist s也可以从系统中删除 - 因此来自{{ 1}}也是 - 如果他们不满足某些标准)。 User也会动态添加到Song。所有这些意味着Artist没有固定的User个集合,Artist也没有固定的Artist个集合 - 它们将是不断更新。

赞成

for NoSQL

  • 灵活的架构,因为不是每个Song都会有一个FacebookID或Artist一个SoundcloudID;
  • 虽然是JSON API,但我相信我会受益于记录存储为JSON的事实;
  • 我相信Song s的数量,尤其是Song s的数量会增加很多,因此NoSQL会在这里做得更好;

for SQL

  • 固定模式可以派上用场模型之间的关系;
  • Flask支持SQLAlchemy,这对定义模型很有帮助;

缺点

for NoSQL

  • 关系更难实现,更新模型事务就像一些代码;
  • Flask没有任何包装器或模块来缓解问题,因此我需要实现某种包装器,以帮助我在进行数据库操作时使代码更具可读性;
  • 我不确定如何存储我的记录,尤其是Suggestion s

for SQL

  • 操作很笨重,我必须定义模式,检查列是否有默认值,分配默认值,验证数据,开始/提交事务 - 我认为对于像API这样简单的事情来说太麻烦了;

为什么选择RethinkDB?

由于以下原因,我已经考虑过RehinkDB为我的API实现NoSQL的可能实现:

  • 它看起来比其他解决方案更简单,更轻巧;
  • 它具有本机Python支持,这是一个很大的优势;
  • 它实现了表连接和其他可以在我的API中派上用场的东西,它在模型之间有一些关系;
  • 这是相当新的,我看到社区有很多暗示和爱。还有意愿不断添加利用数据库交互的新东西。

所有这些都在考虑之中,我很高兴听到有关NoSQL或SQL是否更适合我的需求的任何建议,以及这两者的任何其他赞成,当然还有一些关于我避开的事情的更正没说好。

1 个答案:

答案 0 :(得分:14)

我在RethinkDB工作,但这是我作为网络开发人员的公正回答(至少我没有偏见)。

  • 从开发人员的角度来看,灵活的架构很不错(在您的情况下)。就像你说的那样,使用像PostgreSQL这样的东西,你必须格式化你从第三方(SoundCloud,Facebook等)提取的所有数据。虽然这不是很难做到的事情,但这并不是一件令人愉快的事情。

  • 能够加入表格对我来说是一种自然的做事方式(比如用户/用户艺术家/艺术家)。虽然您可以拥有一个用户将包含艺术家的结构,但当您需要检索艺术家以及每个用户列表时,使用它将会很不愉快。

第一点是NoSQL数据库中常见的东西,而JOIN操作更像是SQL数据库。 你可以看到RethinkDB是每个世界中最好的东西。

我相信使用RethinkDB进行开发既简单,快速又愉快,而这正是我作为Web开发人员所期待的。

但是有一件事你可能需要而且RethinkDB没有提供,这就是交易。如果您需要对多个表(或文档 - 如果您必须在用户之间转移资金)进行原子更新,那么使用PostgreSQL之类的东西肯定会更好。如果您只需要对多个表进行更新,RethinkDB可以处理它。

就像你说的那样,虽然RethinkDB是新的,社区是惊人的,我们 - 在RethinkDB - 关心我们的用户。

如果您有更多问题,我很乐意回答:)