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

 xaony23625 发布于 2023-02-10 12:29

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

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

API的基本功能

API包含只有少数车型:Artist,Song,Suggestion,UserUserArtists.

我希望能够添加User一些关联数据并将其链接Artist到它.我想根据请求添加Songs Artist,并生成一个Suggestionfor User,其中包含一个Artist和一个Song.

也许最重要的部分之一是Artists将定期链接到Users(并且Artists也可以从系统中删除 - 因此也可以从s中删除User- 如果它们不满足某些标准).Songs也将动态添加到Artists.所有这些意味着Users没有固定的Artists组,也没有Artist固定的Songs组 - 它们将不断更新.

优点

对于NoSQL:

灵活的架构,因为不是每个Artist都有FacebookID或SongSoundcloudID;

虽然是JSON API,但我相信我会受益于记录存储为JSON的事实;

我相信Songs 的数量,但特别是Suggestions会提高很多,因此NoSQL会在这里做得更好;

对于SQL:

它固定的模式可以派上用场模型之间的关系;

Flask支持SQLAlchemy,它非常有助于定义模型;

缺点

对于NoSQL:

关系更难实现,更新模型事务就像涉及一些代码;

Flask没有任何包装器或模块来简化操作,因此我需要实现某种包装器,以帮助我在进行数据库操作时使代码更具可读性;

我不知道如何存储我的记录,特别是UserArtists

对于SQL:

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

为什么选择RethinkDB?

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

它看起来比其他解决方案更简单,更轻巧;

它具有本机Python支持,这是一个很大的优势;

它实现了表连接和其他可以在我的API中派上用场的东西,它在模型之间有一些关系;

这是一个新的,我看到社区有很多暗示和爱.还有意愿不断添加利用数据库交互的新东西.

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

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

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

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

    第一点是NoSQL数据库中常见的东西,而JOIN操作更像是SQL数据库.您可以将RethinkDB视为提供每个世界最佳的东西.

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

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

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

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

    2023-02-10 12:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有