gun - GUN 中如何进行分页?

标签 gun

你如何做类似gun.get({startkey, endkey})这样的事情?

以前:https://github.com/amark/gun/issues/479

最佳答案

@qwe123wsx @sebastianmacias 对于延迟表示歉意!最初发布于:https://github.com/amark/gun/issues/479

线路规范有一个协议(protocol),但尚未实现。它看起来像这样:

gun.on('out', {get: {'#': {'>': 'a', '<': 'b'}}});

但是这还不起作用。我建议改为:

(1) 一个应用程序与另一个应用程序之间的分页行为非常不同,我们很难创建一个“一刀切”的解决方案,因此如果您可以实现自己的*分页,将会非常有帮助并将其作为用户模块提供,然后我们可以从您的经验中学习(哪些有效,哪些无效),并将最佳解决方案作为核心的一部分。

(2) 您的应用程序可能会在没有分页的情况下正常工作,同时它可以被构建(它的目标是 1.0 之后),然后随着您的应用程序变得越来越流行,应该很容易添加而无需分页大量重构,一旦您需要它并且它可用。

... * 如何构建自己的?

关于这方面有很多好文章,我见过的最好的一篇来自 Neo4j,介绍了如何在图形数据库中做到这一点(也适用于枪)https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html .

另一个粗略的想法是根据分页或时间对数据进行建模。因此,与其将所有推文放入用户的推文表中,不如将用户的推文表设为天(或周)表,然后将推文放入周表中。现在,当您加载数据时,您可以非常轻松地扫描/跳过每周,同时具有 super 带宽效率。

粗略的伪代码:

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);
    });
  });
}

关于gun - GUN 中如何进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953233/

相关文章:

gun - 使用 gundb 进行 JWT 身份验证

p2p - Orbitdb(基于IPFS)和gun有什么区别?

javascript - gunJS 的离线优先功能能走多远?

javascript - 如何从集合中删除 Node ?

javascript - gun db中公共(public)空间、用户空间、卡住空间的简单例子

reactjs - 将 Gun 与 Redux 一起用于 React 的规范方法/示例

javascript - 如何在 react 中使用键/值对象

gun - 从开发服务器切换到实时服务器时如何确保客户端不同步

javascript - 如何通过单个请求获取多个节点?