热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase观察大型数据库的速度很慢-Firebaseobserveslowforlargedatabase

Iamworkingonanappdisplayingplaces(downloadedfromfirebase)basedonuserlocation.我正在开发一个应

I am working on an app displaying places (downloaded from firebase) based on user location.

我正在开发一个应用程序,根据用户位置显示位置(从firebase下载)。

I have currently 5k entries and they are displayed in about 10seconds. I plan to have 80k entries and I don't want users to wait that long.

我目前有5k条目,它们在大约10秒内显示。我计划有80k条目,我不希望用户等那么久。

What I did : I created a Place class, I do 'observe'(.value) on my firebase ref and on each child I put each element in an attribute of the Place class. Then the place:Place = Place(attributes) id added to an array:Place until all places have been downloaded.

我做了什么:我创建了一个Place类,我在firebase ref上'观察'(。value),并且在每个子元素上我将每个元素放在Place类的属性中。然后将地点:Place = Place(attributes)id添加到数组中:放置直到所有地点都已下载。

self.ref.queryOrderedByKey().observe(.value, with: {(snapshot) in
                    if snapshot.childrenCount > 0 {
                        for place in snapshot.children.allObjects as! [DataSnapshot] {

When all places are in the array I compare places locations with the user location and sort the array to display them by distance in a tableview.

当所有位置都在数组中时,我将位置与用户位置进行比较,并对数组进行排序,以便在tableview中按距离显示它们。

What I tried: I also tried to use GeoFire but it is slower.

我尝试了什么:我也尝试使用GeoFire,但速度较慢。

How the db looks like (80k elements) :

db的外观如何(80k元素):

{
"users": {
    "DFkjdhfgYG": {
         "id":"DFkjdhfgYG"
        ,"key2":"value"
        ,"key3":"value"
        ,"key4":"value"
        ,"key5":"value"
        ,"key6":"value"
        ,"key7":"value"
        ,"key8":"value"
        ,"key9":"value"
        ,"key10":"value"
        ,"key11":"value"
        ,"key12":value
        ,"key13":value
        ,"key14":"value"
        ,"key15":"value"
        ,"key16":"value"
        ,"key17":"value"
        ,"key18":"value"
        ,"key19":"value"
        ,"key20":"value"
        ,"key21":value
        ,"key22":value
        ,"key23":value
        ,"key24":value
        ,"key25":value
        ,"key26":"value"
        ,"key27":value
        ,"key28":value
        ,"key29":"value"
        },
     "BVvfdTRZ": {
         "id":"BVvfdTRZ"
        ,"key2":"value"
        ,"key3":"value"
        ,"key4":"value"
        ,"key5":"value"
        ,"key6":"value"
        ,"key7":"value"
        ,"key8":"value"
        ,"key9":"value"
        ,"key10":"value"
        ,"key11":"value"
        ,"key12":value
        ,"key13":value
        ,"key14":"value"
        ,"key15":"value"
        ,"key16":"value"
        ,"key17":"value"
        ,"key18":"value"
        ,"key19":"value"
        ,"key20":"value"
        ,"key21":value
        ,"key22":value
        ,"key23":value
        ,"key24":value
        ,"key25":value
        ,"key26":"value"
        ,"key27":value
        ,"key28":value
        ,"key29":"value"
        }
  }
}

Now I don't know what to do and I absolutely need to user Firebase.

现在我不知道该怎么做,我绝对需要使用Firebase。

Can you help me to improve the way I download firebase db elements, or to show me another way to do it, to make the whole process faster ?

你能帮助我改进我下载firebase db元素的方式,或者告诉我另一种方法,让整个过程更快吗?

Thanks !

谢谢 !

1 个解决方案

#1


2  

You're using a for loop in a function that is being called the same number of times as there are children in your database path, making the for loop completely useless and overkill, which can add extra time to the whole process.

你在函数中使用for循环的次数与数据库路径中的子项相同,这使得for循环完全无用且过度,这会给整个过程增加额外的时间。

Another thing that you can do is have this be called on a different thread and making it the highest priority over the rest of your code. Here's how to do both of those:

您可以做的另一件事是在不同的线程上调用它,并使其优先于其余代码。以下是如何做到这两点:

func handleFirebase() {
    DispatchQueue.global(qos: .userInteractive).async {
        self.ref.queryOrderedByKey().observe(.value, with: { (snapshot) in

            guard let value = snapshot.value as? String else { return }
            let key = snapshot.key

            print("KEY: \(key), VALUE: \(value)")

        }, withCancel: nil)
    }
}

推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • vue使用
    关键词: ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
刘刘刘存乐_626
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有