通过应用程序不断更新数据库,效率不高?

问题描述

我需要不断更新应用程序使用的数据库。我与数据库的唯一链接是通过应用程序。

所以问题是更新是关于所有用户数据的大量计算,可能有点繁重,我不知道在某人手机的应用程序后台运行这个是否真的最有效的方法

有没有办法在不渲染应用程序效率的情况下不断访问和更新数据库?或者也许将代码托管在另一个可以持续运行的地方?这样我就不会使用用户的电话资源来进行所有计算。

我使用 Flutter SDK 制作应用程序,并使用 Firebase 的 Cloud Firestore 作为数据库

解决方法

听起来您需要云功能。在通常有服务器来处理数据的地方,您可以创建按需运行的功能,无需管理服务器。它可以根据您的需要进行扩展,您可以按使用量付费。

我个人认为 Google Cloud Functions 似乎与 Flutter 配合得最好,但一切正常。

这些系统的主要 3 个提供商是:

Google Cloud Functions

AWS Lambda

Azure Functions

,

不是您的确切设置,但几周前我不得不解决一个非常相似的问题。

最后我们修改了架构,与您的类似:

app <==> database

数据库实际上只有三张表,但是客户要求添加几个复杂的历史统计信息。问题在于无法按照要求“实时”计算这些统计数据(我们提出了几种解决方案,每次都会要求一个新功能,该功能准确地、仔细地否定了我们的设置) .

最后,我们又添加了几个表格,其中包含“当前情况”和“最后预先计算的情况”,因此访问“LPS”的速度非常快。并且:

app <== database[LPS]
    ==> database[updates]  ===> 
        database[history]  ===>  big background app on another server 
        database[CS]       <===

该数据库被云服务器上的另一个应用程序访问,该应用程序将上次更新移动到“acquired_updates”中,然后处理这些加上历史记录和其他数据并预先计算下一个时间点。同时,用户愉快地访问了以前的版本。当 CS 完成时,我们交换表指针,以便从那一刻起访问将在 CS 上完成,释放 LPS 表——然后可以安全地清除并释放它们以成为下一个 CS。

整个计算目前大约需要 8 分钟,因此用户看到数据的平均延迟为 4 分钟。由于他们输入的数据本身是有时间偏差的,这没什么大不了的;屏幕顶部的彩色线条显示下次更新的时间。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...