From f920943cc1dd4dcabba49c5991b67fa91ef5bfb6 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Aug 2023 14:38:42 -0400 Subject: [PATCH 1/3] Revise architecture article and library tutorial Remove references to HHVM, the legacy mongo extension, and older PHP versions from the architecture article and component diagram. Replace the original diagram with an SVG graphic. https://jira.mongodb.org/browse/PHPC-2276 --- reference/mongodb/architecture.xml | 105 +++++++---------------- reference/mongodb/images/driver_arch.png | Bin 50382 -> 0 bytes reference/mongodb/images/driver_arch.svg | 1 + reference/mongodb/tutorial/library.xml | 27 +++--- 4 files changed, 46 insertions(+), 87 deletions(-) delete mode 100644 reference/mongodb/images/driver_arch.png create mode 100644 reference/mongodb/images/driver_arch.svg diff --git a/reference/mongodb/architecture.xml b/reference/mongodb/architecture.xml index ba01b5411528..8dd02c48adf7 100644 --- a/reference/mongodb/architecture.xml +++ b/reference/mongodb/architecture.xml @@ -10,94 +10,60 @@ Architecture Overview - This section explains how all the different parts of the driver fit - together. From the different language runtimes, through the extension and - to the PHP libraries on top. This new architecture has replaced the old - mongo extension. We refer to the new one - as the mongodb extension. + This article explains how all the different components of the PHP driver fit + together, from base system libraries, through the extension, and to the PHP + libraries on top. - Architecture Diagram + + PHP Driver Architecture Diagram. The lowest level of the driver is our + system libraries: libmongoc, libbson, and libmongocrypt. The middle level + is the MongoDB PHP C extension. The upper level is PHP userland and + includes the MongoDB PHP library and higher-level packages such as + framework integrations and applications. + - + - At the top of this stack sits a pure - PHP library, which we will - distribute as a Composer package. This library will provide an API similar - to what users have come to expect from the old mongo driver (e.g. CRUD methods, - database and collection objects, command helpers) and we expect it to be a - common dependency for most applications built with MongoDB. This library - will also implement common - specifications, in the - interest of improving API consistency across all of the - drivers maintained by - MongoDB (and hopefully some community drivers, too). + At the top of this stack sits a + PHP library, which is + distributed as a + Composer package. + This library provides an API consistent with other MongoDB + drivers and implements + various cross-driver + specifications. While the + extension can be used directly, the library has minimal overhead and should + be a common dependency for most applications built with MongoDB. - Sitting below that library we have the lower level driver. - This extension will effectively form the glue between PHP and our - system libraries (libmongoc and - libbson). This extension - will expose an identical public API for the most essential and - performance-sensitive functionality: + Sitting below that library is a PHP extension, which is distributed through + PECL. The extension forms + the glue between PHP and our system libraries + (libmongoc, + libbson, and + libmongocrypt). Its + public API provides only the most essential functionality: Connection management BSON encoding and decoding Object document serialization (to support ODM libraries) - Executing commands and write operations - Handling queries and cursors + Executing commands, queries, and write operations + Handling cursors for command and query results - By decoupling the driver internals and a high-level API into an extension and - PHP libraries, respectively, we hope to reduce our maintainence burden and - allow for faster iteration on new features. As a welcome side effect, this - also makes it easier for anyone to contribute to the driver. Additionally, - an identical public API will make it that much easier to port an - application across PHP runtimes, whether the application uses the low-level - driver directly or a higher-level PHP library. - - - GridFS is a great example - of why we chose this direction. - Although we implemented GridFS in C for our old mongo driver, it is actually - quite a high-level specification. Its API is just an abstraction for - accessing two collections: files (i.e. metadata) and chunks (i.e. blocks of - data). Likewise, all of the syntactic sugar found in the old mongo driver, - such as processing uploaded files or exposing GridFS files as PHP streams, - can be implemented in pure PHP. Provided we have performant methods for - reading from and writing to GridFS' collections – and thanks to our low - level extensions, we will – shifting this API to PHP is win-win. - - - Earlier I mentioned that we expect the PHP library to be a common - dependency for most applications, but not - all. Some users may prefer to stick to the no-frills - API offered by the extensions, or create their own high-level abstraction - (akin to Doctrine MongoDB for - the old mongo driver). Future libraries could include a PHP library geared - for MongoDB administration, which provides an API for various user - management and ops commands. The next major version of - Doctrine MongoDB ODM will - likely also sit directly atop the extensions. - - - While we will continue to maintain and support the old mongo driver and its - users for the foreseeable future, we invite everyone to use the - next-generation driver and consider it for any new projects going forward. - You can find all of the essential components across GitHub and JIRA: - - Driver Source Code and JIRA Locations + Driver Source Code and JIRA Projects @@ -113,7 +79,7 @@ PHPLIB - PHP 5 and PHP 7 Driver (phongo) + PHP Extension mongodb/mongo-php-driver PHPC @@ -121,13 +87,6 @@
- - - The existing PHP project in JIRA - will remain open for reporting bugs against the old mongo driver, but we - would ask that you use the new projects above for anything pertaining to - our next-generation drivers. -
diff --git a/reference/mongodb/images/driver_arch.png b/reference/mongodb/images/driver_arch.png deleted file mode 100644 index 74064bf78fd9a863b099edfe2afe8230c5556c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50382 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 \ No newline at end of file diff --git a/reference/mongodb/tutorial/library.xml b/reference/mongodb/tutorial/library.xml index 351d384549ec..65fc08f0c58e 100644 --- a/reference/mongodb/tutorial/library.xml +++ b/reference/mongodb/tutorial/library.xml @@ -81,19 +81,16 @@ require 'vendor/autoload.php'; - If you have previously used the old driver (i.e. mongo - extension), the library's API should look familiar. It contains a + If you have used MongoDB drivers in other languages, the library's API + should look familiar. It contains a Client - class for connecting to MongoDB, and + class for connecting to MongoDB, a Database - class for database-level operations (e.g. commands, collection management) + class for database-level operations (e.g. commands, collection management), and a Collection class for collection-level operations (e.g. CRUD methods, index management). - Various Collection methods have been renamed for clarity, and to be in - accordance with a new language-agnostic - specification. @@ -117,15 +114,17 @@ echo "Inserted with Object ID '{$result->getInsertedId()}'"; - Instead of injecting the generated _id field into the input - document (as was done in the old driver), it is now made available through - the result object returned by the insertOne method. + Since the inserted document did not contain an _id field, the + driver will generate an MongoDB\BSON\ObjectId for the + server to use as the _id. This value is also made available to + the caller via the result object returned by the insertOne + method. - After insertion, you can of course also query the data that you have just - inserted. For that, you use the find method, which returns an - iterable cursor: + After insertion, you can query for the data that you have just inserted. + For that, you use the find method, which returns an iterable + cursor: ArrayObject for enhanced usability. You can find more information on how serialization and deserialization between PHP variables and BSON is handled by the driver and library by reading the From 162b0018af6524a63f236098950fabcabe5c6b76 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Aug 2023 14:40:02 -0400 Subject: [PATCH 2/3] Note effect of disableClientPersistence in connection article --- reference/mongodb/architecture.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reference/mongodb/architecture.xml b/reference/mongodb/architecture.xml index 8dd02c48adf7..653f0a6767a3 100644 --- a/reference/mongodb/architecture.xml +++ b/reference/mongodb/architecture.xml @@ -112,7 +112,8 @@ options). The driver will attempt to find a previously persisted libmongoc client object for that hash. If an existing client cannot be found for the hash, a new client - will be created (and persisted for future use). + will be created and persisted for future use. This behavior can be disabled + via the "disableClientPersistence" driver option. @@ -162,7 +163,7 @@ foreach ($managers as $manager) { If the same worker executes the script again in a second request, the three - clients will be re-used and no new connections should be made. Depending on + clients will be re-used and no new connections will be made. Depending on how long ago the previous request was served, the driver may need to issue additional hello commands to update its view of the topologies. From 75c33cb6f7a7276493afcb8b867563b389f752c7 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Fri, 18 Aug 2023 11:53:32 -0400 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: George Peter Banyard --- reference/mongodb/architecture.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/reference/mongodb/architecture.xml b/reference/mongodb/architecture.xml index 653f0a6767a3..02931db9dd30 100644 --- a/reference/mongodb/architecture.xml +++ b/reference/mongodb/architecture.xml @@ -32,25 +32,25 @@ At the top of this stack sits a - PHP library, which is - distributed as a + PHP library, + which is distributed as a Composer package. This library provides an API consistent with other MongoDB - drivers and implements - various cross-driver - specifications. While the - extension can be used directly, the library has minimal overhead and should - be a common dependency for most applications built with MongoDB. + drivers + and implements various cross-driver + specifications. + While the extension can be used directly, the library has minimal overhead and + should be a common dependency for most applications built with MongoDB. Sitting below that library is a PHP extension, which is distributed through - PECL. The extension forms - the glue between PHP and our system libraries + PECL. + The extension forms the glue between PHP and our system libraries (libmongoc, libbson, and - libmongocrypt). Its - public API provides only the most essential functionality: + libmongocrypt). + Its public API provides only the most essential functionality: Connection management