caching - Hazelcast 分布式缓存如何比调用数据库更快?

标签 caching hazelcast distributed-caching

假设我有 2 台服务器正在使用 Hazelcasts 分布式缓存。如果在服务器 #1 上,我将 2 个项目存储在该分布式缓存的 map 中。其中一项将保存在本地备份中,另一项将存储在其他服务器 Hazelcast 实例的备份中(如果不正确,请纠正)。

我的问题是,如果我尝试从缓存中检索第二项(存储在服务器#2 上的备份中),将进行 TCP 调用来检索该数据。这比直接调用数据库快多少?

最佳答案

首先让我纠正数据在 Hazelcast 上的存储方式。

Hazelcast 使用基于一致性哈希的分布算法,这意味着哈希算法始终为相同的输入返回相同的输出。这种分布不是 100% 平等分布,但对于大量元素来说相当不错且具有成本效益。也就是说,这并不意味着在最坏的情况下每个节点上都会有一个元素。

默认情况下,Hazelcast 也会保持备份,这意味着每个节点都将拥有两个元素(在 2 节点设置中),要么拥有数据,要么作为故障情况的备份。您可以使备份可读(read-from-backup=true),但这会带来读取过时数据的轻微机会(所有者之间的时间已更新,但备份尚未更新)。

此外,Hazelcast 中的数据同样默认以序列化形式存储,即二进制流式表示。

好吧,那么这一切怎么可能比到数据库的 TCP 连接更快呢?

答案有两个:

  1. Hazelcast 是一个键值存储。因此,它针对通过键请求数据并尽快回复值进行了优化。
  2. 数据已经序列化,因此字节流只是“粉碎”到套接字中,无需完成任何实际的进一步工作。

另一方面,您的数据库必须真正从表中查询数据。保存信息的内部数据结构针对复杂查询进行了优化,但不适用于基于 key 的访问。但是,这一点很重要,当前的数据库实现也在内部(在 RAM 中)进行优化以实现快速访问。因此,只有在高负载下运行的数据库才会出现这种效果。缓存(本地或分布式)旨在加速缓慢的操作,从而导致:如果您的数据库速度极快,您将看不到任何好处。

无论如何,设计一个您希望呈指数级增长的系统时,您应该从一开始就考虑缓存。关于缓存及其背后的想法的全面介绍可以在我前段时间写的缓存白皮书和文章中找到:https://dzone.com/articles/caching-why-you-should-care

我希望这能回答您的问题:-)

关于caching - Hazelcast 分布式缓存如何比调用数据库更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664205/

相关文章:

c# - 哪些语言支持没有样板代码的返回值缓存?

asp.net-mvc - asp.net-mvc 中的缓存

hibernate - Hazelcast 与 Ehcache + Hazelcast 注释用于使用 Spring 和 Hibernate 在服务/dao 层进行缓存?

java - 了解 HazelCast 中的扩展

apache - Hadoop DistributedCache缓存文件没有绝对路径?

asp.net - 在 ASP.NET 中缓存所有用户

java - 使用查找表在 Java 中编写阶乘程序

javascript - 防止缓存 xmlhttprequest

java - com.hazelcast.nio.serialization.HazelcastSerializationException

asp.net - 架构问题 : client REST API's caching solution