Разработка под высокую нагрузку
Разработка под высокую нагрузку#
- Работа с кэшем
- Применяйте правильно byParent и byKey, вместо refreshByParent и refreshByKey
- Применяйте правильно Session.commit, Session.commitWork, flush и flush(true), чтобы не достичь лимита загружаемых ячеек
- Загрузка множества объектов
- Используйте предварительную прогрузку данных в кэш через batchIn и queryKeys
- При массовой обработке объектов используйте Btk_BulkProcessPkg().chunkedQuery
- При массовой регистрации объектов используйте Btk_BulkProcessPkg().findObjects.
- Scala код
- Используйте View или withFilter, чтоб избежать создания временных коллекций
- Избегайте использования filter несколько раз подряд
- Используйте lazy val
- Используйте коллекции, имеющие оптимальную сложность поиска, взамен обладающих линейной при частом обращении за нахождением
- На while и рекурсии добавляйте защиту по кол-ву итераций
- Не эмулируйте существующие методы работы с коллекциями
- Используйте ArrayBuffer вместо ListBuffer
- При проверке на существование - не прибегайте к фильтрации
- При проверке на пустоту - не вычисляйте длину
- В checkWorkability (CWA) используйте getVar вместо обращений к БД (ASelect, ATSQL, OQuery, Load, byParent, byKey и т.д.)
- Избегайте использовать copyAro
- В Avi пишите только бизнес логику для взаимодействия с пользователем, все остальное выносите в методы Api
- Не пишите длинные выражения и запросы в одну строчку
- Создавайте общие trait без реализации для разных отображений с одинаковой функциональностью
- Создавайте библиотеки для использования общих методов в различных выборках
- Не используйте поля Tuple, а по возможности пользуйтесь экстрактором
- Используйте «.lastOption, .headOption, dropRight(1), .drop(1), .reduceOption» вместо «.last, .head, .init, .tail, .reduce»
- Не складывайте строки через +, используйте строковую интерполяцию
- При сборе сложной строки не создавайте много промежуточных результатов
- Используйте Option при работе с пустыми (null) ссылками
- Избегайте выполнения запросов внутри вложенных циклов
- Используйте параллельные вычисления, если требуется множественная обработка независимых объектов
- Sql запросы
- Просматривайте план выполнения запроса, чтобы узнать проблемные места
- При написании сложных запросов дробите его на части и используйте подзапросы
- Используйте индексы, чтобы ускорить получение запрашиваемых данных
- Используйте параметры при передаче значений в запрос
- При группировке минимизируйте кол-во группируемых полей
- Фильтруйтесь по индексируемым полям, вместо служебных полей
- При соединении таблиц по идентификаторам, избегайте различных преобразований
- Используйте правильное приведение типов, в соответствие, с типом данных поля
- Добавляйте защиту от зацикливания в рекурсивных запросах