像gun.get({startkey,endkey})这样的东西是怎么做的?
发布于 2018-02-24 01:27:31
@qwe123wsx @sebastianmacias为延迟道歉!最初发布在:https://github.com/amark/gun/issues/479
wire规范对此有一个协议,但它还没有实现。它看起来像这样:
gun.on('out', {get: {'#': {'>': 'a', '<': 'b'}}});然而,这还不起作用。相反,我会推荐:
(1)分页行为在不同的应用之间有很大的不同,我们很难创建一个“一刀切”的解决方案,所以如果你能实现自己的*分页并将其作为用户模块提供,那么我们就可以从你的经验中学习(哪些有效,哪些无效),并将最佳解决方案作为核心的一部分。
(2)你的应用程序在没有分页的情况下可能会工作得很好,虽然它可以构建(它的目标是在1.0之后),然后随着你的应用程序变得越来越流行,一旦你需要它并且它是可用的,添加它应该是相当容易的,而不需要太多的重构。
... *如何构建自己的?
在这方面有很多很好的文章,我所见过的最好的一篇是来自Neo4j的关于如何在图形数据库(也适用于枪) https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html中做到这一点的文章。
另一个粗略的想法是基于分页或时间对数据进行建模。因此,不是将所有tweet放入用户的tweet表中,而是用户的tweet表是天(或周)表,然后将tweet放入week表中。现在,当您加载数据时,您可以很容易地扫描/跳过一周,同时它是超级带宽效率。
粗略的伪代码:
function onTweetSend(tweet){
gun.get('user').get('alice').get('tweets').get(Date.uniqueYear() + Date.uniqueWeek()).set(tweet)
}
function paginateUserTweet(howMany, cb){
var range = convertToArrayOfUniqueWeekNamesFromToday(howMany);
var all = [];
range.forEach(function(week){
gun.get('user').get('alice').get('tweets').get(week).load(function(tweets){
all.push(tweets);
if(all.length < range.length){ return }
all = flattenArray(all);
cb(all);
});
});
}https://stackoverflow.com/questions/48953233
复制相似问题