首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据体中的高级排序查询

数据体中的高级排序查询
EN

Stack Overflow用户
提问于 2019-01-31 08:18:44
回答 1查看 533关注 0票数 2

想象一下我有演员和电影。对于给定的演员列表,如何编写一个查询,返回演员参与的五部最新电影的5元组列表(按电影日期降序)?

更具体地说:给出了一个名为参与者和模型的:db/id的列表如下:

演员:

代码语言:javascript
运行
复制
:db/id
:actor/name str
:actor/movie ref

电影:

代码语言:javascript
运行
复制
:db/id
:db/name str
:db/date inst

我想写一个查询,如:

代码语言:javascript
运行
复制
(d/q '[:find ?actor ???????
       :in $ [?actor ...]
       :where ??????????] snapshot actors)

预期结果:

代码语言:javascript
运行
复制
[[1 [2 3 4 5 6]
  7 [8 9 10 11 12]]

其中17是演员ids,2,3,4,5,6,8,9,10,11,12是电影ids。

现在,我有一种强烈的感觉,这种查询是无法构建的。如果我是对的,我如何才能得到这些信息块(想象一下,每个演员都有成堆成吨的电影被投进去,太多的电影无法在记忆中保存)?

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 11:10:56

这是一个普遍的问题--如果您有太多的数据无法在内存中使用,那么可能像map/reduce这样的东西会更好地工作。那么多的数据也很难排序--如果不同时对内存中的所有内容进行排序,如何进行排序?分块排序并不能很好地与现实相符.

一般的方法是Richard在您的评论中链接到的--手工对输出进行排序。

如果您不使用查询来提取实体,而只对实体id和要排序的值进行查询,这也会有所帮助。这样,data就不需要将所有数据的块提取到对等程序中了。相反,您可以在对相对稀疏的查询结果进行排序之后,提取所需的数据。

这里另一件可能有帮助的事情是为您需要排序的属性使用一个单独的隔断。这样,您就可以确保Datomic为获得用于排序的稀疏数据而必须拉出的块只包含正在排序的属性的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54456086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档