# Vista general de la arquitectura

Esta sección explica cómo todas las diferentes partes del controlador encajan entre sí, desde tiempos de ejecución de lenguaje diferentes, a través de extensiones y hacia las bibliotecas de PHP por último. Esta nueva arquitectura ha reemplazado a la antigua extensión `mongo`. Nos referiremos a la nueva como la extensión `mongodb`.

En lo más alto de esta pila se sitúa una » biblioteca de PHP pura, la cual distribuimos como um paquete de Composer. Esta biblioteca proporcionará una API similar a la que los usuarios llevan esperando desde el controlador de mongo antiguo (p.ej. métodos CRUD, objetos de bases de datos y colecciones, ayudantes de comandos), por lo que esperamos que sea una dependencia común para la mayoría de las aplicaciones construidas con MongoDB. Esta biblioteca también implementa » especificaciones comunes, por el interés de mejorar la consistencia de la API a través de todos los » controladores mantenidos por MongoDB (y con suerte, también algunos controladores de la comunidad).

Justo debajo de la biblioteca tenemos los controladores de nivel más bajo: uno por plataforma. Estas extensiones formarán de forma efectiva el «pegamento» entre PHP y HHVM y nuestras bibliotecas del sistema (» libmongoc y » libbson). Estas extensiones expondrán una API pública idéntica para la funcionalidad más esencial y sensible al rendimiento:

- Administración de conexiones
- Codificación y decodificación de BSON
- Serializacón documentos de objetos (para dar soporte a bibliotecas ODM)
- Ejecución de comandos y escritura de operaciones
- Manejo de consultas y cursores

Al separar los entresijos del contrlador y la API de alto nivel en extensiones y bibliotecas de PHP, respectivamente, esperamos reducir nuestra carga de manteminiento y permitir una iteración más rápida en nuevas características. Como efecto secundario de agradecer, esto también hace más sencillo que cualquiera pueda contribuir al controlador. Además, una API pública idéntica para estas extensiones hará mucho más fácil portar una aplicación durante tiempos de ejecución de PHP, si la aplicación usa directamente el controlador de bajo nivel o una biblioteca de alto nivel.

» GridFS es un buen ejemplo de por qué elegimos esta dirección. Aunque implementamos GridFS en C para nuestro controlador antiguo de mongo, realmente es una especificación de alto nivel. Su API es una abstracción para acceder a dos colecciones: ficheros (esto es, metadatos) y trozos (esto es, bloques de datos). Asimismo, todo el añadido sintáctico encontrado en el controlador antiguo de mongo, como el procesamiento de ficheros subidos o la exposición de ficheros de GridFS como flujos de PHP, se puede implementar en PHP puro. Siempre que poseamos métodos rendidores para leer desde y escribir en colecciones de GridFS (y gracias a nuestras extensiones de bajo nivel), lo haremos: al mover esta API a PHP todos ganamos.

Antes mencionamos que esperamos que la biblioteca de PHP sea una dependencia común para la mayoría de las aplicaciones, pero no para todas. Algunos usuarios podrían prefereir adherirse a la API sin florituras ofrecida por las extensiones, o crear su propia abstracción de alto nivel (parecida a » Doctrine MongoDB para el controlador antiguo de mongo). Las futuras bibliotecas podrían incluir una biblioteca de PHP dirigida a la administración de MongoDB con una API para la gestión de varios usuarios y comandos de operaciones. La siguiente versión mayor de » Doctrine MongoDB ODM probablemente también se sitúe directamente el lo alto de esta extensiones.

Aunque continuaremos manteniendo y dando soporte al controlador antiguo de mongo y a sus usuarios para el futuro próximo, invitamos a todo el mundo a utilizar el controlador de nueva generación y considerarlo para cualquier proyecto nuevo por venir. Los componentes esenciales se pueden encontrar a través de GitHub y JIRA:

Ubicaciones del código fuente del controlador y JIRA
Proyecto | GitHub | JIRA
--- | --- | ---
Biblioteca de PHP | » mongodb/mongo-php-library | » PHPLIB
Controlador de PHP 5 y PHP 7 (phongo) | » mongodb/mongo-php-driver | » PHPC

El proyecto » PHP existente en JIRA permanecerá abierto para la notificación de errores del controlador antiguo de mongo, aunque solicitaremos que utilice los nuevos proyectos de antes para cualquier cosa concerniente a nuestros controladores de la siguiente generación.