Обзор архитектуры

В этом разделе объясняется, как различные части драйвера соединяются вместе. От разных языков исполнения, через расширение и до библиотек PHP над ними. Эта новая архитектура заменила старое расширение mongo. Мы называем новое расширение mongodb.

Схема архитектуры

В верхней части этого стека находится » библиотека PHP, которую мы будем распространять в виде пакета Composer. Эта библиотека предоставит API, аналогичный тому, что пользователи ожидают от старого драйвера mongo (например, методы CRUD, объекты баз данных и коллекций, помощники команд), и мы ожидаем, что он будет общей зависимостью для большинства приложений, созданных с MongoDB. Эта библиотека также будет реализовывать общие » спецификации в интересах улучшения согласованности API со всеми » драйверами, поддерживаемыми MongoDB (и, надеемся, также некоторыми драйверами сообщества).

Под этой библиотекой, у нас есть драйвер нижнего уровня. Это расширение будет эффективно связывать PHP и наши системные библиотеки (» libmongoc и » libbson). Это расширение будет предоставлять идентичный общедоступный API для наиболее важной и чувствительной к производительности функциональности:

  • Управление соединением
  • BSON кодирование и декодирование
  • Сериализация документа объекта (для поддержки библиотек ODM)
  • Выполнение команд и операций записи
  • Обработка запросов и курсоров

Разъединяя внутренние компоненты драйвера и высокоуровневый API в расширениях и библиотеках PHP, соответственно, мы надеемся уменьшить нагрузку на обслуживание и ускорить итерацию новых функций. Как приятный побочный эффект, это также облегчит кому-либо вносить свой вклад в драйвера. Кроме того, идентичный общедоступный API значительно упростит портирование приложения на среды выполнения PHP, независимо от того, использует ли приложение драйвер низкого уровня напрямую или библиотеку PHP более высокого уровня.

» GridFS - отличный пример того, почему мы выбрали это направление. Хотя мы реализовали GridFS в C для нашего старого драйвера mongo, на самом деле это довольно высокоуровневая спецификация. Его API - это просто абстракция для доступа к двум коллекциям: файлам (то есть метаданным) и частям (то есть блокам данных). Аналогично, весь синтаксический сахар, найденный в старом драйвере mongo, такой как обработка загруженных файлов или представление файлов GridFS в виде потоков PHP, может быть реализован на чистом PHP. При условии, что у нас есть эффективные методы для чтения и записи в коллекции GridFS и благодаря нашим низкоуровневым расширениям мы будем переводить этот API на PHP - беспроигрышный вариант.

Ранее я упоминал, что мы ожидаем, что библиотека PHP будет общей зависимостью для большинства приложений, но не для всех. Некоторые пользователи могут предпочесть придерживаться API-интерфейса без излишеств, предлагаемого расширениями, или создать собственную высокоуровневую абстракцию (сродни » Doctrine MongoDB для старого драйвера mongo). Будущие библиотеки могут включать PHP-библиотеку, предназначенную для администрирования MongoDB, которая предоставляет API для различных команд управления пользователями и командами ops. Следующая основная версия » Doctrine MongoDB ODM, скорее всего, также будет размещена непосредственно над расширениями.

Хотя мы будем продолжать поддерживать и поддерживать старый драйвер mongo и его пользователей в обозримом будущем, мы приглашаем всех использовать драйвер следующего поколения и рассматривать его для любых новых проектов в будущем. Вы можете найти все необходимые компоненты в GitHub и JIRA:

Исходный код драйвера и расположение JIRA
Проект GitHub JIRA
PHP библиотека » mongodb/mongo-php-library » PHPLIB
PHP 5 и PHP 7 драйвер (phongo) » mongodb/mongo-php-driver » PHPC

Существующий проект » PHP в JIRA останется открытым для сообщений об ошибках в старом драйвере mongo, но мы просим вас использовать в новых проектах то, что описывалось выше и касается наших драйверов следующего поколения.