将数据库结果存储在本地存储中以增加加载时间?

时间:2018-11-30 09:28:46

标签: database firebase local-storage

我有一个有关数据库设计的查询。我正在创建一个应用,该应用将从数据库中获取用户附近某些地标的数据。该应用程序的忠诚度很高,因此相同的用户经常返回,并经常在数据库中查询相同的项目。

数据库中的项目不会更改-它们都是地理特征,因此数据不会更改。对于数据库,我们目前正在使用firebase,尽管它具有所有优势,但对于我们获得的查询数量而言,代价似乎相当昂贵。我们正在寻找减少数据库查询负担的方法。

一种解决方案是用户每次发出数据库请求时,都将结果复制到本地存储中。然后,该功能首先检查该条目是否存储在本地存储中,并且只有在找不到该条目时才发送数据库查询。

这听起来像在实践中效果很好,但是我从未听说过其他人这样做,因此我想征询整个社区的意见。这是减少数据库负载(以及负载时间)的好方法,还是其他人有其他建议?

2 个答案:

答案 0 :(得分:0)

您没有说是使用实时数据库还是Firestore,但是这两个数据库的客户端SDK都会自动缓存数据并将其持久化到从数据库读取的本地存储中。当服务器上的数据没有更改时,将使用本地缓存,并且在使用缓存的数据时,无需为任何读取操作付费。您真的不需要添加自己的本地缓存,除非您需要使用客户端SDK无法完成的数据做些事情。

全部记录在案。例如,对于Android using Realtime DatabaseAnd for Firestore clients

答案 1 :(得分:0)

将查询结果添加到本地存储中不是一个好主意:

1-本地存储出于某些有限目的

2-并非所有浏览器(甚至不是所有版本)都支持本地存储

3-所有主要浏览器的本地存储限制为5MB

通过将数据添加到本地存储中来减轻数据库负载不是一个好主意。还有其他解决方案。您可以在应用程序和关系数据库之间添加一个更快的no sql数据库。您可以在服务器端应用程序中使用缓存,而不是从DB中获取数据,而可以从内存中获取它们。

如果选择缓存,则必须在无效和选择正确的缓存方面选择正确的策略:

正确的缓存: 如果每个区域中只有一台服务器,则在内存缓存(堆内存)中选择此服务器 分布式缓存(在另一个服务器上的内存中,例如AWS Memcached或Redis) 等等

有效无效:
每隔几天您的数据会失效吗?还是每两个小时? 从您在问题中写的内容来看,数据似乎不经常更改,因此您可以将项目长时间放置在缓存中。