【问题标题】:Does adding a column to a cassandra table complete instantly?向 cassandra 表添加列会立即完成吗?
【发布时间】:2020-04-30 15:51:53
【问题描述】:

我们计划在数据文件大小约为 350 GB 的现有 cassandra 表中添加一个 list 类型的列。我们可以在应用架构更改时暂时停止所有读/写几分钟。

我们的理解是,cassandra 在应用架构更改时不会锁定表,但要确保我们的 DBA 想要对具有 25 GB 大小的数据文件的表进行实验。但是,在运行非生产 cassandra 服务器的小型服务器上增长到这样的大小需要 3-4 周(有更多的并发插入开始导致超时问题)。

有谁知道向现有的 cassandra 表添加列会立即返回,而不管基础数据文件的大小?

谢谢

【问题讨论】:

    标签: cassandra schema


    【解决方案1】:

    在 Cassandra 中添加列只是将列的元信息添加到保存架构信息的内部表中。完成此更改后,不会对现有数据进行任何修改 - 当磁盘上没有数据时,Cassandra 将简单地放置 null 而不是列值(对于任何列,不仅是添加的内容) - 当数据是返回给调用者,而不是通过将 null 添加到文件中。

    同样,删除列并不会修改现有数据——而是在system_schema.dropped_columns表中添加一个新条目,并在从磁盘读取后过滤掉相应的数据。

    【讨论】:

    • 感谢您的意见。我们应用了架构更改,添加了一个新列,它迅速完成,也不会影响正在进行的读取或写入。
    • “Cassandra 将简单地把 null 代替......”:我知道你知道,但我要澄清的是,这与从磁盘读取没有为该列设置值的行(或值已经为空,例如删除、过期值、显式空插入),并且 Cassandra 在添加新列时不会“添加具有空值的列”。
    猜你喜欢
    • 2016-07-07
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多