Postgresql 原子计数器Postgres vs MongoDB

Postgresql 原子计数器Postgres vs MongoDB,postgresql,mongodb,Postgresql,Mongodb,我正在建立一个非常大的计数器系统。需要说明的是,该系统正在计算一个域在大约5000-1亿个元素大小的数据流中出现的次数 系统将单独处理每个元素,并发出数据库请求,以增加该域的计数器及其处理日期。结构如下: stats_table (or collection) ----------- id domain (string) date (date, YYYY-MM-DD) count (integer) 我最初的想法是使用MongoDB,因为它的原子计数器特性。然而,当我想得更多的时候,我发

我正在建立一个非常大的计数器系统。需要说明的是,该系统正在计算一个域在大约5000-1亿个元素大小的数据流中出现的次数

系统将单独处理每个元素,并发出数据库请求,以增加该域的计数器及其处理日期。结构如下:

stats_table (or collection)
-----------
id
domain (string)
date   (date, YYYY-MM-DD)
count  (integer)
我最初的想法是使用MongoDB,因为它的原子计数器特性。然而,当我想得更多的时候,我发现Postgres的更新已经原子化了,至少这让我相信


我的问题是:在这里使用一个数据库比使用另一个数据库有什么好处吗?假设我每天要处理大约500万个域,我需要考虑的关键问题是什么?

Postgres中的所有单个操作都自动包装在事务中,MongoDB中单个文档上的所有操作都是原子操作。在这种情况下,原子性并不是首选一个数据库而不是另一个数据库的真正原因

虽然单个计数可能会非常高,但如果只存储聚合计数而不是计数的每个实例,则记录的总数不应太大。即使你正在追踪数百万个域名,Mongo或Postgres也同样有效


MongoDB是记录事件的一个很好的解决方案,但是如果您想对收集的分析数据进行很多有趣的关系分析,我发现Postgres更可取。要在Mongo中高效地实现这一点,通常需要高度的非规范化,因此我会更多地考虑将来如何使用数据。

Postgres中的所有单个操作都自动包装在事务中,MongoDB中单个文档上的所有操作都是原子的。在这种情况下,原子性并不是首选一个数据库而不是另一个数据库的真正原因

虽然单个计数可能会非常高,但如果只存储聚合计数而不是计数的每个实例,则记录的总数不应太大。即使你正在追踪数百万个域名,Mongo或Postgres也同样有效


MongoDB是记录事件的一个很好的解决方案,但是如果您想对收集的分析数据进行很多有趣的关系分析,我发现Postgres更可取。要在Mongo中高效地实现这一点,通常需要高度的非规范化,因此我会更多地考虑您将来打算如何使用这些数据。

谢谢您对Michael的评论!!很好的建议。。。至于我是如何使用这些数据的,这是相对直接的。将有聚合请求,即获取域X的所有计数,然后我还将计算增长率。就是这样。我想在理论上我也可以做更深入的分析,比如每个域的平均计数,等等,但是这不是我现在真正的意图。谢谢你对Michael的评论!!很好的建议。。。至于我是如何使用这些数据的,这是相对直接的。将有聚合请求,即获取域X的所有计数,然后我还将计算增长率。就是这样。我想在理论上我也可以做更深入的分析,比如每个域的平均计数,等等,但是这不是我现在真正的意图。