将存储与业务逻辑分离的技术(RDBMS 和 NoSQL)

Posted

技术标签:

【中文标题】将存储与业务逻辑分离的技术(RDBMS 和 NoSQL)【英文标题】:Technology to separate storage from business logic (RDBMS & NoSQL) 【发布时间】:2017-02-03 21:33:05 【问题描述】:

目前是否有任何技术可以将存储与业务逻辑分开并且让我能够轻松地从 mysql 切换到 MongoDB? (我假设我自己迁移数据,或者切换后从一个空数据库开始)。

我希望更改与更改配置、驱动程序和数据库连接数据一样简单。

我知道 php 可以使用 Doctrine 在不同的 RDBMS 之间切换,但我有兴趣从任何 RDBMS 切换到 NoSQL 系统。

我现在专注于 PHP - 但如果您知道其他编程语言的任何解决方案 - 我将很乐意了解它们。

我假设不是复杂的数据库,没有事务,没有复杂的关系。

更多背景/细节

我正在编写一个简单的爬虫,它将访问网站,读取一些数据并将其保存到数据库中。它非常简单,我可能只为 PHP 使用 pdo_mysql。我正在考虑一个额外的层来覆盖这种情况,以防有一天我想从 MySQL 切换到 MongoDB - 我问这是否可能。

更新

我认为 Laravel 及其 Eloquent 支持开箱即用的 MySQL,并带有一个额外的插件:https://github.com/jenssegers/laravel-mongodb 支持 MongoDB - 我会检查这是否从程序员的角度真正透明。除非有人有经验并且马上知道?

【问题讨论】:

容纳两个如此巨大和根本不同的 DMBS 所需的抽象层将非常厚。就像...整个应用程序很厚。或更多。 【参考方案1】:

这里的典型方法是 DAO 或存储库设计模式。在此模式中,您提供了一个负责持久性并返回业务对象的库。这些对象没有持久性逻辑,并被隐藏在存储库中或从存储库中检索。

话虽如此,这仅适用于业务对象。当你想要重做报告或类似的事情时,问题就会出现......在这里,RDBMS 和 NoSQL 解决方案之间的差异会让你很难受。

为了确保我不知道什么用例,“你想用你的数据做什么”是在这些之间进行选择时的一个重大问题。

【讨论】:

在做了一些研究之后,我发现 Laravel 的 Eloquent(支持 Mysql)并且可以通过额外的插件支持 MongoDB:github.com/jenssegers/laravel-mongodb

以上是关于将存储与业务逻辑分离的技术(RDBMS 和 NoSQL)的主要内容,如果未能解决你的问题,请参考以下文章

Django:将业务逻辑与视图逻辑分离

将 Eloquent 模型与业务逻辑分离

前后端分离微服务架构如何设计

架构设计:业务逻辑和技术分离

使用 MVVM 将 GUI 与业务逻辑分离的最后步骤?

UI与数据分离 与 UI的演进