我正在构建一个简单的图表,我想请教你如何做到这一点的建议,这样当它添加更多的顶点和边时,它仍然会表现得很好。我的图表布局是这样的。
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 相关的,我还没有应用这将使这成为可能?