选择一个数据库来存储JSON数据

时间:2018-12-17 22:17:30

标签: mysql json database cassandra mariadb

我正在构建一个利用Spotify API的原型应用程序。  https://developer.spotify.com/discover/

我正在研究选择数据库体系结构。由于这是一个原型,因此我想保持简单,但仍然有一条通往未来发展的道路。

如果您使用过Spotify API并存储了我希望听到的数据。

此外,我阅读了许多有关数据库之间选择的文章,并根据阅读这些文章来对其进行编辑。我再问一次,因为有些职位已经有好几年了,而且情况有所变化。

我的问题是:我在本文中提出的选项的优缺点是什么,还有哪些其他选项可能适合此类应用程序?

概述 该应用程序将存储从Spotify检索的数据。 Spotify API以JSON格式返回数据。

该应用程序将存储数百个用户的用户数据,希望存储数千个用户。

播放列表和曲目是主要数据。播放列表最多可以包含100个或更多曲目。每个用户将存储多个播放列表/曲目。一年后,用户可能会拥有50至100个播放列表,每个播放列表都包含许多曲目。

存储的播放列表将在应用程序/网站中显示给用户,并用于创建其他播放列表。曲目将每天添加数据,例如日期,排名。

会有交易,例如播放列表被锁定,无法进行进一步的编辑,关闭时段,关闭排名等。

定位类别概述

用户:电子邮件,产品,显示名称,生日,图像    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或其他“不仅仅是SQL”类型的数据库? Cassandra如何导入JSON数据?是否有开发人员随时可以了解如何与Cassandra一起使用?

选项C,D,E ...

对于这种类型的应用程序,数据结构还可以考虑使用哪些其他数据库选项?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果专注于数据字段

如果您专注于包含的数据值,而不是JSON文档,则应将JSON片段解析为特定的表和列。如果您要对这些部分进行大量查询,或者要重新构建这些部分(例如针对用户界面),请构建normalized关系数据库表结构。

如果整体上关注JSON文档

如果您没有受过关系数据库设计方面的教育,或者您的应用专注于整个JSON文档的使用,请使用支持JSON文档的数据库。

看来MySQLsuch support,但我不知道细节。

我确实知道Postgres对JSON具有出色的支持,它在插入时解析文档,并以其自己的本机二进制格式存储这些部分:jsonb。这允许Postgres提供的所有powerful indexing。您还会发现功能强大的functions for manipulating JSON。作为锦上添花,Postgres还带来了其着名的可靠性。