hitchhiker Asked: 2023-04-24 18:01:22 +0800 CST2023-04-24 18:01:22 +0800 CST 2023-04-24 18:01:22 +0800 CST 我应该使用具有多个维度的单列和柱状数据吗? 772 我正在使用对 Parquet 文件执行查询的 Apache Iceberg。数据保存了很多类型的事件和它们各自的数值。我在犹豫是为事件类型设置一列还是为每个事件设置一列更有效。 单一事件类型列: VS 每种事件类型的专用列: 我想知道如果我想运行一个group by查询col1,col2理论上event_type如果有一个专门的列,那么event_type数据库将不得不扫描更少的数据,而不是当所有事件类型都存储在一个单列。 在为列式数据存储中的此类数据设计模式时,最佳做法是什么? database-design 1 个回答 Voted Best Answer J.D. 2023-04-24T20:20:53+08:002023-04-24T20:20:53+08:00 我在犹豫是为事件类型设置一列还是为每个事件设置一列更有效。 每种事件类型的列(因为它们看起来是不同种类的属性)在这里可能最有意义。所有事件类型的单个列闻起来像Entity-Attribute-Value (EAV) Anti-Pattern。 EAV 反模式通常查询效率低下,可能会冲突数据类型,并使聚合查询更难实现。它还会损害可维护性和数据完整性。 除此之外,不同的数据库系统为列式数据的索引和压缩提供了不同的功能。将不同/不相关的数据混合到同一列中会损害从此类功能中获得的最大潜力。 进一步阅读 EAV 反模式: 这个键值数据库模式有名称吗? EAV - 在电子商务案例中,它真的是一种反模式吗? 数据库模型化反模式
每种事件类型的列(因为它们看起来是不同种类的属性)在这里可能最有意义。所有事件类型的单个列闻起来像Entity-Attribute-Value (EAV) Anti-Pattern。
EAV 反模式通常查询效率低下,可能会冲突数据类型,并使聚合查询更难实现。它还会损害可维护性和数据完整性。
除此之外,不同的数据库系统为列式数据的索引和压缩提供了不同的功能。将不同/不相关的数据混合到同一列中会损害从此类功能中获得的最大潜力。
进一步阅读 EAV 反模式: