如何在Firebase中存储10个最新对象?

时间:2015-11-07 10:42:46

标签: firebase

我希望Firebase能够保存最近添加的10个对象,但不会更多。我将使用Web服务器日志作为示例。

假设我有一个程序正在观看Web服务器日志。每次在日志中创建新条目时,我都希望我的Firebase从该条目中获取IP地址。但我只需要Firebase来存储最后发送的10个IP地址,而不是每次收到的IP地址。

我可以想象通过在Firebase中设置10个对象来做到这一点,比如说:

app/slot0
app/slot1
app/slot2
app/slot3
etc

然后PATCH slot0添加IP,完成后更新时隙跟踪器:

currentSlot++

当currentSlot达到10时,它会回绕并指向0

if(currentSlot > numSlots) currentSlot = 0;

因此它基本上是10个对象的列表,我手动跟踪哪个插槽是下一个。通过这种方式,我不需要存储无限数量的项目,只需要存储最后的10项。每次更改时,收听所有这些插槽的客户端都会获得更新。

我的问题是,这是否是最佳方式?我无法帮助您思考更有效的方法。

1 个答案:

答案 0 :(得分:2)

有100种不同的方法可以做到这一点,但这是一个想法:

假设一个应用程序在一个数组(0-9)中存储了10个IP,而在索引0处的IP是最新的IP连接。

当建立新连接时,索引9处的IP将从其数组中删除,并且0-8处的IP使其索引递增(索引0处的IP移至索引1,索引1处的IP移至索引2等) )。

然后在项目0处插入最新的IP。阵列数据将写入Firebase。

根据您的平台,这很容易,因为在索引0处插入IP并删除索引10,然后写入firebase。

但是,尽量避免将数组写入Firebase。有更好的方法可以做到这一点 - 具有IP和时间戳的节点可以很好地工作。

connection_events
   connection_id_0123
      ip: 192.168.1.1
      timestamp: 20151107133000
   connection_id_4566
      ip: 198.168.1.123
      timestamp: 20151107093000

connection_id由childByAutoId生成或推送,因此它们是随机的'但是你总是有时间戳来订购。

使用上述结构的另一个想法是Firebase查询最旧的结构并删除该节点,然后添加最新的节点。这将起作用,因为排序由时间戳控制。