如果我的系统基于实时数据,我如何确保所有最新的信息都冗余地存储在一个文件中?因此,当程序再次启动时,它会使用此信息将自身初始化为关闭时的位置。
我知道xstream和HSQLDB。但不确定这是否是需要原件副本的数据的最佳选择。
发布于 2010-04-23 05:35:07
这完全取决于您存储的应用程序数据的类型。如果您需要重建java对象的原样(即变量和状态相同),您可以序列化所需的对象。有许多序列化机制,例如您提到的xstream。如果你直接存储对象,使用这些机制中的一种就可以了。
但是,很多时候,您希望存储应用程序的状态,这不一定直接对应于直接序列化对象。如果是这样的话,你可以只写出你需要的相关数据。您使用的存储类型取决于您的需求。如果您有大量数据,请考虑数据库。在平面文件中,较小的数量可能工作得更好。
另一件事是,在单个文件中冗余地存储数据似乎没有太大用处。如果文件损坏,您将丢失两个副本,因此如果冗余是一个问题,请将其存储在不同的位置(即主数据库和备份数据库)。
没有一种正确的方法可以做到这一点,但希望这些想法能让你开始。
发布于 2010-04-23 09:15:54
创建大量内存中数据的文字副本(即快照)的开销很大。每次更新内存中的数据时,重复这个过程可能是非常昂贵的。您需要重新考虑您的应用程序架构。
一种方法是在实时数据传入时将其提交到数据库,然后显示数据库中的数据以实现一致性。
第二种方法是提交到一个数据库,并维护一个并行的内存中数据结构,您可以从中显示。您还需要实现代码,以便在应用程序重新启动时从数据库重新构建内存中的数据结构。这是更多的代码,有更多的机会出现故障,用户在重新启动后看到由于一些错误而不同的东西。
第三种方法是完全从内存中的数据结构开始工作,并按如下方式处理数据持久性:
最后一种方法有一个问题,即只有一个最新的数据稳定副本。如果由于硬盘或操作系统故障而丢失,那么您就完蛋了。在其他方法中,这个问题可以通过使用RDBMS的现成支持实现的热备份数据库来解决。
https://stackoverflow.com/questions/2694657
复制相似问题