我必须做一个网站。我可以在Postgres和MongoDB之间做出选择。
案例1:Postgres
- 每页有一个表,每个表只有一行,对应一页(每页的结构与另一页不同)
- 我有一个有时间线的媒体页面(相册和视频)
- 因此,我有多个媒体(图片,视频),我显示它以及由一个相册的图片页面和视频页面。
- 因此,我有一个medias表,它与一个album表(多对多)相链接,还有一个type列用于确定它是图片还是视频。
案例2:MongoDB - 我是NoSQL的新手,不知道如何存储数据。
我看到的问题 - 一张table只有一行,这让我很困扰
- 在媒体表,我可以有一个相册与视频,我想避免它.但如果我削减这个表中的图片表和视频表,我怎么能做一个单一的调用,有所有的媒体为时间线的网页.
这就是为什么我认为用MongoDB做网站对我来说更好。
最好的解决方案是什么,Postgres还是MongoDB?如果是MongoDB,我需要知道什么?或者可能是一些我不知道的东西。
3条答案
按热度按时间jm81lzqq1#
这取决于时间,如果你没有时间去学习另一种技术,答案就是直接使用你所知道的技术并解决它的问题。如果可扩展性更重要,那么你必须更深入地研究你的架构,并非常清楚如何扩展postgresql。
Postgresql可以处理非结构化数据的json列,我使用它,它很棒,我将有一个单独的表,非结构化数据放在一个名为page_structure的列中,所以你将有一个单独的大索引表,而不是很多单行表。
这是相对容易的查询只是你想要的,所以不需要为图像和视频单独的表,为了更具体,你需要提供一些方案。
cczfrluj2#
我认为你使用NoSql数据库的结论是正确的,因为你不确定一个页面的表中的列,这就是为什么你要为不同的页面创建不同的表。我仍然会说让记录中的列保持一致。无论如何,通过使用MongoDB,你可以有不同的记录(在MongoDB中称为文档),根据单个集合中页面的属性使用不同的列如果你想的话,你可以分别拥有图片和视频集合,并使用像page_id这样的外键将它们与页面集合连接起来。或者,您可以调用page collection来获取所有属性,包括一个包含所有视频或图片ID的数组,您可以通过该数组检索相应的视频以及如下所示的特定页面的图片,
收款
2uluyalo3#
我建议您使用Clean Code架构。我相信你必须离开你的应用程序逻辑和数据访问功能一边,使他们都可以单独工作.你的代码不能依赖于你的数据库.我宁愿编码的方式,我可以迁移我的数据到每一个数据库,我希望它仍然会工作.想想当你的项目变得很大,你想尝试兑现来解决问题.如果您的数据访问功能没有从您的业务逻辑代码中分离出来,您就不可能轻易地实现这一点。
我同意@espino316关于使用你已经熟悉的项目的观点,也同意@Actung关于你应该考虑学习像MongoDB这样的数据库,但首先要在一些培训项目中学习,因为有许多项目最好的方法是使用NoSQL。
只要考虑一下,可能会发现这2年后,你部署你的网站。或相反的方式,你去MongoDB,你意识到最好的方式去是使用Postgres或IDK MySQL等。
我认为最好的方法是让迁移对你自己来说更容易。
一切顺利〈3