首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将java应用程序数据冗余地存储在文件中的最好方法是什么?

将java应用程序数据冗余地存储在文件中的最好方法是什么?
EN

Stack Overflow用户
提问于 2010-04-23 05:30:01
回答 2查看 272关注 0票数 1

如果我的系统基于实时数据,我如何确保所有最新的信息都冗余地存储在一个文件中?因此,当程序再次启动时,它会使用此信息将自身初始化为关闭时的位置。

我知道xstream和HSQLDB。但不确定这是否是需要原件副本的数据的最佳选择。

EN

回答 2

Stack Overflow用户

发布于 2010-04-23 05:35:07

这完全取决于您存储的应用程序数据的类型。如果您需要重建java对象的原样(即变量和状态相同),您可以序列化所需的对象。有许多序列化机制,例如您提到的xstream。如果你直接存储对象,使用这些机制中的一种就可以了。

但是,很多时候,您希望存储应用程序的状态,这不一定直接对应于直接序列化对象。如果是这样的话,你可以只写出你需要的相关数据。您使用的存储类型取决于您的需求。如果您有大量数据,请考虑数据库。在平面文件中,较小的数量可能工作得更好。

另一件事是,在单个文件中冗余地存储数据似乎没有太大用处。如果文件损坏,您将丢失两个副本,因此如果冗余是一个问题,请将其存储在不同的位置(即主数据库和备份数据库)。

没有一种正确的方法可以做到这一点,但希望这些想法能让你开始。

票数 0
EN

Stack Overflow用户

发布于 2010-04-23 09:15:54

创建大量内存中数据的文字副本(即快照)的开销很大。每次更新内存中的数据时,重复这个过程可能是非常昂贵的。您需要重新考虑您的应用程序架构。

一种方法是在实时数据传入时将其提交到数据库,然后显示数据库中的数据以实现一致性。

第二种方法是提交到一个数据库,并维护一个并行的内存中数据结构,您可以从中显示。您还需要实现代码,以便在应用程序重新启动时从数据库重新构建内存中的数据结构。这是更多的代码,有更多的机会出现故障,用户在重新启动后看到由于一些错误而不同的东西。

第三种方法是完全从内存中的数据结构开始工作,并按如下方式处理数据持久性:

  • 定期挂起处理更新,并使用xstream对整个内存中的数据结构进行快照,java序列化或whatever.
  • every更新需要以可重放的形式可靠地记录(带时间戳)到一个或多个文件中。
  • 应用程序重新启动时,您将从上一个快照重新加载,然后重放自快照以来到达的所有更新。

最后一种方法有一个问题,即只有一个最新的数据稳定副本。如果由于硬盘或操作系统故障而丢失,那么您就完蛋了。在其他方法中,这个问题可以通过使用RDBMS的现成支持实现的热备份数据库来解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2694657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档