Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
针对六边形体系结构的MySQL(加上Redis)实现上的单个查询或连接_Mysql_Redis_Sequelize.js_Domain Driven Design_Hexagonal Architecture - Fatal编程技术网

针对六边形体系结构的MySQL(加上Redis)实现上的单个查询或连接

针对六边形体系结构的MySQL(加上Redis)实现上的单个查询或连接,mysql,redis,sequelize.js,domain-driven-design,hexagonal-architecture,Mysql,Redis,Sequelize.js,Domain Driven Design,Hexagonal Architecture,我正在开发一个六边形架构的NodeJS项目,但是我对如何在数据库(MySQL和Redis)的实现中管理工作流有很大的疑问 MySQL实现: 我正在使用Sequelize ORM&可以填充模型以获得关联(连接)。Sequelize实现允许我在一个模型中设置一些选项,以便将其他模型直接包含在它自己的存储库中。我不需要第二个模型的依赖项 Redis实现: 但是,使用Redis,我需要分别查询所有资源。这是正常的。无法关联模型&我必须转到第二个模型的存储库。这些操作应该在我假设的用例中完成 例如

我正在开发一个六边形架构的NodeJS项目,但是我对如何在数据库(MySQL和Redis)的实现中管理工作流有很大的疑问

MySQL实现:
  • 我正在使用Sequelize ORM&可以填充模型以获得关联(连接)。Sequelize实现允许我在一个模型中设置一些选项,以便将其他模型直接包含在它自己的存储库中。我不需要第二个模型的依赖项
Redis实现:
  • 但是,使用Redis,我需要分别查询所有资源。这是正常的。无法关联模型&我必须转到第二个模型的存储库。这些操作应该在我假设的用例中完成
例如:

MySQL实现序列

1.1。GetContentsWithVideosUseCase->我创建了一个标准,用于将所有内容加入到自己的视频中

1.2。findAll(criteriaForJoinVideos)->这里我已经有了每个内容及其视频

1.3。GetContentsWithVideosUseCase->我不再需要它了,所以将它返回给控制器

Redis实现序列

2.1。GetContentsWithVideosUseCase->I为获取所有内容创建条件

2.2。ContentRepository.findAll(criteriaContents)->这里我只有每个内容

2.3。GetContentsWithVideosUseCase->我有内容,但现在我需要它们的视频。Contents.map&按内容为每个视频查询创建条件

2.4。VideoRepository.findAll(criteriaVideosByContent)->这里我已经有了一个内容的视频

2.5。GetContentsWithVideosUseCase->我现在有了所有内容的所有视频&我合成了将返回的对象

问题! 我们可以看到,这里的问题是,用例应该根据实现的不同而有所不同&这不应该发生

这个场景的问题是什么是最佳和最正确的做法:

  • 我是否应该独立地执行所有MySQL查询(在各自的reportories上分离它们)并保留连接
  • 是否可以与Redis实现保持连接
  • 你处理过这个问题吗

谢谢

Redis应压缩为一个步骤。在其存储库中,应进行检索视频内容并将其返回到域服务所需的所有查询。 六边形体系结构假设您的数据库是一个细节,所以您的域服务并不关心数据库是否支持关系。在性能降低之前,您并不关心内部进行了多少查询,但情况并非如此


重要的一点是,存储库应该是每个AggregateRoot或每个实体。

Redis应该压缩为一个步骤。在其存储库中,应进行检索视频内容并将其返回到域服务所需的所有查询。 六边形体系结构假设您的数据库是一个细节,所以您的域服务并不关心数据库是否支持关系。在性能降低之前,您并不关心内部进行了多少查询,但情况并非如此

重要的一点是,存储库应该是每个AggregateRoot或每个实体