mysql - 选择存储 JSON 数据的数据库
问题描述
我正在构建一个利用 Spotify API 的原型应用程序。 https://developer.spotify.com/discover/
我正在研究选择数据库架构。由于这是一个原型,我想保持简单,但仍然有未来发展的道路。
如果您使用过 Spotify API 并存储检索到的数据,我很乐意收到您的来信。
此外,我已经阅读了许多关于数据库之间选择的帖子,并根据阅读它们编辑了这个问题。我再问一次,因为有些帖子已经有好几年了,而且情况发生了变化。
我的问题是:我在这篇文章中提出的选项有哪些优点和缺点,还有哪些其他选项可能更适合这种类型的应用程序?
概述 该应用程序将存储从 Spotify 检索到的数据。Spotify API 以 JSON 格式返回数据。
该应用程序将存储数百个甚至数千个用户的用户数据。
播放列表和曲目是主要数据。播放列表最多可包含 100 个或更多曲目。每个用户都将存储多个播放列表/曲目。一年后,用户可能拥有 50 到 100 个播放列表,每个播放列表包含多个曲目。
存储的播放列表将在应用程序/网络中显示给用户,并用于创建其他播放列表。曲目将每天添加数据,例如日期、排名。
会有交易,例如播放列表被锁定以防止进一步编辑、关闭时段、关闭排名等。
Spotify 类别大纲
用户:电子邮件、产品、显示名称、生日、图片 https://developer.spotify.com/documentation/web-api/reference/users-profile/get-users-profile/
音乐元数据:专辑、艺术家和曲目
播放列表:获取播放列表曲目并存储它们。您可以在此处查看 JSON 数据的样子: https ://developer.spotify.com/documentation/web-api/reference/playlists/get-playlists-tracks/
数据库选项
选项 A 将 Spotify JSON 数据存储在关系数据库中,例如 mySQL 或 MariaDB。
mySQL 和 MariaDB 都支持 JSON 数据类型,尽管它们的管理方式略有不同。根据 MariaDB KB:在 MySQL 中,JSON 是一个对象,并根据 json 值进行比较。在 MariaDB 中,JSON 字符串是普通字符串并作为字符串进行比较。
首先,将JSON存储在关系数据库中的优点/缺点是什么,例如可以充分查询它吗?一个示例查询可能是“按排名列出用户的播放列表”。其次,mySQL 和 MariaDB 对 JSON 的管理有哪些广告/缺点?
对于关系数据库,我还应该注意哪些其他问题?
选项 B Spotify 使用 Cassandra 数据库来提供 Spotify 服务。虽然这是一个原型应用程序,但是否值得考虑 Cassandra 或其他一些 Not Only SQL 类型的数据库?Cassandra 导入 JSON 数据的效果如何?是否有现成的开发人员了解如何使用 Cassandra?
选项 C、D、E……</p>
对于此类应用程序的数据结构,可以考虑哪些其他数据库选项?
提前致谢!
解决方案
如果专注于数据字段
如果您专注于包含的数据值,而不是 JSON 文档,您应该将 JSON 的片段解析为特定的表和列。如果您正在对这些部分进行大量查询,或者重新构建这些部分(例如用于用户界面),那么构建一个规范化的关系数据库表结构。
如果专注于整个 JSON 文档
如果您没有受过关系数据库设计方面的教育,或者您的应用程序专注于处理整个 JSON 文档,那么请使用支持 JSON 文档的数据库。
我知道Postgres对 JSON 有很好的支持,在插入时解析文档,并以自己的本机二进制格式存储部分:jsonb
. 这允许Postgres 提供的所有强大的索引。您还将发现用于操作 JSON 的强大功能。作为锦上添花,Postgres 还带来了其著名的可靠性。
推荐阅读
- c# - 我遇到以下错误 System.Data.SqlClient.SqlException: in C#
- java - 使用 Retrofit2 POST 时出现 Spring Boot 服务器错误,仅在数据库中存在关系时发生
- express - Lambda GraphQL 端点可在任何地方使用,但同一域上的另一个 Lambda 端点除外
- python-3.x - 使用 cnn pytorch 可变长度的文本
- excel - 用于检查重复的 Excel VBA 循环不起作用...有时
- ios - 如何隐藏 .numberPad 键盘上的字母?
- arrays - 快速比较两个数组的内容
- laravel - 强制路由到 HTTPS
- javascript - 如何自定义 angular-6-datatable 组件的 mfBootstrapPaginator
- php - 使用 AJAX 从数据库中获取值以根据另一个标签选择的选定选项选择输入