实现无限滚动新闻Feed图模型

时间:2015-06-26 11:05:30

标签: graph-databases orientdb gremlin news-feed

我正在构建一个社交网络类型的网站。我正在使用Python和OrientDB。我要做的是获取与user2相关联的所有用户(user3user4user1等)的帖子并显示这些帖子在user1的新闻Feed中。

为此,我使用Graphity模型检索顶部' K'新闻有效率。但是,当用户向下滚动并且所有顶级' K'饲料已经显示给他了。现在我想从确切的地方取出K'没有了,即。 ' K + 1',' K + 2'等。执行此操作的正确或有效方法是什么?

我可以考虑检索顶级' 2K'再次播放新闻,然后在消费时,检索顶级' 3K'饲料等。但是,正如你所看到的,做到这一点非常重要。

是否有针对此问题的预定义解决方案或您可以想到的某种解决方案,以便我可以继续从我离开的位置获取帖子,一旦顶部' K'首先检索Feed。

2 个答案:

答案 0 :(得分:2)

如果您希望存储混合值,建议您使用链接图。它将更有效,因为您不必遍历整个列表。通过实验,我发现你可以扩展一系列键,它真的很有效!

语法如下:

select expand(feed[3-5]) from <#user:id>

对于无限滚动,您可以在服务器端函数中构建查询,以选择所需位置的项目:-)如果键表示地图中的位置,则可以获取最后一个元素的位置映射并使用它来获取最后的x个元素。

方括号允许:

  • 按一个索引过滤,例如out()[0]
  • 按多个索引过滤,例如out()[0,2,4]
  • 按范围过滤,例如out()[0-9]

以下是使用OrientGraph中的OrientDB function

的示例

获取机会主义

首先,使用command获取最后一个键值:

var lastKey = db.command("sql","select last(feed.keys()) as lastKey from <#user:id>")[0].getRecord().toMap()["lastKey"];`

其次,使用您想要的键执行查询:

return db.command("sql","select expand(feed[" + (parseInt(lastKey) -20).toString() + "-" +  lastKey + "]) from <#user:id>");

插入机制

首先,获取最后一个键值:

var lastKey = db.command("sql","select last(feed.keys()) as lastKey from <#user:id>")[0].getRecord().toMap()["lastKey"];`

其次,put最后一个键值的新元素递增1:

db.command("sql","update <user-id> put feed = \""(parseInt(lastKey) + 1).toString()"\", <#newelem:id>

希望你喜欢我的解决方案。

答案 1 :(得分:0)