我在读这的问题:
我试图标准化和模块化一些功能(电子邮件管理模块,CMS模块等),通过实现三层体系结构的概念,每个模块将有自己独立的模块数据库。因此,在未来,我们所需要做的只是编写一个表示层,重用BLL层、DAL层和数据库。
我的后续问题是,将每个模块中的所有数据库表都放在同一个数据库中是个好主意,还是应该将它们分离成完全独立的数据库?我正在使用PostgreSQL。我担心的是:
发布于 2013-03-20 15:11:31
如果您想以任何方式组合来自不同模块的数据,那么您确实需要一个数据库。
在一个数据库中划分事物的正确方法是使用图式:
email.table1永远不会与cms.table1发生冲突。我不认为拥有一个数据库会在模块安装/删除方面产生任何问题。在数据库中添加和删除表/模式并不是什么大事。
至于性能,如果您有性能问题,通常需要深入了解哪些查询会导致问题。我认为无论是在一个数据库中还是在多个数据库中,都不会有太大的区别。
发布于 2013-03-20 16:29:04
如果操作正确,将业务关注点分离到不同的数据库(或至少是不同的模式)是一种优点。
请参阅马丁对CQRS模式的描述:
随着我们的需求变得越来越复杂,我们逐渐远离将信息系统视为CRUD数据存储.CQRS引入的更改是将该概念模型拆分为单独的模型以进行更新和显示。这里有相当大的变化空间。内存中的模型可以共享相同的数据库,在这种情况下,数据库充当两个模型之间的通信。然而,他们也可以使用单独的数据库,通过实时ReportingDatabase有效地使查询端的数据库。在这种情况下,需要在两个模型或它们的数据库之间建立某种通信机制。
和NServiceBus建筑原理:
命令查询分离--一种避免此问题的解决方案,它在系统级别将命令和查询分离开来,甚至高于客户机和服务器。在这个解决方案中,有两个跨客户机和服务器的“服务”--一个负责命令(创建、更新、删除),另一个负责查询(read)。这些服务只通过消息进行通信--一个不能访问另一个的数据库.
和命令和查询责任隔离(CQRS)
命令和查询责任隔离--大多数应用程序比写入数据更频繁地读取数据。基于这一说法,最好是制定一个解决方案,让您可以轻松地添加更多的数据库来阅读,对吗?那么,如果我们建立一个专门用于阅读的数据库呢?更好的是,如果我们以这样的方式设计数据库,那么从数据库中读取数据会更快呢?如果您基于CQRS架构中描述的模式来设计您的应用程序,那么您将有一个可伸缩和快速读取数据的解决方案。
发布于 2013-03-20 14:25:03
然后,每个模块都有单独的数据库,例如确保它们都被正确设置,所有数据库都被正确备份,等等,还有额外的维护问题。
另一方面,如果您确实计划有许多模块并且它们并不都是相互部署的场景,那么在设置新的部署时,拥有单独的数据库可能是有意义的。如果您能够确保安装不需要访问任何现有的数据库,那么添加新模块可能会更容易。
https://softwareengineering.stackexchange.com/questions/191293
复制相似问题