我正在建立一个非常大的计数器系统。需要明确的是,系统正在计算域在数据流中出现的次数(大小约为5亿到1亿个元素)。
系统将单独处理每个元素并发出数据库请求,以递增该域的计数器及其处理日期。这是结构:
stats_table (or collection)
-----------
id
domain (string)
date (date, YYYY-MM-DD)
count (integer)
我最初的想法是使用MongoDB,因为它们具有原子计数器功能。然而,当我更多地考虑它时,我认为Postgres的更新已经原子地发生(至少那是this question引导我相信的)。
我的问题是:在这里使用一个数据库有什么好处吗?假设我每天要处理大约500万个域名,那么我需要考虑的关键事项是什么?
答案 0 :(得分:4)
Postgres中的所有单个操作都自动包装在事务中,MongoDB中单个文档的所有操作都是原子操作。在这种情况下,原子性并不是将一个数据库优先于另一个数据库的理由。
虽然单个计数可能会非常高,但如果您只存储聚合计数而不是每个计数实例,则记录总数不应太大。即使您正在跟踪数百万个域名,Mongo或Postgres也可以同样运作。
MongoDB是记录事件的一个很好的解决方案,但如果你想对你收集的分析数据进行大量有趣的关系分析,我发现Postgres更受欢迎。要在Mongo中有效地执行此操作通常需要高度非规范化,因此我会更多地考虑您计划将来如何使用这些数据。