通过应用程序不断更新数据库,效率不高?
Posted
技术标签:
【中文标题】通过应用程序不断更新数据库,效率不高?【英文标题】:Updating a Database Constantly Through an App, Not Efficient? 【发布时间】:2021-04-01 11:35:40 【问题描述】:我需要不断更新应用程序使用的数据库。我到数据库的唯一链接是通过应用程序。
所以问题是更新是关于所有用户数据的大量计算,可能有点重,我不知道在某人手机的应用程序后台运行这个是否真的最有效的方法。
有没有办法在不影响应用程序效率的情况下不断访问和更新数据库?或者也许将代码托管在另一个可以持续运行的地方?这样我就不会使用用户的电话资源来进行所有计算。
我正在使用 Flutter SDK 制作应用,并使用 Firebase 的 Cloud Firestore 作为数据库。
【问题讨论】:
这对你有帮助吗pub.dev/packages/firebase_database ? 目前还不清楚您要解决的问题是什么。是否有一些代码没有按您期望的方式工作?如果是这样,请编辑问题以显示它并更详细地解释。 @DougStevenson 我正在尝试在应用程序中运行大量的数据库计算。但我会使用用户的电话资源,也许这不是最有效的方法。我想知道是否有更好的方法来做到这一点。 是的,将这项工作卸载到您控制的后端,这样它就可以在没有用户参与的情况下完成。 【参考方案1】:听起来您需要云功能。在通常有服务器来处理数据的地方,您可以创建按需运行的功能,无需管理服务器。它可以根据您的需求进行扩展,您只需为使用的内容付费。
我个人发现 Google Cloud Functions 似乎与 Flutter 配合得最好,但都可以。
这些系统的主要 3 个供应商是:
Google Cloud Functions
AWS Lambda
Azure Functions
【讨论】:
【参考方案2】:不是你的确切设置,但几周前我不得不解决一个非常相似的问题。
最后我们修改了架构,和你的差不多:
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 分钟。由于他们输入的数据本身是有时间偏差的,这没什么大不了的。屏幕顶部的彩色线条显示下一次更新的时间。
【讨论】:
以上是关于通过应用程序不断更新数据库,效率不高?的主要内容,如果未能解决你的问题,请参考以下文章