neo4j — использование neoxygen php neoclient без зависимостей

Как мы можем использовать neoclient без каких-либо рамок. Потому что мы не используем laravel или же symphony даже мы не используем ничего подобного этим фреймворкам. Наш бэкэнд написан на чистом ядре PHP.
Просто мой вопрос заключается в том, что если мы не используем какие-либо фреймворки для основных целей, то почему мы должны использовать их, чтобы просто использовать dbms.

Когда я вычислил размер папки поставщика, 102 MB, Таким образом, один запрос будет занимать большую часть оперативной памяти.
Я предполагаю, что при использовании Neo-клиента будут загружены все файлы, содержащиеся в папке vendor. поэтому, пожалуйста, исправьте меня, и если neoclient можно использовать отдельно, я буду очень рад использовать это, но, пожалуйста, расскажите, какие будут недостатки использования Neo-Client без зависимостей.

2

Решение

Я создатель и сопровождающий NeoClient.

Чтобы просто ответить на ваши вопросы о зависимостях:

  1. Он использует некоторые зависимости Symfony для обеспечения действительно гибкого управления конфигурацией, предлагая возможности для работы в кластерах без прокси, а также возможность иметь встроенные расширения.

  2. Это не значит, что это тесно связано с какой-либо структурой.

  3. В режиме разработки оптимизация клиента точно не оптимизирована, в README есть подробные сведения о том, как можно оптимизировать клиент с помощью одного флага во время установки. Производительность действительно очень хорошая, вот результат теста:

Тестирование клиентской инстанции без кеша с форматированием результата
включено, 1000 запусков Выполнено за 47,425533056259 секунд, с использованием 8,5 МБ
объем памяти

Сравнительный анализ клиента с включенным кешем, 1000 запусков Runned
за 0.068459987640381 секунд, используя 8,5 МБ памяти

NeoClient в настоящее время используется в более чем 20 стартапах и предприятиях, о которых я знаю, и теперь поддерживается GraphAware (компанией, в которой я работаю) для поддержки предприятий.

Также я создал драйвер Bolt (бинарный протокол в neo4j 3.0) https://github.com/graphaware/neo4j-bolt-php который будет реализован в NeoClient (это потребует немного работы, потому что многопротокольный протокол не был тем, о чем я думал, когда создавал его)

С другой стороны, количество зависимостей не означает, что оно будет создавать экземпляры всех объектов всех зависимостей, Guzzle используется для его поддержки PSR-7 и абстракции Curl, YAML используется, если вы предоставляете config с YAML, и все службы находятся в режиме lazy. Это означает, что все команды, используемые внутри, будут действительно загружены в память при вызове.

3

Другие решения

NeoClient

NeoClient использует только части платформы Symfony. Листинг:

"require": {
"php": ">= 5.5",
"guzzlehttp/guzzle": "^6.0",
"monolog/monolog": "~1.1",
"symfony/yaml": "^2.7",
"symfony/config": "^2.7",
"symfony/dependency-injection": "^2.7",
"symfony/event-dispatcher": "^2.7",
"graphaware/neo4j-response-formatter": "^1.0"},

Более того — для загрузки файлов используется автозагрузчик (обычно предоставляемый композитором). Это загрузит только те файлы, которые фактически используются (включены / требуются) во время выполнения. Таким образом, вы не получите 100 МБ PHP-кода в памяти.

Вы запускаете тесты (с помощью memory_get_usage а также memory_get_peak_usage) проверить, сколько памяти используется вашим приложением с / без NeoClient.

альтернативы

Вы можете проверить этот раздел, чтобы найти альтернативные драйверы для PHP.

neo4jphp — выглядит многообещающе Есть нулевые зависимости:

"require": {
"php": ">=5.3.0",
"ext-curl": "*"},

Итак, эта библиотека довольно легкая.


Замечания: Сервер Neo4j — это просто REST API с выводом JSON. Вы всегда можете реализовать простую библиотеку для ваших нужд в проекте. Но это не рекомендуется, потому что уже существуют легкие альтернативы.

1