Java PostgreSQL,Hibernate:将db的内容移动到文本文件/XML文件以用于存储

Java PostgreSQL,Hibernate:将db的内容移动到文本文件/XML文件以用于存储,java,database,spring,hibernate,postgresql,Java,Database,Spring,Hibernate,Postgresql,我正在开发一个SpringMVC应用程序,在这个应用程序中,我们看到数据库正在变得越来越大。该空间主要被聊天信息历史记录和其他东西(如旧的通知)占用,这些都不是很有用 因此,我们考虑将这些家伙移到一些文本/XML文件中,给DB一些喘息的空间,从而提高查询的性能。索引没有太多插入那么有用 我想知道是否有办法,PostgreSQL或Hibernate支持这样的任务,即从数据库中提取数据并保存在普通文件中,这些文件可以被访问并至少获得良好的性能 我只是开始查找一些东西,所以我手头没有多少东西可以展示。

我正在开发一个SpringMVC应用程序,在这个应用程序中,我们看到数据库正在变得越来越大。该空间主要被聊天信息历史记录和其他东西(如旧的通知)占用,这些都不是很有用

因此,我们考虑将这些家伙移到一些文本/XML文件中,给DB一些喘息的空间,从而提高查询的性能。索引没有太多插入那么有用

我想知道是否有办法,PostgreSQL或Hibernate支持这样的任务,即从数据库中提取数据并保存在普通文件中,这些文件可以被访问并至少获得良好的性能

我只是开始查找一些东西,所以我手头没有多少东西可以展示。如果你们有任何问题,请告诉我

非常感谢

我将使用并拥有两个数据库:

  • 当前的操作数据库,就是您将数据移出以精简数据的数据库
  • 用于聚合旧数据以保存存储的归档数据库
通过这种方式,您可以将数据从当前数据库移动到存档数据库中,而不会影响数据的安全性,并且可以根据某个公共根实体对各种相关实体进行分组,从而聚合旧数据以简化检索,然后使用这些根实体访问旧数据

这样,当前操作数据库仍然足够小,而归档数据库可以共享。通过这种方式,可以更轻松地配置当前操作以实现高性能,而归档操作则可以实现可扩展性


无论如何,hibernate不支持开箱即用,但您可以使用自定义hibernate类型和JTA事务来实现它。

数据库的大小(尤其是XML内容)只有在您实际选择它时才相关。您没有在所有地方使用
select*
,是吗?“索引没有太多插入那么有用”-你怎么知道的?您是否运行了性能测试,结果表明插入速度慢得令人无法接受?@a_horse_with_no_name:我没有使用select*的大多数地方,我使用hibernate返回相关数据。我同意我也必须从XML中检索数据。不,这是我读到的,正如你可以推测的那样,一组人每秒左右的聊天信息都是大量的插入。再加上通知,它们都是批量插入的。难道你不能告诉你的混淆层(“Hibernate”)不要检索XML列,或者只有当你明确请求时才能检索它们吗?关于索引:进行测试。任何人都无法判断索引的性能优势是否大于缺点。我看到有超过10个索引的表的插入率很高,没有问题-这完全取决于您的硬件和对您来说更重要的内容。@a_horse_,没有名称:我考虑的另一个选项是根据时间范围对表进行分区,大约每两周一次。@a_horse_,没有名称:我可以指示Hibernate不要给我XML列中的信息,但我想知道PostgreSQL或Hibernate是否提供了将数据推送到XML文件的机制?这是我的问题。顺便说一句,即使当我抱怨索引时,我们现在已经准备好了。我不会使用两个单独的数据库,因为那样你就不能用同一个查询来查询存档文件和当前数据库。如果有的话,我会使用两种不同的模式。我同意用没有名字的@a_horse_。我也对查询数据库感兴趣,当第一个数据库的搜索结果失败时,或者当用户特别请求旧数据集时。这不是当前问题中的要求,可能是最新数据不应与旧数据集合并。它始终取决于应用程序数据要求,因此有一个“银弹”。@我们是Borg,只要您在应用程序层中连接数据,您就可以查询两个不同的数据源。但是,如果您想加入新数据和旧数据,将旧数据存储在XML文件中也不会有帮助,因此我猜仍然缺少一些信息。我的想法是将数据存储在XML中,并且只在数据库的结果集为空或用户特别请求旧聊天时询问XML,通过一次又一次单击进入旧的聊天或通知。但是如果我一直在这两个数据库上发出连接查询,我认为这对我没有多大好处。