РАЗРАБОТКА ABAPP1L3

AMDP и перенос вычислений в базу: когда это оправдано

Как выбрать между ABAP SQL, CDS и AMDP, измерить пользу переноса вычислений и учесть границы переносимости, клиентской обработки, буферов и финансовой семантики.

Ревизия 2 Общие понятия Частичное покрытие Контекст: CTX-GENERAL документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

AMDP и перенос вычислений в базу: когда это оправдано#

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

Выберите подход по задаче#

Подход Обычно подходит для Что проверить
ABAP SQL Выборки, фильтрации, соединения и агрегации в поддерживаемом переносимом наборе SQL Размер выборки, выбранные поля, число запросов, ключи и клиентский контекст
CDS Повторно используемой семантической модели, связей, аннотаций и управления доступом Уровень строки, кратность связей, валюты и DCL для пути чтения
AMDP Сценария, которому нужны процедуры или функции базы либо возможности, которых недостаточно в ABAP SQL SQLScript, HANA-зависимость, клиентская обработка, полномочия, NULL/конверсии и измеренный выигрыш

SAP рекомендует ABAP SQL как основной способ работы с ABAP-managed database objects и AMDP, когда возможностей ABAP SQL недостаточно. AMDP управляется как метод ABAP-класса, но его реализация использует язык базы данных. В текущей документации AMDP поддерживает процедуры и функции SAP HANA. Такой выбор добавляет зависимость от HANA и требует учитывать правила конкретной версии и языка ABAP.

Сначала докажите, что именно медленно#

Не начинайте с переписывания ABAP SQL в SQLScript. Снимите базовую линию на представительном сценарии: время отклика, число SQL-вызовов, затронутые строки, переданный объём, ключевые операторы и использование ресурсов. Обычно помогает ограничить выбранные поля и строки, агрегировать до передачи данных и убрать запросы из циклов. Это можно сделать и средствами ABAP SQL.

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

Проверьте семантические границы#

ABAP SQL встроен в ABAP-слой: для стандартной базы он предоставляет интегрированное преобразование типов, неявную обработку клиента и взаимодействие с табличной буферизацией. SQLScript выполняет работу в базе, но автоматическое поведение этих механизмов нельзя предполагать. Проверьте явно:

  • фильтр клиента и безопасность доступа к данным;
  • DCL и полномочия, используемые фактическим потребителем;
  • преобразования типов, NULL и значения ABAP initial;
  • обход table buffer и последствия для чтения и записи;
  • единицу, валюту, знаки, округление, сторно и правила агрегации;
  • LUW и транзакционные границы, обрабатываемые ABAP-программой.

Для ABAP for Cloud Development AMDP-метод должен быть client-safe; в Standard ABAP такая маркировка не имеет того же обязательного требования, но остаётся важной для изоляции клиентов. Не выводите наличие фильтра клиента из интерфейса процедуры: проверьте реализацию и потребителя для конкретного релиза.

Цена специфичности#

AMDP полезен, когда измеренное преимущество существеннее стоимости поддержки SQLScript, HANA-зависимости и отдельного тестирования. Учитывайте, кто будет сопровождать процедуру, как диагностировать её план и ошибку, как выполнить транспортирование и как сравнивать поведение после смены версии базы или модели.

Повторно используемый SQLScript может иметь собственный release contract C4 для вызова из AMDP; это отдельная цель от контракта C1 для ABAP-потребителей. Проверяйте доступность такого контракта и зависимостей в установленной системе, а не распространяйте правила на все типы объектов.

Для финансового сценария постройте набор независимых проверок: документ с несколькими позициями, разные валюты, сторно, пустое необязательное измерение, граничный период, запрещённый клиентский контекст и крупный объём. Сверьте каждую строку по бизнес-ключу, а итоги по валюте, ledger и периоду. Равенство одного общего итога недостаточно: одновременно пропущенные и продублированные строки могут его сохранить.

Источники и статус проверки#

Описания ABAP-managed database objects и client-safe AMDP относятся к соответствующим версиям ABAP Keyword Documentation. Перед применением проверьте ограничения языка и продукта на целевом релизе. Снимки SAP-538, SAP-539, SAP-540 и SAP-541 сохранены; точные выдержки о приоритете ABAP SQL, границе применения AMDP, поддержке HANA и обходе табличного буфера сверены с источниками. AMDP, SQLScript, планы запросов и SAP runtime в этом проекте не запускались.

Источники и документация

  1. AMDP, ABAP Keyword Documentation ↗
  2. Rules for Accessing ABAP-Managed Database Objects ↗
  3. ABAP SQL Performance Notes ↗
  4. ABAP Programming Language Overview ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.