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

Database design 如何在tarantool查询中实现DISTINCT选项,database-design,distinct,tarantool,nosql,Database Design,Distinct,Tarantool,Nosql,文章是从rss提要中解析出来的,每篇文章可能分为许多类别。此外,每篇文章都有一些元数据,如源、上游等 下面是我们如何设计空间的。每一篇文章都被插入到文章空间中 文章空间 urlhash| article.content abcdef |{虚拟内容} 主键urlhash=hash(article.url) 在category_articles空间中,我们根据文章所属的类别将其插入多次 U类物品 源|类别| urlhash |时间戳 英国广播公司|艺术|第一条| 27777 bbc |移动|第8

文章是从rss提要中解析出来的,每篇文章可能分为许多类别。此外,每篇文章都有一些元数据,如源、上游等

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


文章空间

urlhash| article.content
abcdef |{虚拟内容}

主键urlhash=hash(article.url)


在category_articles空间中,我们根据文章所属的类别将其插入多次

U类物品

源|类别| urlhash |时间戳
英国广播公司|艺术|第一条| 27777
bbc |移动|第8条| 27777
bbc |电话|第三条| 27778
纽约时报|健全|第7条| 36667
纽约时报|发言人|第7条| 45556

主键={source,category,urlhash}
辅助键={source,category,timestamp}

我需要一个给定的来源和可能的类别的最新文章。下面是我如何框架的查询

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


现在我将在结果中获得两次Article 7。目前我正在代码中过滤重复的结果。如何在tarantool中有distinct(urlhash)类型的选项。

其中有两个可能的选项

  • 第一个是过滤客户端的所有内容
  • 第二个是使用Lua存储过程。例如:

    函数select_与_distinct() 本地ca=box.space.category\u文章 对于v,成对(ca.index.secondary:选择{ {'nyt','speaker'},{iterator='LE',limit=5})do --过滤。。。 终止 结束


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


    是的,但这仍然是有限的,因为在为limit=5返回的5篇文章中,我们可能有许多重复的文章。我正在寻找一种更好的方法来指定唯一文章的限制。