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

Database 将数据库结果存储在本地存储中以增加加载时间?,database,firebase,local-storage,Database,Firebase,Local Storage,我有一个关于数据库设计的问题。我正在创建一个应用程序,它将从数据库中获取有关用户附近某些地标的数据。该应用的忠诚度非常高,因此相同的用户经常返回,并经常查询数据库中的相同项目 数据库中的项目不会改变——它们都是地理特征,因此数据不会改变。对于我们目前使用的firebase数据库,尽管它有很多优点,但对于我们得到的查询数量来说,它的成本似乎相当高。我们正在寻找减少数据库查询负载的方法 一种解决方案是,每次用户发出数据库请求时,将结果复制到本地存储。然后,该函数首先检查条目是否存储在本地存储器中,并

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

数据库中的项目不会改变——它们都是地理特征,因此数据不会改变。对于我们目前使用的firebase数据库,尽管它有很多优点,但对于我们得到的查询数量来说,它的成本似乎相当高。我们正在寻找减少数据库查询负载的方法

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


这听起来在实践中效果不错,但是我从来没有听说过有人这样做,所以我想得到整个社区的意见。这是一种减少数据库负载(以及加载时间)的好方法,还是其他人有任何其他建议?

您没有说是否使用实时数据库或Firestore,但这两个数据库的客户端SDK会自动将从数据库读取的数据缓存并持久化到本地存储。当服务器上的数据未更改时,将使用本地缓存,并且在使用缓存数据时,不会向您收取任何读取操作的费用。您实际上不需要添加自己的本地缓存,除非您需要对该数据执行客户端SDK无法执行的操作


这些都有记录。例如,例如

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

1-本地存储的用途有限

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

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

通过向本地存储中添加数据来删除数据库上的负载不是一个好主意。还有其他解决办法。您可以在应用程序和关系数据库之间添加一个无sql数据库,该数据库的速度要快得多。您可以在服务器端应用程序中使用缓存,而不是从数据库中获取数据,您可以从内存中获取数据

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

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

有效失效:
你的数据每隔几天就会失效吗?还是每隔几个小时?
从您在问题中所写的内容来看,数据似乎没有频繁更改,因此您可以将该项长期放入缓存。

虽然我喜欢这个问题,但我还是冒险说,它太宽,无法按原样回答。说它很贵只是相对于你认为贵的东西而言。我可能会认为10000次查询100美元是“便宜的”,而你可能会认为它是“昂贵的”。然后进行数据库设计和编码;您可能已经过度反规范化了(!)您的结构,以至于导致过多的数据库点击。或者,它可能没有被正确地反规范化,导致您必须读入大块数据才能得到子集。好问题,但没有代码和结构,无法回答。