Как сделать эффективный и быстрый длинный запрос для Neo4J: оптимизировать Cypher или улучшить конструктор Javascript / Node.Js?

Ваш документ - это модель записи, совокупность в мире дизайна, управляемого доменом. Будучи CQRS без источника событий, вам необходимо сохранить состояние документа вместе с генерируемыми событиями. Вам также необходимо защитить от одновременной записи. При этом у вас есть два варианта:

  1. Для каждой команды вы обновляете только измененный вложенный документ, т. Е. Заголовок документа.

У этого есть преимущество, которое быстро и вероятность одновременных изменений модификации ниже, если у вас есть отдельная защита для каждого раздела документа на месте (то есть атрибут version для каждого в качестве противопоставления к одному version для всего документа).

Недостаток заключается в том, что он слишком много сочетает модель (класс) Домена с инфраструктурой, поскольку вам нужно поставить запросы внутри класса Document. Если вы смешаете Домен с Инфраструктурой, то у вас больше нет чистой модели, и вы потеряете возможность безопасно повторить команду. Это может быть сделано за пределами класса Domain, в инфраструктуре, если вы «научите» репозиторий инфраструктуры реагировать по-разному на основе испущенных событий.

Это также указание на то, что у вас на самом деле несколько моделей записи , каждая модель для разделов документа (заголовок, тело, нижний колонтитул, заметки и т. д.), поскольку модель записи продиктована границей согласованности. В этом случае они будут использовать один и тот же идентификатор документа.

  1. Для всех команд вы заменяете весь документ, независимо от того, что изменилось внутри.

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

У этого недостатка это медленнее, чем первое решение. Это курс, если вы будете следовать подходу DDD после определения документа как совокупности (в DDD агрегат полностью загружен и полностью сохраняется в ответ на выполнение команд).

0
задан Dmitry Paranyushkin 20 January 2019 в 01:00
поделиться

1 ответ

Я думаю, что проблема заключается в огромных утверждениях, которые должны быть проанализированы, скомпилированы и спланированы.

Лучше использовать пакеты параметров в качестве входных данных и позволить cypher выполнить итерацию, см.

https://medium.com/neo4j/5-tips-tricks. -for-fast-пакетные-обновления-графа-структур-с-neo4j-and-cypher-73c7f693c8cc

Для чего вам нужны все UUID?

есть индексы и ограничения, установленные для ваших операций MERGE?

0
ответ дан Michael Hunger 20 January 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: