当前位置: 首页 > 面试题库 >

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

姬自强
2023-03-14
问题内容

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


问题答案:

Terracotta是事务性的(同步块形成修改对象的事务),但不是,并且也不希望与JTA兼容。有交易的一个相当长时间的讨论和有关兵马俑一些常见的误解在这里。

我写了一篇关于数据生命周期的博客文章,该文章应如何构架您确定使用Terracotta的机会的想法。简而言之,Terracotta最适合的用例是您需要持久性和可用性(您的应用程序可能崩溃,但您仍然需要数据),但数据不一定是长期的关键。

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

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

存在与数据库的集成点以及如何可靠地进行切换的问题。在最近发布的Examinator(Spring
/ Terracotta / Tomcat /
MySql参考Web应用程序)中,我们将其视为用例。进行考试时,状态(问题的答案,随机选择的顺序,标记为待审核的问题)存储在Terracotta中。但是,当考试完成后,就会计算出分数,并将其长期存储在数据库中。

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

总而言之,我认为Terracotta不会很快取代您的数据库。在操作上这太新了,甚至在大多数商店中都不算是这样。使用模型有所不同。堆中没有查询或SQL功能(您的查询功能由对象模型定义)。我认为它可以并且正在开始取代中期数据使用,而中期数据的使用则便宜得多且容易得多。但是,有些人开始尝试对其进行长期存储。



 类似资料:
  • 问题内容: 首先,我要说我是一个cr脚的程序员,我敢肯定我想做的事可以在10行node或Rails或其他东西上完成,但是PHP是我所能提供的。 因此,我希望找到一个简单的PHP库,该库将数据库调用包装在看起来类似于RESTful模型的API中。 我很难找到这样的东西-搜索或打开几百万个页面,而且我不知道如何过滤它们。 我真的想在这里保持简单,我不需要Zend之类的大型框架。我在Backbone中处

  • 包括我在内的一些人一直在努力将不同模块(JAR)中的实体合并到一个持久单元中(特别是使用JavaSE,例如这里的JPA2.0:自动将实体类添加到PersistenceUnit(来自不同的JAR)中)。基于这些答案,没有简单直接的方法可以做到这一点。解决方案之一是在单个持久性单元文件中列出所有JAR中的所有类,但这并不是很好。我可能无意中找到了另一条路。通常,我的所有实体类都使用注释进行映射。至于解

  • 问题内容: 我对Java Quartz不太熟悉,我们只是使用了每天安排的测试工作。对于我们的Struts2 Web应用程序,我们希望运行一些计划在一天中不同时间的日常工作。作业应处于持久状态,以便即使由于服务器关闭/应用程序失败而导致作业失败,也应在服务器启动后稍后重新执行。我还可以将作业的状态/结果存储在DB中,以便监视作业。任何的意见都将会有帮助。 - 谢谢 问题答案: 无论您提到什么,都可以

  • 问题内容: 包括我在内的一些人一直在努力将来自不同模块(jar)的实体合并到单个持久性单元中(尤其是 JavaSE ,例如此处的JPA 2.0:从不同的jar自动将实体类添加到PersistenceUnit中)。根据答案,没有简单直接的方法可以做到这一点。解决方案之一是在单个持久性单元文件中列出所有jar中的所有类,但这并不是很优雅。我可能不小心找到了另一种方法。通常,我所有的实体类都是使用 注释

  • 本文向大家介绍关于Tensorflow使用CPU报错的解决方式,包括了关于Tensorflow使用CPU报错的解决方式的使用技巧和注意事项,需要的朋友参考一下 如下所示,简单明了,希望能帮助到你 解决: Operation was explicitly assigned to /device:GPU:0 but available devices are [ /job:localhost/repl

  • 我目前正在使用Java EE/Eclipselink和PostgreSQL开发一个web应用程序。关于我的实体,我特别管理“Project”、“User”和“Right”(读、写、删除等访问权限)。这些实体之间的关系是:一个项目可以有多个对该项目拥有不同权限的用户。因此,我得到了一个三重关联:Project+User+Right。 在这个协会坚持的过程中,我面临着一个恼人的问题。当我用它的信息持久