【问题标题】:Create a Global Secondary Index which include non-key attributes创建包含非关键属性的全局二级索引
【发布时间】:2019-08-07 21:27:51
【问题描述】:

我正在尝试在表 Scylla 集群上创建 GSI。根据文档,我可以创建CREATE INDEX ON ks.users (email);,它将在它创建的物化视图中包含该字段和主键。有没有办法在创建此 GSI 时将其他非关键属性投影到 MV?

感谢您的帮助。

【问题讨论】:

    标签: scylla


    【解决方案1】:

    由于物化视图的限制,这种投影是不可能的 - 最多只能将一个非键列合并到物化视图的键中。 Scylla 的 GSI 创建一个底层物化视图,并将索引列放在 key 中,因此只能使用一个非 key 列。

    我能想到的唯一解决方法是:

    • 通过创建将两个属性的组合值存储为 blob 的单个列来更改基表架构 - 然后可以在此 blob 上创建索引;
    • 更改基表架构,使其中一列成为主键的一部分。

    此外,目前在 Scylla 的索引中自定义投影的唯一选项是本地索引,其中可以确保基本分区键也用作底层视图中的分区键:CREATE INDEX ON ks.users ((userid), email)。有一天,实现通用索引会很好,这将允许以更灵活的方式自定义底层物化视图 - 总是欢迎贡献:) 尽管如此,物化视图的约束仍将适用,因此投影更多非键列用于索引只有在物化视图允许相同的情况下才能允许。

    【讨论】:

    • 我明白了。所以我想投影的另一个非关键列可以是 MV 的非关键列。如果它们不是 MV 键的一部分,那也没关系。在创建 MV 时,我可以使用 Select * 直接创建包含所有列的 MV。但我不能为Create Index 做同样的事情。所以即使 MV 有这个,在创建索引时它是不可能的吗?这是正确的说法吗?
    • @KingJames Precisely - 在直接创建物化视图时,可以将非键基列添加为非键 MV 列而不会出现问题,但 Scylla 中二级索引的当前实现不允许定义非键-底层视图中的键列。
    • 非常感谢!这有帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多