【问题标题】:Web Application Database or Maps for performanceWeb 应用程序数据库或地图以提高性能
【发布时间】:2019-03-05 19:12:30
【问题描述】:

我想知道对用户数据使用 ConcurrentHashMaps 是否有用。我将用户数据保存在 mysql 数据库中,并在用户登录(或有人编辑用户)时检索它们。每次用户进入另一个页面时,这些用户数据都会被刷新。我应该使用地图并在那里保存我的应用程序中的更改,同时在后台有一个数据库,还是应该直接从数据库下载它。我想让应用程序尽可能高效。

【问题讨论】:

    标签: java mysql database multithreading performance


    【解决方案1】:

    你所描述的是一个缓存。假设调用数据库的成本很高,因为要加载很多信息,或者用于提取数据的查询很复杂并且需要很多时间。缓存数据结构在这里发挥作用。它基本上是一种内存存储,查询数据库确实更快,因为它确实已经加载到内存中。

    填充缓存的过程与查询数据库数据的时间相同(通常更多但顺序相同)。因此,只有在及时带来好处时才使用缓存。不过,数据的速度新鲜度之间存在折衷。根据您的用例,您必须在这两者之间找到正确的折衷方案,然后您会发现它是否真的方便。

    正如您所描述的,即需要保存和显示的用户更新,使用缓存似乎有点过分 IMO,除非您有很多注册用户,而且其中有很多同时使用系统。如果您决定使用它,请记住一些可能会出现的并发问题。并发哈希映射可以使您免于许多危险,但会降低性能。

    【讨论】:

      【解决方案2】:

      如果性能是优先级,我认为您应该将登录的用户保留在内存中。

      这样,读取请求会很快,因为您不需要查询数据库。但是,如果任何已登录的用户会以某种方式被编辑,您将需要更新地图。

      【讨论】:

        【解决方案3】:

        人类无法区分 1 毫秒延迟和 50 毫秒延迟。因此,在“足够好”之外进行优化是多余的。

        MySQL 已经做了一些缓存;您添加另一个缓存实际上可能会减慢响应时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-04
          • 2011-02-09
          • 2013-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多