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 に答える