我正在构建一个社交网络类型的网站。我正在使用Python和OrientDB。我要做的是获取与user2
相关联的所有用户(user3
,user4
,user1
等)的帖子并显示这些帖子在user1
的新闻Feed中。
为此,我使用Graphity模型检索顶部' K'新闻有效率。但是,当用户向下滚动并且所有顶级' K'饲料已经显示给他了。现在我想从确切的地方取出K'没有了,即。 ' K + 1',' K + 2'等。执行此操作的正确或有效方法是什么?
我可以考虑检索顶级' 2K'再次播放新闻,然后在消费时,检索顶级' 3K'饲料等。但是,正如你所看到的,做到这一点非常重要。
是否有针对此问题的预定义解决方案或您可以想到的某种解决方案,以便我可以继续从我离开的位置获取帖子,一旦顶部' K'首先检索Feed。
答案 0 :(得分:2)
如果您希望存储混合值,建议您使用链接图。它将更有效,因为您不必遍历整个列表。通过实验,我发现你可以扩展一系列键,它真的很有效!
语法如下:
select expand(feed[3-5]) from <#user:id>
对于无限滚动,您可以在服务器端函数中构建查询,以选择所需位置的项目:-)如果键表示地图中的位置,则可以获取最后一个元素的位置映射并使用它来获取最后的x个元素。
方括号允许:
以下是使用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)
OrientDB支持分页:http://orientdb.com/docs/last/Pagination.html