更改数据库和文件系统transactionlike中的路径

g6baxovj  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(192)

先决条件
关于将资源(图像、视频等)存储为数据库中的blob,与仅将路径保存在数据库中的文件系统相比,有很多信息。
例子:
https://www.quora.com/difference-in-storing-image-in-database-table-vs-storing-image-in-folder-and-save-its-path-in-database-which-is-better-and-why-php
我选择了后半部分。我保存在数据库中的实体是一种树状结构。java中由其他对象组成的对象。这些对象应绑定到文件系统中的文件夹。
因为上面提到的对象由几个部分组成,所以我使用事务。i、 e全有或全无的方法。因此,要么保存整个对象“树”,要么如果出现故障,我对数据库进行回滚。
问题是我在这个事务之后创建了目录结构。我认为它可能会在以下方面失败:
线程1进行事务处理,并转到语句以创建文件结构
线程2执行一个删除事务,删除整个项目线程1将为其创建一个文件结构
线程1 none the wiser现在创建数据库中缺少的实体的文件结构
我在tomcat中使用mysql作为数据库,主要使用servlet。
问题:
是否有一种适当的或常规的方法来保持文件系统和数据库条目“同步”。
我的想法:
我想从这个Angular 出发:

transaction {
    addToDB(entity);
}
fileStructure(entity);

为此:

transaction {
    addToDB(entity);
    fileStructure(entity);
}

因此,将文件结构创建过程放在实际事务中。如果需要回滚,则删除创建的文件夹。不幸的是,因为保存整个对象树结构的事务中的代码非常大(我不使用orm),所以我不想这样做。而且它似乎打破了关注点的分离,因为我将在一个代码块中混合两种不同的东西,既使用数据库,也使用文件系统。
我检查了这三个链接,但它要么是php的,要么是旧的,要么没有提供太多的信息,要么是使用spring的,我不知道。但也许有助于理解我所担心的。
如何在JavaEE环境中管理数据库和文件系统的事务?
将文件路径保存到数据库/sql
对文件和数据库使用事务
你会怎么做?你知道这样做的标准方法吗,或者你有一些好的链接来涵盖这一点吗?因为我找不到。有趣的是,有这么多信息在说“在文件系统中保存资源,在数据库中保存路径”,但没有太多涉及到这一点的含义。这是“做两件事”,应该仍然保持同步。
作为旁注,我使用生成的键,即主自动递增键,作为实体文件夹命名约定的一部分,以使它们与众不同,然后我需要首先将它们添加到db中,以获取这些键,然后在文件夹创建中使用。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题