我正在构建我的网络应用程序的后端;它将作为前端的API,它将用Python编写(确切地说是Flask)。
在做出有关设计和实施的决定后,我进入了数据库部分。我开始考虑NoSQL数据存储是否比传统的SQL数据库更适合我的项目。以下是一个基本的功能描述,应该由数据库处理,然后我可以提出一个关于我应该选择哪种类型的存储的优缺点列表。最后说一下为什么我考虑过RethinkDB而不是其他NoSQL数据存储。
API的基本功能
API只包含几个模型:Artist
,Song
,Suggestion
,User
和UserArtists
。
我希望能够添加User
一些关联数据,并将一些Artist
链接到它。我想根据请求将Song
添加到Artist
,并为Suggestion
生成User
,其中包含Artist
和Song
{1}}。
最重要的部分之一可能是Artist
定期链接到User
s(以及Artist
s也可以从系统中删除 - 因此来自{{ 1}}也是 - 如果他们不满足某些标准)。 User
也会动态添加到Song
。所有这些意味着Artist
没有固定的User
个集合,Artist
也没有固定的Artist
个集合 - 它们将是不断更新。
赞成
for NoSQL :
Song
都会有一个FacebookID或Artist
一个SoundcloudID; Song
s的数量,尤其是Song
s的数量会增加很多,因此NoSQL会在这里做得更好; for SQL :
缺点
for NoSQL :
Suggestion
s for SQL :
为什么选择RethinkDB?
由于以下原因,我已经考虑过RehinkDB为我的API实现NoSQL的可能实现:
所有这些都在考虑之中,我很高兴听到有关NoSQL或SQL是否更适合我的需求的任何建议,以及这两者的任何其他赞成,当然还有一些关于我避开的事情的更正没说好。
答案 0 :(得分:14)
我在RethinkDB工作,但这是我作为网络开发人员的公正回答(至少我没有偏见)。
从开发人员的角度来看,灵活的架构很不错(在您的情况下)。就像你说的那样,使用像PostgreSQL这样的东西,你必须格式化你从第三方(SoundCloud,Facebook等)提取的所有数据。虽然这不是很难做到的事情,但这并不是一件令人愉快的事情。
能够加入表格对我来说是一种自然的做事方式(比如用户/用户艺术家/艺术家)。虽然您可以拥有一个用户将包含艺术家的结构,但当您需要检索艺术家以及每个用户列表时,使用它将会很不愉快。
第一点是NoSQL数据库中常见的东西,而JOIN操作更像是SQL数据库。 你可以看到RethinkDB是每个世界中最好的东西。
我相信使用RethinkDB进行开发既简单,快速又愉快,而这正是我作为Web开发人员所期待的。
但是有一件事你可能需要而且RethinkDB没有提供,这就是交易。如果您需要对多个表(或文档 - 如果您必须在用户之间转移资金)进行原子更新,那么使用PostgreSQL之类的东西肯定会更好。如果您只需要对多个表进行更新,RethinkDB可以处理它。
就像你说的那样,虽然RethinkDB是新的,社区是惊人的,我们 - 在RethinkDB - 关心我们的用户。
如果您有更多问题,我很乐意回答:)