至于有关这个主题类似的问题和ChildEventListener
,也没有相关的答案,所以我的继承人。
我有一个地方SQLite
它包含所有DB的数据,我也有我的新条目或所有用户实时变化更新火力地堡实时数据库。我目前正在使用的做ChildEventListener
如下:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getDatabase().getReference();
DatabaseReference childRef = rootRef.child("my_root");
ChildEventListener eventListener = new ChildEventListener()
{
....
};
childRef.addChildEventListener(eventListener);
至于功能,有了这个代码,我可以拿到孩子的实时变化,得到新的条目,删除孩子的一切我需要的,但有一个问题。当听众负载了这个特定的活动中,onChildAdded
听众被调用的次数巨额关于这根每一个孩子,在文件上所述:
child_added每一个新的子项被添加到指定的路径时触发一次为每个现有子,然后再
所以,我虽然获得焦点,我真的很需要和我有做过的项目:
rootRef.orderByKey().startAt("-WhatTF123456789")...
但后来因为它听新条目,而不是所有的人我已经失去了我的CRUD功能。
所以,我想出了一个解决方案。保持节点与所有已经取得的火力点数据库,并与所有已经阅读并所做的更改到本地数据库知道谁需要更新的用户节点的变化,然后用addChildEventListener
这个特定的节点。但是,这似乎是多余的。
什么是我的选择来处理这种情况?
该
onChildAdded
监听器被调用的次数巨额查找有关此根每一个孩子。
正如你已经提到并作为文档状态,这是预期的行为。通常情况下,不建议附加ChildEventListener
的节点(根节点)在包含数据的巨大的量。请注意这个做法,因为下载大量数据的时候,你可以得到误差修改,如:OutOfMemoryError错误。这是发生,因为你暗中下载您正在收听的整个节点,它下面的所有数据一起。该数据可能存在简单属性,或作为复杂的对象。因此,它可以被认为是资源和带宽的浪费。在这种情况下,最好的办法是扁平化数据库尽可能。如果你是新的NoSQL数据库,这种做法被称为非规范化和通常的做法是,当涉及到火力地堡。为了更好地理解,我建议你看看:
另请注意,当你复制数据,有一两件事是必须牢记。在您添加数据以同样的方式,你需要保持它。随着换句话说,如果你想更新/ detele一个项目,你需要做的是在每一个地方,它的存在。
我还建议你看到从下面的帖子我的回答的最后一部分:
这是云计算公司的FireStore,但同样的规则也适用于火力地堡实时数据库。
但后来因为它听新条目,而不是所有的人我已经失去了我的CRUD功能。
在火力地堡的一切都是关于听众。你不能在节点内获取物体实时更新,除非你正在听他们。所以,你不能限制结果,并期望得到的对象,你是不是听更新。如果你需要得到一个节点中的所有对象的更新,你要听他们。因为这种做法是不切实际的,你可以使用非规范化如上或限制使用的查询,可以帮助你限制了数据的,你从数据库中获取的量的结果解释。关于您的解决方案,第二个是更喜欢,但你也可以考虑另一种方法,它能够在加载数据小块按照timestamp
根据任何其他财产,你需要财产,或。
编辑:根据您的评论:
能否请您为每个解决方案(1.denormalization,2.my溶液)审查使用的带宽和资源,其中一个是真正的首选测试?
所有的数据建模,允许使用情况,一个应用程序需要。不幸的是,我不能这样做测试,因为这真的取决于应用程序的使用情况和数据,它所包含的量。这意味着,对于一个应用程序是什么在起作用,可能是不够的另一个应用程序。因此,测试可能并不适合每一个人正确的。非规范化过程或您的解决方案是完全依赖于你打算如何查询数据库。在上面的列表中,我添加了一个新的资源这是我的有关答复的NoSQL数据库非规范化tehnique。希望它也将帮助功能参观者。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句