【问题标题】:cassandra should I need 4 tables for this case?cassandra 这种情况我需要 4 张桌子吗?
【发布时间】:2021-06-18 23:03:56
【问题描述】:

我有一个名为 items_by_id 的表,如下所示:

items_by_id
    item_id uuid
    name TEXT
    desc TEXT
    price DECIMAL
    category TEXT
    trouser_size INT
    shoe_size INT
    tshirt_size INT
    color TEXT

所以现在我将项目 id 设为主键和集群名称。

如果我想添加许多过滤器,比如颜色,或者最高价格,我应该为每个过滤器添加一个表格吗?

我要对颜色进行排序的示例:

items_by_color
    item_id uuid (NOT PRIMARY KEY)
    name TEXT
    desc TEXT
    price DECIMAL
    category TEXT
    trouser_size INT
    shoe_size INT
    tshirt_size INT
    color TEXT (PRIMARY KEY )

对于价格,新表和分区键是价格。这是对还是错?

【问题讨论】:

    标签: cassandra data-modeling


    【解决方案1】:

    您可以使用二级索引(link)。二级索引会导致性能下降,因此请谨慎使用。一般的经验法则是索引具有少量值的低基数的列。在创建索引之前,请注意何时以及何时不创建索引。

    如果您想通过这些过滤器进行搜索,那么是的,您应该拥有这么多表,或者您可以使用如上所述的二级索引。我更喜欢使用不同的桌子,因为从长远来看,这会让生活更轻松。

    【讨论】:

    • 感谢您的回答。也许我在 item_by_id 中插入了一个项目。但随后 item_by_color 等中的数据为空。所以我必须为所有表编写查询吗?
    • 是的,您必须在您创建的所有表中填充数据。
    • 如果我写 7x 插入查询,那不贵吗?
    • 为了更快的读取速度,您可能不得不接受写入命中。我推荐阅读datastax.com/resources/ebook/oreilly-cassandra-definitive-guide。如果您想通过过滤器进行搜索,也可以使用 solr 等搜索平台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多