Cassandra / Solr数据模型的改进

时间:2014-12-18 10:43:49

标签: solr datastax-enterprise

我有下表:

CREATE TABLE videos_tags (
  id text,
  tag text,
  video text,
  someotherfield long,

  PRIMARY KEY (id),
) WITH gc_grace_seconds = 1296000
AND compaction={'class': 'LeveledCompactionStrategy'}
AND compression={'sstable_compression': 'LZ4Compressor'};

该表存储标签和视频列表。视频可以包含一个或多个标签;并且标记可以归因于多个视频。例如:

id  | tag         | video
------------------------------------------
1   | dancing     | video1
2   | singing     | video2
3   | prank       | video3
4   | prank       | video4
5   | funny       | video3
6   | cover       | video2

我想向用户展示基于广告代码分配的相关视频列表 - 某个视频与用户视频共享的标签越多,相关的视频就越多"它是。我使用的实际方法包括两个步骤:

  1. 获取用户视频标签的列表

    Q = &安培; FQ =视频:视频1&安培; FL =标签

  2. 识别视频使用与用户视频相同的标签,然后选择前10名(结果集切片在应用程序端完成)

    q = & fq = tag:tag1 AND tag:tag2 AND tag:tag3 AND!video:video1& fl = video& stats = true& stats.field = someotherfield& stats。面=视频

    注意:我使用的是stats而不是plain facet,因为我还需要 someotherfield的总和

  3. 此方法产生的平均执行时间为30秒。不幸的是,我的应用程序的最长可接受查询时间是10秒

    是否有更好的方法来解决此数据要求?我打开:

    1. 替代查询方法(小调整是首选;但我可以接受像完全替换我的两步方法那样激烈的事情)
    2. 替代架构
    3. 注意:

      1. 为简洁起见,我从这篇文章中删除了实际架构以及其他几个字段
      2. 我通过Solr(Datastax Enterprise 4.6.0)完成所有读取操作。 Solr架构中没有任何花哨的东西
      3. 该表目前拥有15亿行,但可能会在几年内增长到两倍或三倍(因此解决方案必须考虑表/索引大小)
      4. 没有全文搜索 - 只有精确的字符串过滤器

0 个答案:

没有答案