1

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

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

stats_table (or collection)
-----------
id
domain (string)
date   (date, YYYY-MM-DD)
count  (integer)

我最初的想法是使用 MongoDB,因为它们具有原子计数器功能。然而,当我想得更多时,我认为 Postgres 更新已经自动发生(至少这是这个问题让我相信的)。

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

4

1 回答 1

4

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

虽然单个计数可能会变得相当高,但如果您只存储聚合计数而不是计数的每个实例,那么记录的总数应该不会太大。即使您正在跟踪数百万个域,Mongo 或 Postgres 也同样可以正常工作。

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

于 2012-12-04T19:25:57.130 回答