Руководство по эффективной разработке#
- Введение
- Оптимизация работы с БД
- Целесообразность внешних ключей на регистровых таблицах
- Введение
- Внешние ключи на регистровых таблицах и их реальная цена
- Почему внешний ключ всегда приводит к появлению индекса
- Стоимость индексов при вставке данных
- Анализ использования индексов
- Сброс статистики и интерпретация данных
- Ограничения статистики: bitmap-сканирования
- Пример запроса для поиска кандидатов на удаление индексов
- Генерация/отключение/удаление индексов и внешних ключей
- HOT-обновления в PostgreSQL и управление нагрузкой
- Целесообразность внешних ключей на регистровых таблицах
- Ревью Кода Scala/SQL
- Руководство по Ревью Кода Scala
- Метаописания и Структура Классов
- Конфигурация Модулей GSF
- Использование стандартных компонентов GSF
- Обработка Ошибок и Зависимости
- Требования к Структуре Scala-Кода
- Общие Принципы и Стиль Кода
- Безопасность и Надёжность
- Производительность
- Работа с API и ROP
- Работа с Базой Данных и SQL (Дополнения)
- Архитектура и Дизайн
- Работа с Атрибутами и Полями (Дополнения)
- Строки и JSON
- Специфика UI: AVI и Списочные Отображения
- Специфика UI: Кэширование, Логика и Настройки
- Отражение (Reflection)
- Специфика Модулей и Проектов
- Безопасность и Целостность Данных
- Соответствие Best Practices
- Критические ошибки
- Руководство по Ревью SQL-запросов
- Общие моменты и плохие практики
- Указывать только нужные столбцы
- Оптимизация условий фильтрации
- Соответствие типов
- Обработка альтернативных условий
- Безопасность отрицательных условий
- Коррелированные подзапросы
- Эффективная пагинация данных
- Эффективность выборки первых записей
- Контроль дублирования и сортировки
- Баланс сортировки и производительности
- Параметры вместо «врезки» значений в SQL
- Минимизируйте количество полей в GROUP BY
- Фильтруйте по индексируемым «бизнес-полям», а не по служебным/производным
- Корректность соединения по ключам
- Рекурсивные запросы: защита от циклов обязательна
- Запрещено выполнять SQL-запросы в методе checkworkability
- Запрещено выполнять SQL-запросы внутри вложенных циклов.
- Приведение типов в соответствие с типом колонки
- Использование многострочных комментариев
/* … */вместо--
- Индексы
- JOIN-стратегии
- Индексы на ключах JOIN
- Порядок JOIN
- Оптимизация порядка операций
- Работа с большими реестрами
- Коррелированный подзапрос с несколькими полями
- «Последняя запись»
- Массовый «top-1 по ключу»
- Валидация путей доступа (количество чтений)
- Партиционирование/секционирование
- Денормализация
- Фоновые задачи для больших JOIN
- Оптимизация больших запросов
- Анализ плана выполнения
- Тестирование и мониторинг
- Работа с ORM и OQuery
- Особенности selectStatement и @FlushBefore
- Общие моменты и плохие практики
- Руководство по Ревью Кода Scala
- Оптимизация разработки
- Оптимизация работы с данными и кэшем
- Применение refreshByParent и refreshByKey
- Применение Session.commit, Session.commitWork, flush и flush(true)
- Загрузка множества объектов
- Предварительная прогрузку данных в кэш через batchIn и queryKeys
- Массовая обработка объектов через Btk_BulkProcessPkg().chunkedQuery
- При массовой регистрации объектов используйте Btk_BulkProcessPkg().findObjects.
- Оптимизация Scala-кода
- View и withFilter для оптимизации коллекций
- Объединение условий фильтрации
- Отложенные вычисления с lazy val
- Выбор коллекции по сложности поиска
- Защита циклов от зацикливания
- Встроенные методы вместо эмуляции
- ArrayBuffer вместо ListBuffer
- exists вместо filter для проверки
- isEmpty вместо length для пустоты
- getVar вместо запросов к БД в CWA
- Избегание copyAro для экономии памяти
- Разделение логики Avi и Api
- Форматирование длинных выражений
- Общие trait для повторного использования
- Библиотеки общих методов для выборок
- Экстракторы вместо полей Tuple
- Безопасные методы коллекций с Option
- Строковая интерполяция вместо конкатенации
- StringBuilder для сложных строк
- Option для обработки null-значений
- Запросы вне вложенных циклов
- Параллельные вычисления для независимых задач
- Оптимизация SQL-запросов
- Оптимизация работы с данными и кэшем