Java 关于使用Terracotta作为持久性解决方案

Java 关于使用Terracotta作为持久性解决方案,java,transactions,persistence,terracotta,integrity,Java,Transactions,Persistence,Terracotta,Integrity,使用Terracotta作为持久性解决方案(替换数据库)是一个好主意吗?我特别想知道数据完整性问题和对事务性系统的支持。Terracotta只是Java。如果您可以被锁定在这项技术中,而不可能仅仅用其他语言编写一些脚本(没有JVM),那么就使用它吧 这篇文章真的很好。Terracotta是(从修改对象的事务中同步块),但不是,也不想与JTA兼容。有一个相当长的讨论交易和一些常见的误解兵马俑 我写了一篇文章,这篇文章应该如何勾勒出你对发现使用陶土的机会的思考。简言之,Terracotta的最佳选择

使用Terracotta作为持久性解决方案(替换数据库)是一个好主意吗?我特别想知道数据完整性问题和对事务性系统的支持。

Terracotta只是Java。如果您可以被锁定在这项技术中,而不可能仅仅用其他语言编写一些脚本(没有JVM),那么就使用它吧

这篇文章真的很好。

Terracotta是(从修改对象的事务中同步块),但不是,也不想与JTA兼容。有一个相当长的讨论交易和一些常见的误解兵马俑

我写了一篇文章,这篇文章应该如何勾勒出你对发现使用陶土的机会的思考。简言之,Terracotta的最佳选择是您需要持久性和可用性(您的应用程序可能会崩溃,但您仍然需要数据)但数据不一定是长期关键的用例

一个典型的例子是web应用程序中用户会话上下文中的重要数据,例如购物车信息。您希望保持该数据的持久性,以便在web应用程序崩溃时维护购物车。但购物车本身可能会被购买,也可能永远不会被购买。因此,您将其存储在Terracotta中,直到购买完毕,然后作为“记录系统”数据保存到数据库中

从历史上看,存储在数据库中的数据始终是“记录系统”数据,对业务的长期成功至关重要:客户、订单等。在当今的“无状态”体系结构(实际上不是无状态的)下,我们将所有中期数据推送到数据库中。这意味着我们不必要地惩罚我们的数据库(额外的工作和存储)和开发人员(他们必须处理对象-关系阻抗不匹配,即使使用ORM)。更好的方法是将其留在对象中,并使用Terracotta对其进行集群。许多近期的Terracotta用户已经使用这种技术显著减少了他们的数据库占用(为他们节省了数百万美元),同时提高了他们的扩展能力

存在与数据库的集成点以及如何可靠地进行切换的问题。我们在最近发布的(一个Spring/Terracotta/Tomcat/MySql参考web应用程序)中看到了这个用例。当考试进行时,状态(问题的答案、随机选择顺序、标记为复习的问题)存储在Terracotta中。但当考试完成时,计算出的分数将长期存储在数据库中

为了安全地执行此操作,我们使用Hibernate键策略,首先在Terracotta中的对象中生成数据库行id,然后将数据保存到数据库,然后从Terracotta中删除。如果应用程序在保存到数据库后但在从Terracotta中删除之前崩溃,则此场景具有潜在的竞争条件。在这种情况下,应用程序可以尝试将数据重新保存到数据库,可能会创建两行。但是由于预生成的ID,我们可以判断该行以前是否成功写入,并避免该问题

总之,我认为陶土不会很快取代你的db。这在操作上太新了,以至于在大多数商店都不能被认为是这样。使用模式是完全不同的。堆中没有查询或SQL功能(查询功能由对象模型定义)。我认为它可以并且正在开始取代中期数据使用,因为中期数据使用是一种更便宜、更容易的选择。然而,一些人开始用它做长期储存的实验