回答

收藏

如何有效地存储数百万条统计记录?

技术问答 技术问答 385 人阅读 | 0 人回复 | 2023-09-12

我们的在线商店有大约170万种产品。我们需要记录一年内浏览了多少次产品。我们希望每2小时至少记录一次浏览。问题是结构来执行这项任务?
5 J# S) s1 W9 B; X$ U0 I6 H现在,我们试图将统计信息保留在2列记录中30天,
2 ]+ T! @9 \* Y3 x5 Hclassified_id,stats统计信息就像带格式一样date:views,date:views …的剥离的json' J1 z( j% @1 C# U
…例如,一个记录看起来像
4 C8 x8 D6 S# o# r2 [{051216:23212,051217:6423}where 051216,051217=mm/dd/yy and 23212,64233=number of views如果你想追溯一年,那当然是愚蠢的,因为如果你想获得1000种产品的总视图,你需要从数据库中获得300种视图mb并自计算等数据。2 x/ ~* J- ~3 p% E9 V7 x' S
我们现在想到的另一种方法是拥有一个3列的大表classified_id,date,view并将其记录存储在自己的行上,这当然会导致一个拥有数亿行的巨大表。例如,如果我们有1.分类广告800万,每2小时保持24/7的记录1 C* h" v) }7 u  t( `; V# \$ n
1800000 * 365 * 12 =$ f6 U- l) D4 H) N
7.884.000.000(十亿个带B虽然在postgres在理论极限内,但我认为即使有正确的索引,它的查询也会被占用一段时间+ p- r3 _5 U7 r- @3 X
有什么建议?我无法想象Google Analytics(分析)如何存储统计信息…
1 c" U' W3 i  H! g                                                                0 u/ I& |5 n! s8 l9 _; |
    解决方案:                                                                / V  R8 T& o8 @6 |5 K4 \5 C6 R0 o& z3 [
                                                                这个数字没有你想象的那么高。在目前的工作中,我们存储网站的指标数据,我们拥有的总数要高得多。我在以前的工作中使用了它pg该数据库从移动网络收集指标,每天收集约20亿条记录。因此,不要害怕数十亿的记录。
) J0 y% `7 Z) Q/ g. i; Q& R8 n您必须划分数据-8 B, [) R' l& u8 y: e+ W/ w* a9 O+ X
最有可能是按天。有了这么多的数据,你会发现索引是无用的。这取决于你将在哪里EXPLAIN命令输出中看到的平面。例如,电信应用程序根本不使用索引,因为它们只会降低整个引擎的速度。; I" R1 _6 E% D) h5 M( X- \
另一个问题是你需要如何快速响应查询。以及允许用户查询的粒度(每小时、几天、几周之和)的哪一步。你甚至可能需要总结一些粒度,如周、月或季。
: [6 [" K: d$ z. S5 F( t; c! x添加:  
4 x" s+ w/ Y$ I每天约有20亿条记录在电信应用程序中的日消耗量约为290GB。这意味着使用带有COPY大容量插入命令每秒可插入约2.3万份记录。每批都有成千上万的记录。原始数据按分钟划分。为避免磁盘等待,db在四个不同的磁盘/阵列中有四个表空间,并在其上分配分区。PostreSQL能够处理所有问题。因此,您还应考虑正确的硬件配置。
: C7 ~5 Z* I! `: C9 Q+ Y+ o+ L" A" c好主意也是会pg_xlog目录移动到单个磁盘或阵列。不仅仅是不同的文件系统。所有这些都必须是单独的硬件。我只能推荐有正确和错误检查的阵列SSD。最近,我们遇到了一个人SSD数据库损坏的问题。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则