【问题标题】:Storing Database Results in Local Storage to increase load times?将数据库结果存储在本地存储中以增加加载时间?
【发布时间】:2018-11-30 18:21:01
【问题描述】:

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

数据库中的项目不会改变 - 它们都是地理特征,因此数据不会改变。对于我们目前使用的数据库,firebase 具有所有优点,但对于我们获得的查询数量来说似乎相当昂贵。我们正在寻找减少数据库查询负载的方法。

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

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

【问题讨论】:

  • 虽然我喜欢这个问题,但我不敢说它太宽泛,无法按原样回答。说它很贵只是相对于你认为的贵。我可能认为 10,000 次查询 100 美元“便宜”,而您可能认为它“昂贵”。然后导致数据库设计和编码;您可能已经过度非规范化(!)您的结构,导致过多的数据库命中。或者它可能没有被正确地非规范化,导致您必须读取大量数据才能获得子集。再说一遍,好问题,但没有代码和结构,无法回答。

标签: database firebase local-storage


【解决方案1】:

您还没有说您使用的是实时数据库还是 Firestore,但是这两个数据库的客户端 SDK 会自动将数据缓存并保存到从数据库读取的本地存储中。当服务器上的数据没有发生变化时,将使用本地缓存,并且在使用缓存数据时,您不会为任何读取操作付费。您实际上不需要添加自己的本地缓存,除非您需要对客户端 SDK 无法完成的数据执行某些操作。

这都是有据可查的。例如,Android using Realtime DatabaseAnd for Firestore clients.

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2014-09-02
      相关资源
      最近更新 更多