原子计数器 Postgres 与 MongoDB

Nic*_*ill 1 postgresql mongodb

我正在建造一个非常大的计数器系统。需要明确的是,系统正在计算域在数据流(大小约为 50 - 1 亿个元素)中出现的次数。

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

stats_table (or collection)
-----------
id
domain (string)
date   (date, YYYY-MM-DD)
count  (integer)
Run Code Online (Sandbox Code Playgroud)

我最初的想法是使用 MongoDB,因为它们的原子计数器功能。然而,当我进一步思考时,我认为 Postgres 更新已经以原子方式发生(至少这个问题让我相信)。

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

小智 5

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

虽然单个计数可能会变得相当高,但如果您仅存储聚合计数而不是计数的每个实例,则记录总数不应太大。即使您要跟踪数百万个域,Mongo 或 Postgres 也能同样出色地工作。

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