sql - GraphQL 数据库设计模式

标签 sql database graphql nosql

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

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

基本上我想让用户注册我的页面并添加关于他们自己的描述、交 friend 、加入群组、上传媒体(图片和视频)等。一个非常基本的社交网络设置,但最终问题变窄了下降到:

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

SQL 是否应该处理:用户 ID、电子邮件、密码
MongoDB:关于、描述、帖子
Redis:缓存诸如帖子提要之类的东西

您将如何处理媒体上传? SQL、MongoDB?我没有找到任何有用的文章来讨论使用不同的数据库结构,大多数其他 StackOverflow 问题都感觉过时了。他们要么偏爱一个,要么偏爱另一个,但不偏爱两者的组合。

最佳答案

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

我将大致介绍一下我们如何在工作中使用它。我们有一个应用程序,可以让用户上传歌曲和视频,供我们分发到数字流媒体平台,例如Spotify 等。

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

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

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

当然,应该使用哪个数据存储的问题高度依赖于案例。 GraphQL 并没有真正影响任何这些决定。 GraphQL 的好处在于解析器让您可以从任何地方提取数据并将其全部整合到一个 API 响应中。通过使用 GraphQL,您应该可以自由地使用各种数据库,每个数据库都根据其处理的数据类型量身定制。

关于sql - GraphQL 数据库设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43076317/

相关文章:

mysql - 在 MYSQL 中链接表 - 我需要外键吗

database - 避免 CakePHP $this->data 安全漏洞的方法?

javascript - apollo GraphQL 查询的 useParams

sql - SQL Server 中的完全递归员工-老板关系

java - 我的 SQLite 数据库没有被创建

java - 从 GraphQL-Java 返回错误

javascript - 使用 graphql-ruby 生成一个 schema.json

SQL:使用两个不同表的计数

MySQL 避免 WHERE/AND 中的子查询重复

sql - oracle rowid是如何在内部生成的?