Creating a PHP wrapper for MongoDB and MysqlDB X DevApi

123 Views Asked by At

I am working on a project that use MongoDB to house transactional data with MySQL housing all other data. For various reasons, we are looking at the possibility of moving from MongoDB to the MySQL xDevApi with the 8.0 version. In preparation for this possibility as well as to ease the learning curve as well as other database considerations, I am looking at creating a wrapper that will allow us to switch the database backend without having to update all the places in the code that interfaces with MongoDB.

I have an outline of one already, but am not sure it is the best way to do it. I think it is a decent start, I am just not certain of the file/folder structure.

The current file/folder structure is as follows:

\DocumentStore
  abstract class DocumentStoreQueryBuilder
  interface IDocumentStore
  interface IDocumentStoreConnection
\DocumentStore\Mongo
  class Connection implements IDocumentStoreConnection
  class Query implements IDocumentStore
  class QueryBuilder extends BuilderAlias

My thought is to use language similar to a relational database in order to help with the initial learning curve of those coming from a RDB background (the majority of those that will be coming onto the project).

I am sure that there is a better way to organize things, but to be honest, I am not too terribly familiar with Document Storage generally.

This is code that works with what I have so far.

In the connection file that is called from all files that need the connection.

$mgdbdoc = new DocumentStore\Mongo\Connection();
$connectionString = $mgdbdoc->buildConnectionString($settings);
$mgdbdoc->connect($connectionString);

$collection = new DocumentStore\Mongo\Query($mgdbdoc);

Defines the collection for action on. This could, theretically, be saved to a unique class name for each collection if necessary.

$collection->setCollection('transactions');

To be called whenever necessary.

$result = $collection->insert($document);

$result = $collection->filter($filter)->limit(2)->descending('_id')->select();

I haven't put in the update and remove functionality yet, and the and/or functionality is proving difficult, but I can get that.

My question is for any advice regarding this project. Any thoughts on proceeding forward? I haven't been able to locate a wrapper for multiple NoSQL databases like there is for PDO. I would appreciate any thoughts or advice.

0

There are 0 best solutions below