刚刚实现了一个设计,我在 hashmap 中缓存了一些数据并从中检索数据,而不是从 DB 中查询相同的数据。
我的想法正确吗?
刚刚实现了一个设计,我在 hashmap 中缓存了一些数据并从中检索数据,而不是从 DB 中查询相同的数据。
我的想法正确吗?
将数据副本保存在内存中几乎肯定会比从数据库中获取数据要快。
也就是说,还需要进一步考虑:
点击一个集合将比点击一个数据库快几个数量级,尤其是在另一台服务器上(由于通信滞后)
那说:
如果您仔细考虑与数据库交谈时会发生什么,您可以自己回答这个问题:
相比之下,查找散列数据结构需要几次内存访问,每次可能需要几纳秒。相差几个数量级。
要考虑的主要问题是缓存的大小:在某个阈值之后,您造成的损害多于好处。例如,如果缓存有一百万个条目,并且每个条目是 1 KB(考虑到每个对象的开销,访问并不难),那么您已经占用了整整 GB 的堆。在这种情况下,major GC 的性能也会很糟糕。
总是比你在代码级别做的任何事情都更昂贵。
这样看:要查询数据库,无论如何都必须将字节复制到内存中。因此,仅仅访问内存总是比访问数据库要快。
如果计算哈希码的成本很低,应该会快得多,它还取决于条目的数量(因为会有更多的冲突)