Статьи

4 практических подхода для улучшения реализации уровня доступа к данным

MyBatis   является популярной средой персистентности с поддержкой SQL, хранимых процедур и схем унаследованных баз данных (благодаря расширенным сопоставлениям). Кроме того, MyBatis является зрелой платформой, хорошо известной и проверенной в отрасли как Hibernate, JPA или pureQuery.

MyBatis предлагает свою собственную реализацию кэша, но, в случае необходимости, она также позволяет интегрировать MyBatis Data Access Layer с другими 3 — й библиотек партии: Ehcache , Hazelcast , OSCache и Memcached .

Структура статей, которые будут публиковаться под тем же названием, что и текущая (в виде продолжений), будет содержать:

  • Обзор — в этом разделе будет обсуждаться вопрос о том, зачем вам нужна постоянство, когда указано использование MyBatis, как кэширование через MyBatis улучшает функциональность вашего приложения. (будет представлена ​​настройка для среды кодирования; это необходимо для лучшего понимания сравнения кэширования, выполненного в этих статьях).
  • Реализация Ehcache поверх MyBatis — какие аспекты функциональности уровня доступа к данным улучшены при его использовании. (сеанс кодирования будет представлен здесь)
  • Реализация Hazelcast поверх MyBatis — какие функции Hazelcast помогают иметь эффективную реализацию уровня доступа к данным. (сеанс кодирования будет представлен здесь)
  • Реализация OSCache через MyBatis — какие области функциональности уровня доступа к данным улучшены с его помощью. (сеанс кодирования будет представлен здесь).
  • Реализация Memcached поверх MyBatis — почему она должна использоваться и что улучшается в реализации уровня доступа к данным.
  • Резюме — ретроспектива четырех реализаций со сравнительной таблицей их основных характеристик и ограничений.

Код для реализаций доступен по адресу  https://github.com/ammbra/CacherPoc. 

обзор

Потребность в постоянстве возникла потому, что многие приложения разрабатывались и развертывались в многоуровневых средах, в которых использовались клиенты на основе браузера, серверы веб-приложений и серверные базы данных. Эти приложения должны обслуживать веб-страницы по запросу, связываясь с внутренними базами данных из-за их динамичный характер. Постоянство появилось и стало частью этих приложений для достижения высокой масштабируемости и производительности.

Благодаря непротиворечивости приложения имели уровень (Data Access Layer), который предлагал им упрощенный доступ к базе данных, но если приложение обслуживает веб-страницы по запросу с данными из базы данных многократно, производительность приложения будет снижена. Каркас персистентности предлагал встроенную функцию кэширования, но иногда этого недостаточно (максимальный размер одного значения недостаточен для того, что извлекается из базы данных, требуется другая модель блокировки и т. Д.).

Для каких приложений указывается MyBatis?

Чтобы ответить на этот вопрос, давайте покажем немного фона MyBatis. Создатели платформы iBatis покинули организацию, для которой они создали среду, и из-за трудовых соглашений им пришлось продолжить работу над продуктом под новым именем. Данное имя было MyBatis. Чтобы определить, нужен ли вам MyBatis, отправьте свое текущее решение для обеспечения устойчивости и MyBatis для следующего теста:

Вопрос Ответ для реализации MyBatis (да или нет) Ответ для используемой в настоящее время структуры постоянства (Да или Нет)
1 Является ли фреймворк частью Java Platform Standard Edition (JSE)?  нет
2 Есть ли реализация с открытым исходным кодом?  да
3 Поддерживает ли инфраструктура вызов произвольных операторов SQL?  да
4 Поддерживает ли инфраструктура пакетную обработку нескольких операторов?  да
5 Поддерживает ли инфраструктура автоматическое сопоставление данных запроса с объектами Java?  да
6 Поддерживает ли фреймворк модифицирующие запросы независимо от кода Java?  да
7 Это просто учиться? да
8 Связывает ли он непосредственно объекты Java с таблицами базы данных напрямую (это решение ORM)? да
9 Предлагает ли он адаптируемость к изменениям модели данных? да
10 Это зависит от SQL? да
11 Это предлагает производительность? да
12 Предлагает ли он переносимость между различными реляционными базами данных? да
13 Есть ли у него поддержка сообщества и документация? да
Всего поддерживаемых аспектов  12
Не поддерживаемые аспекты 1

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

Если вы продолжите работу с MyBatis, вот некоторые преимущества и недостатки этого:

преимущества Недостатки
Разработчики пишут SQL, iBATIS выполняет его, используя
JDBC. Больше не нужно  делать try / catch / finally / try / catch (как в 
подходе JDBC).
Не имеет проприетарного языка запросов.
SQL Mapper и поддержка избавления от 
(N + 1) запросов.
Не генерирует SQL.
Автоматически сопоставляет свойства объекта с подготовленными 
параметрами оператора; также он предлагает автоматическое
сопоставление наборов результатов с объектами.
Не прозрачно сохраняет объекты.
MyBatis обеспечивает управление транзакциями для 
операций с базой данных, если другой
менеджер транзакций недоступен. MyBatis может использовать внешнее 
управление транзакциями (Spring, EJB CMT и т. Д.), 
Если доступно.
Не знает об идентичности объекта.

В заключение по нашему вопросу: MyBatis указывается, когда есть необходимость полного контроля над SQL. Это также полезно, когда запросы SQL должны быть точно настроены. MyBatis не следует использовать, когда есть полный контроль над приложением и дизайном базы данных, потому что в таких случаях приложение может быть изменено в соответствии с базой данных, или наоборот. В таких ситуациях вы можете создать полностью объектно-реляционное приложение, и другие инструменты ORM предпочтительнее.

Когда приложение использует кэш MyBatis?

Основной ответ на этот вопрос: когда ваше приложение запрашивает многократно за короткий промежуток времени большие наборы данных из базы данных. Кэширование не только для приложений «больших данных»; объем данных имеет значение и влияет на производительность приложения, но необходимость в кэшировании зависит от того, как часто эти данные должны обновляться. Если вы запрашиваете в своей базе данных большие наборы данных, которые никогда не меняют своих значений, то вам не следует связываться с базой данных для каждого запроса, который делает ваш браузер. Вы можете получить эту информацию из среднего уровня (кеш), не запрашивая базу данных. Всегда помните, что операции с базой данных занимают много времени и каждый период времени важен для приложений высокой доступности.

Почему  сторонние библиотеки  должны использоваться для кэширования?

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

Настройка для MyBatis Caching Proof of Concept (Cacher POC) 

  Требования к учебнику:

  • Java SE 1.6 или выше
  • IDE
  • Maven 2.0 или выше
  • Сервер веб-приложений

Ниже приведен обзор приложения (каждый из проектов EJB добавляется как зависимость от военного проекта, чтобы иметь возможность внедрять свои компоненты EJB):

Обзор IDE  
 и
archictectural высокоуровневый обзор :

Проект CacherPoc иллюстрирует (посредством внедрения EJB компонентов из каждого из других проектов) поведение того, что будет реализовано и проверено. Ниже описана настройка, необходимая для приложения CacherPoc :

  1.  Создайте новое веб-приложение Maven и назовите его CacherPoc.
  2. Сконфигурируйте ваш pom.xml, чтобы на месте была библиотека log4j :

<dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.17</version>
</dependency>  

  3.   
Внутри файла index.jsp (по умолчанию создается для вашего проекта) вы добавите ссылки на каждый сервлет, который будет внедрять EJB из наших примеров проектов ejb ( EhCachePoc , HazelCastPoc , OSCachePoc и MemcachedPoc ):

<br />
<a href="EhCacheServlet?action=listEmployee" >
      Show All Employee Items with EHCache
</a>

Пример сервлета, подобного приведенному выше, можно увидеть здесь:

@WebServlet("/EhCacheServlet")
public class EhCacheServlet extends HttpServlet {

    private static Logger logger = Logger.getLogger(EhCacheServlet.class);

    private static final String LIST_USER = "/listEmployee.jsp";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String forward = LIST_USER;
        List<Employee> results = new ArrayList<Employee>();
        req.setAttribute("employees", results);
        RequestDispatcher view = req.getRequestDispatcher(forward);
        view.forward(req, resp);
    }

}

Теперь все готово для реализации каждого из подходов кеша. Следите за следующими статьями об этом доказательстве концепции и узнайте больше из: