我将统计数据存储在mysql中,并希望将其迁移到clickhouse。
对于一个实体,我有多种统计类型。例如: clicks
, views
, upvotes
现在我把它放在一张table上,看起来像: entity_id | datetime | type | value
,在哪里 type
是一个常量整数,对应于上述统计类型之一。
在clickhouse中保持相同的结构还是创建下一个架构更好: entity_id | datetime | clicks | views | upvotes
据我所知,clickhouse是面向列的db。这是否意味着当我们需要添加新的列时,clickhouse的成本为零?
1条答案
按热度按时间arknldoa1#
在clickhouse中保持相同的结构还是创建下一个模式更好
如果
clicks | views | upvotes
与相同的entity_id
,则为每个值创建一列是有意义的。通过这样做,您将运行一个查询并得到一行包含您需要的所有数据。另一方面,如果将表创建为
entity_id | datetime | type | value
,那么您就可以灵活地拥有更多的统计类型(也许mouse_enter
作为第四种类型)。同时,你会重复entity_id
以及datetime
值,该值将消耗磁盘使用量,并且表将有3行。正如你所看到的,每个决定之间都有一个权衡。你自己决定选哪一个。如果你认为clicks | views | upvotes
那么使用这个模式就足够了。clickhouse是面向列的数据库。这是否意味着当我们需要添加新的列时,clickhouse的成本为零
是的,clickhouse是面向列的,并且每列都是磁盘上的一个单独文件。因此,如果您创建一个新列,将几乎没有开销。但是,如果使用表突变或更改类型(取决于操作),则更改列将需要时间。