【问题标题】:Atomic counters Postgres vs MongoDB原子计数器 Postgres vs MongoDB
【发布时间】:2012-12-04 19:08:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: postgresql mongodb


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢迈克尔的评论!很好的建议......至于我如何使用这些数据,它相对简单。将有聚合请求(即获取域 X 的所有计数),然后我还将计算增长率。就是这样。我想理论上我还可以进行更深入的分析(例如每个域的平均计数数等),但这并不是我现在真正的意图。
    猜你喜欢
    • 2017-03-05
    • 2016-09-19
    • 2015-04-22
    • 2012-07-23
    • 1970-01-01
    • 2013-09-17
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多