如何在tarantool查询中实现DISTINCT选项

时间:2017-04-19 11:24:04

标签: database-design distinct tarantool nosql

文章是从RSS提要中解析的,每篇文章可能属于许多类别。每篇文章都有一些元数据,如来源,上游等。

以下是我们如何设计空间。每篇文章都插入到文章空间中。

文章空间

urlhash | article.content
abcdef | {dummy content}

主键urlhash = hash(article.url)。

在category_articles空间中,我们根据文章的落入次数多次插入文章

category_articles

来源|类别| urlhash |时间戳
英国广播公司|艺术| article1 | 27777个
英国广播公司|手机|第8条| 27777个
英国广播公司|电话| article3 | 27778个
nyt |声音| article7 | 36667个
nyt |扬声器| article7 | 45556

主键= {source,category,urlhash}
辅助密钥= {来源,类别,时间戳}

我需要针对给定来源和可能类别的最新文章。我是如何构建查询的。

box.space.category_articles.index.secondary:select {{'nyt','speaker'},{iterator ='LE',limit = 5}}

现在我将在结果中得到article7两次。目前我在代码中过滤重复的结果。如何在tarantool中使用不同的(urlhash)类型的选项。

2 个答案:

答案 0 :(得分:0)

两种可能的选择在哪里

  1. 第一个是在客户端过滤所有内容。
  2. 第二个是使用Lua存储过程。一个例子:

    function select_with_distinct()     local ca = box.space.category_articles     for _,v in pairs(ca.index.secondary:select {         {' nyt',#39;},{iterator =' LE',limit = 5}}))         - filtring ......     结束 端

答案 1 :(得分:0)

我能够使用索引上的pair函数找到更好的解决方案,然后过滤文章(使用lua表跟踪唯一的文章),直到我得到唯一数量的文章。

index_object:pairs([key[, iterator-type]])