首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对系统中的每个模块使用数据库

对系统中的每个模块使用数据库
EN

Software Engineering用户
提问于 2013-03-20 14:01:52
回答 3查看 3K关注 0票数 2

我在读的问题:

我试图标准化和模块化一些功能(电子邮件管理模块,CMS模块等),通过实现三层体系结构的概念,每个模块将有自己独立的模块数据库。因此,在未来,我们所需要做的只是编写一个表示层,重用BLL层、DAL层和数据库。

我的后续问题是,将每个模块中的所有数据库表都放在同一个数据库中是个好主意,还是应该将它们分离成完全独立的数据库?我正在使用PostgreSQL。我担心的是:

  1. 如果数据位于许多不同的数据库中,则运行数据分析时会出现问题
  2. 如果对所有模块使用相同的数据库,则无法确定数据库的性能问题。
  3. 在跨模块连接表的能力方面,如果我们在将来的某个时间发现我们的模块化在创建特定特性时存在缺陷
EN

回答 3

Software Engineering用户

发布于 2013-03-20 15:11:31

如果您想以任何方式组合来自不同模块的数据,那么您确实需要一个数据库。

在一个数据库中划分事物的正确方法是使用图式

  • 模式有单独的名称空间,因此对每个模块使用模式可以确保模块之间不会发生冲突。email.table1永远不会与cms.table1发生冲突。
  • 权限可以设置在架构级别上,因此只能允许电子邮件模块访问电子邮件部分。

我不认为拥有一个数据库会在模块安装/删除方面产生任何问题。在数据库中添加和删除表/模式并不是什么大事。

至于性能,如果您有性能问题,通常需要深入了解哪些查询会导致问题。我认为无论是在一个数据库中还是在多个数据库中,都不会有太大的区别。

票数 4
EN

Software Engineering用户

发布于 2013-03-20 16:29:04

如果操作正确,将业务关注点分离到不同的数据库(或至少是不同的模式)是一种优点。

请参阅马丁对CQRS模式的描述

随着我们的需求变得越来越复杂,我们逐渐远离将信息系统视为CRUD数据存储.CQRS引入的更改是将该概念模型拆分为单独的模型以进行更新和显示。这里有相当大的变化空间。内存中的模型可以共享相同的数据库,在这种情况下,数据库充当两个模型之间的通信。然而,他们也可以使用单独的数据库,通过实时ReportingDatabase有效地使查询端的数据库。在这种情况下,需要在两个模型或它们的数据库之间建立某种通信机制。

NServiceBus建筑原理

命令查询分离--一种避免此问题的解决方案,它在系统级别将命令和查询分离开来,甚至高于客户机和服务器。在这个解决方案中,有两个跨客户机和服务器的“服务”--一个负责命令(创建、更新、删除),另一个负责查询(read)。这些服务只通过消息进行通信--一个不能访问另一个的数据库.

命令和查询责任隔离(CQRS)

命令和查询责任隔离--大多数应用程序比写入数据更频繁地读取数据。基于这一说法,最好是制定一个解决方案,让您可以轻松地添加更多的数据库来阅读,对吗?那么,如果我们建立一个专门用于阅读的数据库呢?更好的是,如果我们以这样的方式设计数据库,那么从数据库中读取数据会更快呢?如果您基于CQRS架构中描述的模式来设计您的应用程序,那么您将有一个可伸缩和快速读取数据的解决方案。

票数 2
EN

Software Engineering用户

发布于 2013-03-20 14:25:03

  1. 是的,如果您想同时分析多个数据库,这可能是一个问题。您可以将所有数据迁移并合并到一个分析数据库中,并在那里进行分析。这意味着您必须设计一个模式,以避免表和其他对象之间的任何名称冲突,以及进行迁移的过程,但这是可以完成的。
  2. 是的,这也可能是个问题。
  3. 是的,这也可能是一个问题,尽管每个模块也可以有一个数据访问API来允许其他人访问数据。这将使跨数据库连接的查询变得困难,但这是可能的。数据库链接在Oracle中也是可能的(它们允许在一个数据库中运行查询,直接访问另一个数据库中的对象),但我不能代表其他供应商的产品。

然后,每个模块都有单独的数据库,例如确保它们都被正确设置,所有数据库都被正确备份,等等,还有额外的维护问题。

另一方面,如果您确实计划有许多模块并且它们并不都是相互部署的场景,那么在设置新的部署时,拥有单独的数据库可能是有意义的。如果您能够确保安装不需要访问任何现有的数据库,那么添加新模块可能会更容易。

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

https://softwareengineering.stackexchange.com/questions/191293

复制
相关文章

相似问题

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