【问题标题】:Clickhouse columns structureClickhouse柱结构
【发布时间】:2019-11-25 08:49:09
【问题描述】:

我将统计数据存储在 MySQL 中,并希望将其迁移到 Clickhouse。

对于一个实体,我有多种统计类型。例如:clicksviewsupvotes

现在我将它存储在如下表中:entity_id | datetime | type | value,其中type 是一个常量整数,对应于上述统计类型之一。

在 Clickhouse 中保持相同的结构更好还是创建下一个架构更好:entity_id | datetime | clicks | views | upvotes

据我了解,Clickhouse 是面向列的数据库。这是否意味着当我们想要添加新列时,Clickhouse 具有零成本更改?

【问题讨论】:

    标签: mysql statistics database-administration clickhouse


    【解决方案1】:

    在 Clickhouse 中保持相同的结构更好还是创建下一个架构更好

    如果clicks | views | upvotes 与相同的entity_id 相关,那么为每个值创建一个列是有意义的。通过这样做,您将运行一个查询并获得包含您需要的所有数据的行。

    另一方面,如果您将表创建为entity_id | datetime | type | value,那么您将可以灵活地拥有更多的统计类型(也许mouse_enter 作为第4 种类型)。同时,您将重复 entity_iddatetime 值,这将消耗您的磁盘使用量,并且您的表将有 3x 行。如您所见,每个决定之间都存在权衡。由您决定选择哪一个。如果您认为只有 clicks | views | upvotes 就足够了,那么使用此架构会更有意义。

    Clickhouse 是面向列的数据库。这是否意味着当我们想要添加新列时,Clickhouse 具有零成本更改功能

    是的,Clickhouse 是面向列的,每一列都是磁盘上的一个单独文件。因此,如果您创建一个新列,则几乎没有开销。但是,如果您使用表突变或更改类型,则更改列将需要时间,具体取决于操作。

    【讨论】:

    • 嗯,这意味着带有type 字段的第二种情况只有缺点。如果我创建一个新列,Bcoz` ClickHouse 没有任何开销。因此,当我想添加新的统计类型时,我可以立即完成。如果统计列具有不同的数据类型,则第一种情况还有另一个优点。我理解正确吗?
    • @MikhailStroev 这是正确的,我认为您应该为每个指标设置一列。另外,检查这个可能有帮助的答案:stackoverflow.com/questions/42391255/…
    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 2013-06-02
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多