Sql GraphQL数据库设计模式

Sql GraphQL数据库设计模式,sql,database,graphql,nosql,Sql,Database,Graphql,Nosql,我正在研究可用于建立社交网络网站的技术。前端部分已经决定,但我仍然不确定后端。后端也将由运行NodeJS的服务器处理。我计划使用类似MongoDB的东西,甚至是MongoDB和关系数据库的组合,但我不知道最佳实践是什么 我偶然发现了一个关于在不同类型的数据库结构中使用GraphQL的例子。作者提到了SQL、Redis和MongoDB的用户数据,但我不太了解它们的结构,或者它是否适用于我的 基本上,我希望用户注册到我的页面,添加关于自己的描述,交朋友,加入群组,上传媒体(图片和视频),等等。这是一

我正在研究可用于建立社交网络网站的技术。前端部分已经决定,但我仍然不确定后端。后端也将由运行NodeJS的服务器处理。我计划使用类似MongoDB的东西,甚至是MongoDB和关系数据库的组合,但我不知道最佳实践是什么

我偶然发现了一个关于在不同类型的数据库结构中使用GraphQL的例子。作者提到了SQL、Redis和MongoDB的用户数据,但我不太了解它们的结构,或者它是否适用于我的

基本上,我希望用户注册到我的页面,添加关于自己的描述,交朋友,加入群组,上传媒体(图片和视频),等等。这是一个相当基本的社交网络设置,但最终问题缩小到:

“什么样的数据库结构最适合做什么?”

SQL是否应该处理:用户ID、电子邮件、密码
MongoDB:关于、描述、帖子
Redis:缓存类似于posts提要的内容


您将如何处理媒体上传?SQL,MongoDB?我还没有找到任何有用的文章讨论使用不同的数据库结构,大多数其他StackOverflow问题都觉得过时了。他们要么喜欢一个或另一个,而不是一个组合;DR:没有任何特定的数据库“应该用于GraphQL”。只需使用最适合您的数据和需求的数据库即可

我会给你一个大概的想法,我们如何在工作中使用它。我们有一个应用程序,允许用户上传歌曲和视频,供我们分发到数字流媒体平台,如Spotify等

我们使用Postgres来处理应用程序的所有“事务性数据”。这是用户帐户信息、他们的歌曲/视频元数据、汇款地点、应用程序的其他内容等。所有这些数据只有几百MB

多媒体上传到AWS S3,每个文件的位置存储在Postgres中

关于每首歌曲在每个平台上表现如何的“分析数据”,例如每个地区的流数和收入,存储在Google BigQuery中。这些数据多得多,谷歌BigQuery更适合这种规模


当然,应该使用哪种数据存储的问题高度依赖于大小写。GraphQL并没有真正影响这些决策。GraphQL的好处在于,解析器允许您从任何地方提取数据,并将所有数据合并到单个API响应中。通过使用GraphQL,您应该可以轻松地使用各种数据库,每种数据库都根据其处理的数据类型进行了精心定制。

TL;DR:没有任何特定的数据库“应该用于GraphQL”。只需使用最适合您的数据和需求的数据库即可

我会给你一个大概的想法,我们如何在工作中使用它。我们有一个应用程序,允许用户上传歌曲和视频,供我们分发到数字流媒体平台,如Spotify等

我们使用Postgres来处理应用程序的所有“事务性数据”。这是用户帐户信息、他们的歌曲/视频元数据、汇款地点、应用程序的其他内容等。所有这些数据只有几百MB

多媒体上传到AWS S3,每个文件的位置存储在Postgres中

关于每首歌曲在每个平台上表现如何的“分析数据”,例如每个地区的流数和收入,存储在Google BigQuery中。这些数据多得多,谷歌BigQuery更适合这种规模

当然,应该使用哪种数据存储的问题高度依赖于大小写。GraphQL并没有真正影响这些决策。GraphQL的好处在于,解析器允许您从任何地方提取数据,并将所有数据合并到单个API响应中。通过使用GraphQL,您应该可以轻松地使用各种数据库,每种数据库都根据其处理的数据类型进行了很好的定制