【问题标题】:Strategy for filtering big data in cassandra dbcassandra db中过滤大数据的策略
【发布时间】:2015-09-18 21:40:04
【问题描述】:

我不是数据库设计专家,但我有幸发明了一种过滤数据的策略。 给定的是 cassandra 作为使用的 dbms。 我的目标是发明一种缓存系统,该系统能够从数据集中为已请求的参数“配置”返回一个字段。如果之前从未请求过此显式“配置”,则会在后台触发新查询,但此机制不属于本主题。

示例表

id = 1, color = red, size = 10, shape = oval, price = 55.2
id = 2, color = blue, size = 5, shape = rectangle, price = 33.9
id = 3, color = red, size = 2, shape = triangle, price = 95.7

...

客户要求一件尺寸为 10 的红色椭圆形物品,并想知道价格。因为请求的参数显然已经在db中了,所以客户端应该很快就能得到答案。

我想要的是 SQL 之类的东西

SELECT price FROM table where color = red AND size = 10 AND shape = oval

在 mySQL 中不是很关键,但是在 cassandra 中如何做到这一点?

我是 cassandra 的新手,不知道有什么好的解决方案。

我已经知道的是

  • 可以在 mySQL 中使用 WHERE 子句进行过滤,但速度较慢(对于大型数据库),因为数据库必须运行并搜索所有字段,而不是使用索引

  • cassandra 无法过滤未编入索引或不属于主键的列,除非使用 ALLOW FILTER 选项,该选项与在关系数据库中的过滤一样慢

  • cassandra 支持地图等类型,因此可以将参数集保存到一个字段中,例如

    id = 1, properties = {color => red, size => 10, shape => oval}, price = 55.2

    但不可能将其用作一种主键。据我所知,集合的索引是可能的,但不推荐,因为它对于足够大的数据库也很慢

另一个给定的条件是,参数并不总是相同的。例如,第 1 项具有颜色和大小属性,第 8 项只有形状和颜色属性。在我看来,这说明了非关系架构(?) 事实上,一个“配置”必须只存在一次,所以下面的例子不应该是可能的

id = 2535, color = red, size = 10, shape = oval, price = 55.2
id = 3224, color = red, size = 10, shape = oval, price = 33.9

我有一个想法,要为参数构建一个散列并将其用作主键,但问题是,例如 color = red, size = 10, shape = oval 的内容与 size = 10, shape = oval, color = red 相同,但散列不同。

也许解决方案非常简单或不可能?我搜索了一段时间,但没有找到答案。

我不想要一个完整的解决方案,但也许有人可以给我提示或要搜索的关键字。

谢谢大家

【问题讨论】:

    标签: database cassandra


    【解决方案1】:

    在您的示例中,您正在对三个字段执行相等搜索以返回产品 ID。

    专门为此查询创建一个表。由于配置是唯一的,因此将它们标识为 product_id 上的分区键和集群。

    create table product_by_color_shape_size (
        color text,
        size int,
        shape text,
        product_id uuid, //(or int)
        price int,
        PRIMARY KEY ((color, size, shape),product_id)
    );
    

    有关 Cassandra 中数据建模的更多信息,您应该查看DS220 Data Modeling course at Datastax Academy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 2023-03-31
      • 2015-04-08
      • 2014-05-20
      • 2015-11-18
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多