首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时快照的防火墙数据结构及回溯性分析

实时快照的防火墙数据结构及回溯性分析
EN

Stack Overflow用户
提问于 2016-07-25 09:38:34
回答 1查看 81关注 0票数 0

我正试图决定为下面的场景构造数据的最佳方式。我有10000只羊在一个有50个相互连接的田地的农场里。我跟踪每一只羊,当他们进入和离开田野。我希望能够:

  • 回顾分析每只羊在一段时间内的活动情况
  • 我还想分析每一个领域的使用情况。
  • 立即知道任何给定的羊目前在哪个领域。
  • 立刻知道哪只羊在一个给定的田地里。

我读过文档关于数据去规范化的文章,我很感激我可以使用查询等来做任何事情。

我的问题是:是否应该将输入/退出数据复制到这样的绵羊和字段节点?:

代码语言:javascript
复制
{
    sightings: {
        uniqueSheepId: {
            FirebaseAutoId: {
                type: enter
                fieldId: uniqueFieldId
                timestamp: xxxxxxxx.xxxxx
            }
        }
    }
}

代码语言:javascript
复制
{
    sightings: {
        uniqueFieldId: {
            FirebaseAutoId: {
                type: enter
                sheepId: uniqueSheepId
                timestamp: xxxxxxxx.xxxxx
            }
        }
    }
}

这似乎是一个很好的方法,以获得一个实时快照多少羊在任何给定的领域。它也使我们可以很容易地看到羊现在在哪里,它在哪里,没有做任何查询。显然,数据集的大小将比我使用查询时的两倍大,但是获取数据的简单性是否超过了存储数据的成本?

我已经看到(并理解)聊天室/成员的例子,但我认为我想从羊和田野的角度回顾分析会员/使用情况的愿望使我的问题与这些答案略有不同。任何建议都会很好。

EN

回答 1

Stack Overflow用户

发布于 2016-07-25 12:56:25

您当前的数据结构就足够了:

代码语言:javascript
复制
sightings: {
    uniqueSheepId: {
        FirebaseAutoId: {
            type: enter
            fieldId: uniqueFieldId
            timestamp: xxxxxxxx.xxxxx
        }
    }
}

你不需要重复。您可以为每个需求创建一个查询。

但是,我已经准备好了很多次,在Firebase中创建更多平坦的树要比创建更少的深树要好。下面推荐的结构会更好一些查询而不是其他查询,但是我相信总体--它会更好,并允许在将来添加fieldssheep的其他属性。

因此,为了限制冗余数据,我将设置三种不同的树,sheepfieldssightings

代码语言:javascript
复制
sheep: {
    uniqueSheepId: {
        currentField: uniqueFieldId,
        sightings: {
            FirebaseAutoId: uniqueSightingsId,
            ...
        }
    }
}
代码语言:javascript
复制
fields: {
    uniqueFieldId: {
        numberOfSheep: number,
        sightings: {
            FirebaseAutoId: uniqueSightingsId,
            ...
        }
    }
}
代码语言:javascript
复制
sightings: {
    FirebaseAutoId: {
        type: enter,
        sheepId: uniqueSheepId,
        fieldId: uniqueFieldId,
        timestamp: xxxxxxxx.xxxxx
    }
}

回顾性分析每只羊在特定时间内的活动情况

您可以查询羊的运动:sheep/uniqueSheepId/sightings

我还想分析每个领域的使用情况。

您可以查询该字段的使用:fields/uniqueFieldId/sightings

立即知道任何给定的羊目前在哪个领域。

您可以查询字段中的任何给定绵羊:sheep/uniqueSheepId/currentField

立刻知道哪只羊在一个给定的田地里。

在JavaScript中,您可以这样查询:

代码语言:javascript
复制
var ref = firebase.database().ref("sheep").orderByChild("currentField").equalTo(uniqueFieldId);

在任何受Firebase支持的语言中,都可以执行等效的操作。

所有这些都假设您正在实时地正确地更新和推送数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38564309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档