OrientDB - twitter就像实现和订购一样

时间:2012-08-11 08:41:57

标签: database-design nosql graph-databases orientdb

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

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无关的严格设计原则,我尚未申请哪些可以实现这一目标?

1 个答案:

答案 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