我正在开发一个项目,该项目使用 MongoDB 来存储事务数据,而 MySQL 则存储所有其他数据。由于各种原因,我们正在考虑从 MongoDB 迁移到 8.0 版本的 MySQL xDevApi 的可能性。为了准备这种可能性以及简化学习曲线以及其他数据库注意事项,我正在考虑创建一个包装器,它允许我们切换数据库后端,而无需更新与 MongoDB 接口的代码中的所有位置.
我已经有一个大纲,但不确定这是最好的方法。我认为这是一个不错的开始,我只是不确定文件/文件夹结构。
当前文件/文件夹结构如下:
\DocumentStore
abstract class DocumentStoreQueryBuilder
interface IDocumentStore
interface IDocumentStoreConnection
\DocumentStore\Mongo
class Connection implements IDocumentStoreConnection
class Query implements IDocumentStore
class QueryBuilder extends BuilderAlias
我的想法是使用类似于关系数据库的语言来帮助那些来自 RDB 背景的人(大多数将进入项目的人)的初始学习曲线。
我确信有更好的方法来组织事情,但老实说,我对文档存储一般不太熟悉。
这是与我迄今为止所拥有的代码一起使用的代码。
在从需要连接的所有文件调用的连接文件中。
$mgdbdoc = new DocumentStore\Mongo\Connection();
$connectionString = $mgdbdoc->buildConnectionString($settings);
$mgdbdoc->connect($connectionString);
$collection = new DocumentStore\Mongo\Query($mgdbdoc);
定义要操作的集合。如果有必要,这可能会被保存到每个集合的唯一类名中。
$collection->setCollection('transactions');
必要时随时调用。
$result = $collection->insert($document);
$result = $collection->filter($filter)->limit(2)->descending('_id')->select();
我还没有加入更新和删除功能,而且和/或功能被证明是困难的,但我能做到。
我的问题是关于这个项目的任何建议。关于继续前进的任何想法?我无法像 PDO 那样找到多个 NoSQL 数据库的包装器。我将不胜感激任何想法或建议。