我正在构建一个简单的图形,我想询问你如何做的建议,这样当它增加了更多的顶点和边时,它仍然会表现得很好。我的图表的布局是这样的。
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。
当一个人跟随&lt; 10个用户和每个用户都喜欢&lt; 500项活动。但是当它变得越来越大时,它会对order by
子句施加这样的压力,按日期排序所有活动,以向用户呈现活动流。
我想知道twitter是怎么做到的?是否有一些设计原则,即使是与OrientDB无关的严格设计原则,我尚未申请哪些可以实现这一目标?
答案 0 :(得分: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