2015-03-25 19 views
0

我有以下问题:MariaDB活动流的动态列?

我们有很多不同,但类似类型的数据项,我们希望在(MariaDB的)数据库来记录的。所有数据项都有一些常用参数,如id,用户名,状态,文件全局,类型,注释,开始&结束时间戳。另外,还有很多(比如40到100之间)参数,这些参数是特定于每种类型的数据项的。

我们希望在同一个表中有不同的数据项类型,因为它们将与其他几个数据一起显示在Web应用程序的单个列表中。这将显示为活动流或“Facebook墙”。

看起来,具有顶级泛型表的规范化方法与下面的特定表连接会导致性能不佳。为了显示活动流,我们必须同时执行大量连接和联合,并且应用程序将频繁地轮询该查询,因此查询运行速度很重要。

那么,在性能和存储优化方面哪个更好?

  1. 利用MariaDB的的动态列
  2. 只需添加在所有不同种类,我们需要在一个表中的列,并只接受每个数据项类型将只能使用一小列,即休息将为空。
  3. 别的东西?

如果我们使用常规列时,它们中的大量数据将为空,那么它有关系吗?

什么时候应该使用动态列以及何时使用常规列更好?

回答

1

我相信你应该为你过滤的值有不同的列。但是,您可能有一些未经过滤的值。对于那些将它们作为json对象存储在单个列中可能是个不错的主意(简单编码/解码)。

+0

这与使用MariaDB的动态列类似,可以使用json格式进行提取。 1.我仍然对为什么一个解决方案感到困惑虽然比另一个更好。 – dbdemon 2015-03-25 17:57:26

+0

它总是取决于具体情况。如果您需要按列过滤,则需要简化过滤。如果它是一个要解析的数据,那么你可以使它紧凑。 – 2015-03-26 11:28:54

1
  • 一些列 - 。使用WHERE中和ORDER BY子句(但不一定是所有列可能会过滤的主要的
  • 一个JSON列或MariaDB的动态列

查看我的博客why not to use EAV schema。我专注于如何在JSON中执行此操作,但MariaDB的Dynamic Columns可以说是更好的。

+0

谢谢 - 在寻找关于此主题的解决方案之前,我实际上遇到过您的博客文章。从性能或存储空间的角度来看,我仍不确定为什么这种方法比创建常规列更好。用这种方法会有性能损失吗?空值是否占用空间? – dbdemon 2015-03-25 23:11:42

+0

如果有20个'可选''属性',没问题。如果有200个,它会变得笨拙。明天你需要201; 'ALTER TABLE ADD COLUMN'是痛苦的。有几十个指数是昂贵的和没有生产力的。因此,我鼓励您找出通常用于过滤的几列,并将明确的列和索引限制为它们。 (这些是我的看法,看到一些产品真的搞砸了。) – 2015-03-25 23:32:04

+0

我不认为它的美学是对明确列的重要论据。重要的是是否存在性能损失或浪费存储空间。 'ALTER TABLE ADD COLUMN'不会吓倒我。 MariaDB使索引动态列成为可能,但我不确定是否存在任何缺点。无论如何,无论如何,大多数索引列都是明确的列。但BLOB专栏的情况如何,在性能和存储方面是否存在缺陷? – dbdemon 2015-03-26 10:47:38