大数据集上的扁平化+分区与嵌套记录
Posted
技术标签:
【中文标题】大数据集上的扁平化+分区与嵌套记录【英文标题】:flatten+partitioning vs nested record on big data sets 【发布时间】:2012-12-24 05:47:25 【问题描述】:我有一个扁平化的数据集,每一行都包含用户属性(年龄、位置等)、注册和访问日期时间。每天分区。每天约 1000 万访问行,2500 万用户,500 万用户。 这现在可以处理几个月的数据,并且在 1 年内,它将是约 30 亿多行。
为了提高效率和减小尺寸,我正在考虑使用嵌套行: 每个用户都有嵌套记录,只有注册和访问日期时间。
在我做大的改变之前,假设我不会超过每行 64K 的限制,我会相应地改变我的查询。这会比展平行表现更好吗?
问题:
如果我使用嵌套,我会按访问日期松开每日分区,因为我 将它们嵌套到一个记录中。 (可以按月分区吗?)
加载时,我需要将 CSV 转换为 JSON 并知道将每一行加载到哪个分区,所以我想我会取消分区。
较少分区但嵌套的查询性能应该更好?非常感谢
【问题讨论】:
【参考方案1】:1:json 数据的实际导入行大小限制为 20 MB,而不是 64k。我已经提交了一个文档错误,以便在我们的公共文档中更新它。
嵌套数据可能会在一定程度上提高性能,但在不了解实际查询的情况下很难知道。它不太可能对性能产生很大影响。但是,它可能会降低您的查询成本。
您可以将多个分区合并,然后按分组或按每个分组来收集每个用户的访问。在生产之前用较小的数据样本进行尝试可能是个好主意。
我的猜测是,更复杂的查询和加载逻辑将意味着嵌套数据不会给您带来太多好处。您最好保持数据非规范化和扁平化,按天对数据进行分区,并在查询中需要的表的联合上进行查询。我们正在研究如何更轻松地在查询中指定表的范围,这可能会有所帮助。
【讨论】:
太好了,我们已经实现了一个动态查询构建器,它基于 where 子句,选择要合并的分区。效果很好。将尝试嵌套... Артём Царионов ,您在寻找分区函数、嵌套示例或来自 Google 的答案?很抱歉不理解。以上是关于大数据集上的扁平化+分区与嵌套记录的主要内容,如果未能解决你的问题,请参考以下文章