hazelcast spring-data write-through

时间:2017-05-15 16:19:46

标签: spring-data hazelcast

我使用Spring-Boot,Spring-Data / JPA和Hazelcast客户端/服务器拓扑。在我的测试应用程序的一部分中,我正在计算在客户端执行CRUD操作的时间(服务器是与关系数据库交互的服务器)。我通过将write-delay-seconds设置为10来将映射(存储)配置为后写。

Spring-Data的save()返回持久化实体。因此,在客户端应用程序中,应用程序流将被阻止,直到(服务器)返回持久化实体。

想知道是否存在替代方案,在这种情况下客户端不必等待实体持久化。令人印象的是,一旦新数据存储在Map中,持久到异步发生 - >>客户端应用程序不必等待。

在hazelast.xml中映射配置:

<map name="com.foo.MyMap">
    <map-store enabled="true" initial-mode="EAGER">
        <class-name>com.foo.MyMapStore</class-name>
        <write-delay-seconds>10</write-delay-seconds>
    </map-store>
</map>

@NeilStevenson我发现您的回复特别有帮助。我在earlier post询问了生成Map键的位置和方法。你向我指出了那些未能阐明这一主题的文件。同样适用于hazelcast(和其他)示例。

将缓存放在第一位的重点是避免命中数据库。当我们添加数据(通过save())时,我们还需要为Map生成一个唯一的键。此密钥也成为数据库表中的Entity.Id。因为它再次是生成这些ID的hazelcast客户端,所以不需要等待记录在后端持久存在。

等待save()返回持久化对象的唯一原因是捕获任何异常而不是因为ID。

1 个答案:

答案 0 :(得分:0)

不幸的是,这是如何工作的,请参阅https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save-S-

外部商店可能会以某种方式改变保存的条目。

虽然您知道它不会这样做,但是在定义的保存中没有变体。

所以答案似乎是目前通用的Spring存储库定义中没有这个。为什么不提出Spring Data团队的功能请求?