Postgres或MongoDB

时间:2017-10-12 15:21:05

标签: mongodb postgresql nosql rdbms

我必须建立一个网站。我问了一些关于模型的问题。我可以选择Postgres和MongoDB。

案例1:Postgres

  • 每个页面都有一个表格,每个表格只有一行,一页(每个页面的结构不像另一个页面)
  • 我有一个带媒体(专辑和视频)的时间页面
  • 所以我有多个媒体(图片,视频),我也会通过图片页面和视频页面显示它。
  • 因此,我有一个媒体表,与专辑表(多对多)相关联,还有一个类型列,用于确定它的图片或视频。

案例2:MongoDB

  • 我是NoSQL的新手,我不知道如何存储数据。

我看到的问题

  • 桌子只有一行,打扰了我
  • 在媒体表格中,我可以有一个包含视频的相册,我想避开它。但是,如果我在图片表和视频表中剪切此表,我如何进行一次调用以获得时间轴页面的所有媒体。

这就是为什么我认为用MongoDB制作网站对我来说更好。但我不确定,我是NoSQL的新手。

我想知道你的想法,什么是最好的解决方案,Postgres或MongoDB?如果它是MongoDB,我需要知道什么?或者也许有些事情让我失去了Postgres。

感谢您的回复。

我希望你能理解我所有的问题。对不起我的英语,我努力做到最好。

2 个答案:

答案 0 :(得分:1)

这将取决于时间,如果你没有时间学习其他技术,答案是直接与你认识的人一起解决问题。 如果可伸缩性更重要,那么您必须深入了解您的架构,并且非常了解如何扩展postgresql。

Postgresql可以处理非结构化数据的json列,我使用它并且它很棒。我将在列名称page_structure中有一个包含非结构化数据的表,因此您将拥有一个大的索引表而不是很多一个行表。

相对容易查询您想要的内容,因此不需要单独的图片和视频表格,为了更具体,您需要提供一些方案。

答案 1 :(得分:1)

我认为您正在使用NoSql数据库得出正确的结论,因为您不确定页面的表中的列,这就是您为不同页面创建不同表的原因。我仍然会说让列在记录上有点一致。无论如何,通过使用MongoDB,您可以根据单个集合(SQL中的表)中页面的属性,使用不同的列来创建不同的记录(在MongoDB中称为文档)。如果需要,您可以单独设置图片和视频集合,并使用某些外键(如page_id)将它们与您的页面集合连接起来。或者你可以调用页面集合来获取所有属性,包括一个包含所有视频或图片ID的数组,通过它可以检索特定页面的相应视频和图片,如下图所示,

<强>集合

Pages [{id, name, ...., [video1, video2,..], [pic1, pic2, pic78,...]}, id, name, ...., [video1_id, video2_id,..], [pic1_id, pic2_id, pic78_id,...]},...]

Videos [{video1_id, content,... }, {video2_id, content,...}]

Pictures [{pic1_id, content,... }, {pic2_id, content,...}]