Сегодня, команда Micronaut в Object Computing Inc (OCI) представила Predator, новый проект с открытым исходным кодом, цель которого — значительно улучшить время выполнения и производительность (по памяти) доступа к данным для микросервисов и serverless-приложений, при этом не потеряв в продуктивности по сравнению с такими инструментами, как GORM и Spring Data.
Рубрика «hibernate» - 2
Выпускаем Predator — предкомпилированные Data-репозитории
2019-07-21 в 18:35, admin, рубрики: gorm, Groovy & Grails, hibernate, java, jdbc, jpa, kotlin, micronaut, spring data, микросервисыКак сэкономить ресурсы в браузере и не сломать веб. Доклад Яндекса
2019-03-04 в 8:55, admin, рубрики: chromium, discard, hibernate, Алгоритмы, Блог компании Яндекс, браузеры, интерфейсы, оптимизация программ, производительность javascript, Разработка веб-сайтов, рендеринг, слои, тайлинг, тайлы, яндекс.браузерНесмотря на рост производительности устройств, веб становится всё более требовательным к памяти и процессору. Правильный рендеринг и умное распределение ресурсов по вкладкам — важная часть решения этой проблемы. Константин Крамлих посвятил своё выступление на конференции «Я Frontend» алгоритмам, которые улучшают производительность и экономят ресурсы как в проекте Chromium, так и в Яндекс.Браузере.
Некоторые из них — например, технологию Hibernate — мы уже разбирали в отдельном посте. Доклад Кости освещает задачу более широко: не только с точки зрения переключения вкладок, но и с учетом методов отрисовки контента, тайлов и слоев страницы.
Ближе к концу разработчики веб-интерфейсов могут узнать, как выявлять и решать проблемы с производительностью сайтов.
— Меня зовут Костя, я руководитель группы разработки внутренних компонентов в команде Яндекс.Браузера. В Браузере я чуть больше пяти лет, занимался разными вещами: от всего декодирования в браузере, всех HTML5-видео, до отрисовки, рендеринга и других подобных процессов.
Замечательная аннотация Version в JPA
2018-12-30 в 8:36, admin, рубрики: Doctrine ORM, hibernate, java, jpa, orm, ПрограммированиеВведение
Итак, начнем! Что же означает аннотация Version в JPA?
Если коротко, то она отвечает за блокировки в JPA. Данная аннотация решает одну из проблем, которые могут возникнуть в результате параллельного выполнения транзакций.
Какие же могут возникнуть проблемы?
- Потерянные обновления могут возникнуть в ситуациях, когда две транзакции, выполняющиеся параллельно, пытаются обновить одни и те же данные.
- Грязные чтения возникают, когда транзакция видит еще не сохранённые изменения, сделанные другой транзакцией. В таких случая может возникнуть проблема из-за отката второй транзакции, но при этом данные уже были прочитаны первой.
- Неповторяемые чтения возникают, когда первая транзакция получила данные, а вторая транзакция внесла в них изменение и успешно закоммитила их, до окончания первой транзакции. Иначе говоря, когда в рамках одной транзакции один и тот же запрос на получение, например всей таблицы, возвращает разные результаты.
- Фантомное чтение — проблема похожая на неповторяемые чтения, за тем исключением, что возвращается разное количество строк.
Коротко о их решениях
- READ UNCOMMITED — решается с помощью аннотации Version в JPA(об этом как раз и статья)
- READ COMMITED — позволяет читать только закоммиченные изменения
- REPEATABLE READ — тут немного посложнее. Наша транзакция «не видит» изменения данных, которые были ею ранее прочитаны, а другие транзакции не могут изменять тех данных, что попали в нашу транзакцию.
- SERIALIZABLE — последовательное выполнение транзакций
Каждый последующий пункт покрывает все предыдущие, иначе говоря может заменить решения, указанные ранее. Таким образом SERIALIZABLE имеет самый высокий уровень изолированности, а READ UNCOMMITED — самый низкий.
Читать полностью »
Как сэкономить память на вкладках браузера, но не потерять их содержимое. Опыт команды Яндекс.Браузера
2018-09-20 в 7:37, admin, рубрики: chromium, discard, Google Chrome, hibernate, Блог компании Яндекс, браузеры, разработка под windows, яндекс, яндекс.браузерКогда браузерам не хватает памяти, они выгружают из нее наиболее старые вкладки. Это раздражает, потому что клик по такой вкладке приводит к принудительной перезагрузке страницы. Сегодня мы расскажем читателям Хабра о том, как команда Яндекс.Браузера решает эту проблему с помощью технологии Hibernate.
Браузеры, основанные на Chromium, создают по процессу на каждую вкладку. У этого подхода множество достоинств. Это и безопасность (изоляция сайтов друг от друга), и стабильность (падение одного процесса не тянет за собой весь браузер), и ускорение работы на современных процессорах с большим количеством ядер. Но есть и минус – более высокое потребление оперативной памяти, чем при использовании одного процесса на всё. Если бы браузеры ничего с этим не делали, то их пользователи постоянно видели бы что-то подобное:
В проекте Chromium борются с потреблением памяти фоновыми вкладками с помощью очистки различных кэшей. Речь не про тот кэш, в котором хранятся картинки загруженных страниц. С ним проблем нет – он живет на жестком диске. В современном браузере много другой закэшированной информации, которая хранится в оперативной памяти.
Также в Chromium уже достаточно давно работают над тем, чтобы останавливать JS-таймеры в фоновых вкладках. Иначе очистка кэшей теряет смысл, т.к. активности в фоновых вкладках их восстанавливают. Считается, что если сайты хотят работать в фоне, то нужно использовать service worker, а не таймеры.
Как делать большие изменения на бэкенде: доклады от спикеров из Wrike, Яндекс.Денег и Nexign
2018-09-17 в 10:28, admin, рубрики: backend, hibernate, java, Microservices, mybatis, wrike, wriketechclub, Блог компании Wrike, конференции, Программирование13 сентября в офисе Wrike прошел бэкенд-митап, посвященный глобальным изменениям в продукте. Поговорили о глобальном рефакторинге, смене методологии разработки на лету, унификации в проектах и микросервисах.
Для тех, кто не смог прийти, мы публикуем видеозаписи докладов.
Читать полностью »
Привет! Представляю вашему вниманию статью "Different Hibernate Naming Strategy" автора Dhiraj Ray.
В этой статье обсуждаются различные стратегии именования, предоставляемые hibernate, а также переход стратегии именования от hibernate.ejb.naming_strategy в hibernate 4 до hibernate.implicit_naming_strategy и hibernate.physical_naming_strategy в hibernate 5. А в конце мы будем изучать реализацию пользовательской стратегии именования и конфигурацию для запуска с помощью Spring Boot.
Стратегия именования Hibernate 4
Hibernate использует эту стратегию для сопоставления сущности и атрибута java с соответствующим именем реляционной базы данных и столбцов. В hibernate 4 использовалась стратегия именования hibernate.ejb.naming_strategy. Эта стратегия использует EJB3NamingStrategy, ImprovedNamingStrategy, DefaultComponentSafeNamingStrategy и DefaultNamingStrategy для сопоставления имен. EJB3NamingStrategy — используемая по умолчанию стратегия наименования, и она предоставляет имена полей и таблиц в стиле camelCase. В то время как именование столбца внешнего ключа использует нижнее подчеркивание (_) как разделение. Например, если у вас есть таблица с именем и таблица1 с именами столбцов id и name, то во второй таблице столбец внешнего ключа будет создан как table1_id, таким образом EJB3NamingStrategy реализует интерфейс NamingStrategy.
Читать полностью »
Полезные скрипты при миграции из Oracle в PostgreSQL
2017-10-20 в 10:26, admin, рубрики: hibernate, java, javaee, oracle, oracle database, postgresql, миграция бд, ПрограммированиеВо время миграции из Oracle в PostgreSQL с помощью ora2pg встал вопрос с несоответствием типов данных между разными базами. По умолчанию не все колонки конвертируется правильно, а отсутствие в Oracle Boolean и вовсе порождает неоднозначность – часть колонок нужно перенести как числа, часть как логические значения. В тоже время hibernate знает все о типах данных и может создать эталонную схему.
Итоговый процесс переноса выглядел следующим образом: создание структуры таблиц через ora2pg, исправление структуры по эталонной схеме, перенос данных, конвертация blob и Boolean, добавление отсутствующих в PostgreSQL функций (nvl, nvl2, regexp_substr), создания оставшейся структуры — индексов, view и прочего.
Под катом накопившиеся за время конвертации sql скрипты для полуавтоматической миграции.
Читать полностью »
Наследование в Hibernate: выбор стратегии
2017-09-08 в 13:31, admin, рубрики: hibernate, java, ПрограммированиеНаследование является одним из основных принципов ООП. В то же время, значительное количество корпоративных приложений имеют в своей основе реляционные базы данных
Главное противоречие между объектно-ориентированной и реляционной моделями заключается в том, объектная модель поддерживает два вида отношений («is a» — “является”, и «has a» — “имеет”), а модели, основанные на SQL, поддерживают только отношения «has a».
Иными словами, SQL не понимает наследование типов и не поддерживает его.
Поэтому на этапе построения сущностей и схемы БД одной из главных задач разработчика будет выбор оптимальной стратегии представления иерархии наследования.
Всего таких стратегий 4:
1) Использовать одну таблицу для каждого класса и полиморфное поведение по умолчанию.
2) Одна таблица для каждого конкретного класса, с полным исключением полиморфизма и отношений наследования из схемы SQL (для полиморфного поведения во время выполнения будут использоваться UNION-запросы)
3) Единая таблица для всей иерархии классов. Возможна только за счет денормализации схемы SQL. Определять суперкласс и подклассы будет возможно посредством различия строк.
4) Одна таблица для каждого подкласса, где отношение “is a” представлено в виде «has a», т.е. – связь по внешнему ключу с использованием JOIN.
Можно выделить 3 главных фактора, на которые повлияет выбранная вами стратегия:
1) Производительность (мы используем “hibernate_show_sql”, чтобы увидеть и оценить все выполняемые к БД запросы)
2) Нормализация схемы и гарантия целостности данных (не каждая стратегия гарантирует выполнение ограничения NOT NULL)
3) Возможность эволюции вашей схемы
Под катом каждая из этих стратегий будет рассмотрена подробно, с указанием преимуществ и недостатков, а также будут даны рекомендации по выбору стратегии в конкретных случаях.
Читать полностью »
Обучающий проект: ToDo веб приложения на Spring и ReactJS
2017-08-11 в 15:29, admin, рубрики: hibernate, java, javascript, ReactJS, redux, spring, я пиарюсьПриложение будет предназначено для людей, нуждающихся в удобном средстве организации личных целей и задач. Типичное приложение типа todo-list, но с одной особенностью, которая впрочем понятна из названия. Организация задач будет возможна не только в виде списка, но и в виде дерева подзадач. Tree > List!
Проект будет транслироваться с нуля, то есть вплоть до установки необходимого окружения для разработки (JDK, Eclipse, Atom, Node.js) и подключения необходимых зависимостей (Spring, Hibernate, ReactJS, Redux). Если вы хотели увидеть, как используются следующие технологии: Java, Spring, Hibernate, JavaScript, ReactJS, Redux, то спешу вас обрадовать, у вас будет такая возможность! Конечно, это не весь список, но это то на чем будет делаться акцент.
Читать полностью »
Нетривиальные проблемы с generic’ами и возможные решения
2017-07-31 в 9:52, admin, рубрики: generic, hibernate, java, springПривет всем! Любой программист, хоть немного знающий Java работал с такой штукой, как generic. Эта фича появилась аж в 5-ой версии Java и сегодня я хотел бы рассказать о некоторых нетривиальных проблемах, связанных с обобщенными типами, с которыми я сталкивался, а также о том почему они возникают и как их можно решить. В этой статье также будут затронуты всеми (не)любимые Hibernate и Spring.
Но начну я с объяснения некоторых тонкостей generic'ов, которые не всегда понимают новички в мире Java. Если вы опытный разработчик, то можете не читать первые два пункта.
Читать полностью »