1

我正在构建一个简单的图表,我想请教你如何做到这一点的建议,这样当它添加更多的顶点和边时,它仍然会表现得很好。我的图表布局是这样的。

user --> follows --> user (userVertex)
user --> generates --> activity (activityVertex)

这是我的查询:

select
from (
 select
 flatten(out[label='generates'].in)
 from (
  select
  flatten(out[label='follows'].in)
  from #6:0
 )
)
where @class = 'activityVertex'
order by id desc
limit 20

当我进行分页(例如显示更多活动)时,我只需将其添加到where clause

where @class = 'activityVertex'
and id < 1234
limit 20

上面是1234显示的最后一个活动的 id。

当一个人关注 < 10 个用户并且每个用户有 < 500 个活动时,这一切正常。但是当它变得更大时,它会对order by按日期对所有活动进行排序以向用户呈现活动流的子句施加压力。

我想知道推特是怎么做到的?是否有一些设计原则,即使是那些不严格与 OrientDB 相关的,我还没有应用这将使这成为可能?

4

1 回答 1

0

您可以使用 SKIP 关键字。SKIP+LIMIT 变魔术:

SELECT ... SKIP 0  LIMIT 20  // 1st page
SELECT ... SKIP 20 LIMIT 20 // 2st page
SELECT ... SKIP 40 LIMIT 20 // 2st page
于 2012-08-12T10:44:02.903 回答