Обзор архитектуры
В этом разделе объясняется, как различные части драйвера соединяются вместе. От разных языков исполнения, через расширение и до библиотек 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:
Проект | GitHub | JIRA |
---|---|---|
PHP библиотека | » mongodb/mongo-php-library | » PHPLIB |
PHP 5 и PHP 7 драйвер (phongo) | » mongodb/mongo-php-driver | » PHPC |
Существующий проект » PHP в JIRA останется открытым для сообщений об ошибках в старом драйвере mongo, но мы просим вас использовать в новых проектах то, что описывалось выше и касается наших драйверов следующего поколения.