【发布时间】:2017-02-07 15:33:56
【问题描述】:
我在我的 Android 应用上使用 Firebase 数据库。通常,它工作正常。但是当数据库越来越大时,查询性能越来越差。我在数据库上添加了大约 5k 条记录(在“elk”和“su”节点下),然后我在数据库上查询(在“cut”和“user”节点上),但所有查询都非常非常慢。我在数据库规则上定义了数据索引,但它不起作用。我该如何解决这个问题?
这是我的疑问:
// query to get the zones followed by user
FirebaseDatabase.getInstance()
.getReference()
.child("user")
.child(userID)
.child("zones");
// query to get cuts on a zone
FirebaseDatabase.getInstance()
.getReference()
.child("cut")
.child(cutType)
.orderByChild("zoneID")
.equalTo(zoneID);
【问题讨论】:
-
当你说非常非常慢的时候。你的意思是多慢?你有任何测试结果或什么的吗?我们如何知道网络是否正常或手机运行是否正常,在此之前应该有更具体的证据证明您的问题,我们只能假设并指责 firebase 本身运行缓慢。请尝试使用最小、中、大型数据库等生成更具体的测试结果。同时牢记网络强度、手机缓存性能等各种因素。
-
您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 Firebase 数据库控制台中的导出按钮轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
-
如果速度很慢,几乎无一例外是您的网络带宽与您正在下载的数据的函数。我没有立即看到任何看起来非常大的东西,而且您的索引对于查询来说看起来是正确的。如果您可以在 jsfiddle/jsbin 中重现该问题,我们可以尝试一下,看看我们的性能与您的相比如何。
-
当然,我在不同的网络连接、不同的手机、最小和大型数据库上进行了测试。但没有任何改变,查询非常慢(大约需要 4 分钟)。我没有责怪火力基地或任何人。我只是想知道我做错了什么。然后我根据马修伯格的回答解决了这个问题。现在查询不慢了,可以正常工作了。
标签: android database firebase firebase-realtime-database query-performance