哪个更快:大型 JSON 数据集上的 PostgreSQL 与 MongoDB?

数据挖掘 数据挖掘 大数据 数据库 sql mongodb
2021-09-30 06:54:39

我有一个包含 9m JSON 对象的大型数据集,每个对象大约 300 个字节。它们是来自链接聚合器的帖子:基本上是链接(URL、标题和作者 ID)和评论(文本和作者 ID)+ 元数据。

它们很可能是表中的关系记录,除了它们有一个数组字段,其 ID 指向子记录。

什么实现看起来更可靠?

  1. PostgreSQL 数据库上的 JSON 对象(只有一张大表一列,即 JSON 对象)
  2. MongoDB 上的 JSON 对象
  3. 将 JSON 对象分解为列并在 PostgreSQL 上使用数组

我想最大化连接的性能,所以我可以按摩数据并探索它,直到找到有趣的分析,此时我认为将数据转换为特定于每个分析的形式会更好。

3个回答

在数据加载方面,Postgre 优于 MongoDB。返回查询计数时,MongoDB 几乎总是更快。对于使用索引的查询,PostgreSQL 几乎总是更快。

查看此网站网站以获取更多信息。他们有非常详细的解释。

您可能会从 Mongodb 的无模式设计中受益更多。这意味着动态修改数据结构非常容易。

Mongodb中没有join这样的东西。因此,需要修改人们如何看待数据以及如何使用数据,以适应基于文档和无模式的数据库环境。

随着视角和优先级的变化,速度可能变得不那么重要了。

我希望这会有所帮助。

-托德

对于您提到的数字,我认为所有替代方案都应该有效(阅读:您将能够在合理的时间内完成分析)。我推荐一种可以带来明显更快结果的设计。

如前所述,通常 postgresql 比 mongo 快,有时快 4 倍以上。
例如看这个

您说您对提高连接性能感兴趣。我假设您对计算实体之间的相似性(例如,帖子、作者)感兴趣,因此您主要将表格与其自身(例如,通过帖子或作者)连接并聚合。

除此之外,在初始加载后您的数据库将是只读的,这使得该问题非常适合索引使用。您不会为索引更新付费,因为您没有任何索引,而且我猜您有额外的索引存储空间。

我会使用 postgres 并将数据存储在两个表中:

创建表posts(post_id整数,url varchar(255),author_id整数);

-- 加载数据,然后创建索引。-- 这将导致更快的加载和更好的索引更改表帖子添加约束posts_pk主键(post_id);在帖子上创建索引 post_author(author_id);

创建表comments(comment_id integer, post_id integer, author_id integer, comment varchar(255)) ; alter table comments 添加约束 comments_pk 主键(comment_id); 在评论上创建索引comment_author(author_id);在评论(post_id)上创建索引comment_post;

然后,您可以根据 select m 等查询中的评论计算作者相似度。author_id 为 m_author_id,a。author_id as a_author_id,count(distinct m.post_id) as posts from comments as m join comments as a using (post_id) group by m.author_id,a。author_id

如果您有兴趣对 nlp 评论中的单词进行标记,请为此添加另一个表,但请记住,它会显着增加您的数据量。通常最好不要在数据库中表示整个标记化。