При использовании Терракоты как решение для персистентности

Как я и думал, нулевое исключение происходило из-за несоответствия в зависимостях. Указанная проблема была решена с помощью приведенных ниже зависимостей

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4-legacy -->
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4-legacy</artifactId>
    <version>1.6.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.4</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4-legacy -->
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4-legacy</artifactId>
    <version>1.7.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito2 -->
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>1.7.1</version>
    <scope>test</scope>
</dependency>
14
задан Loki 6 December 2008 в 19:30
поделиться

2 ответа

Терракота является транзакционной (синхронизировался, блоки формируют транзакции измененных объектов), но не и не хочет быть JTA-совместимым. Существует довольно долгое обсуждение транзакций и некоторых распространенных заблуждений о Терракоте здесь.

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

Каноническим примером являются данные, важные в контексте сеанса пользователя в веб-приложении, таком как информация о корзине. Вы хотите сохранить те данные персистентными так, чтобы, если Ваше веб-приложение отказывает, Вы поддержали корзину. Но сама корзина может или никогда не может покупаться. Так, Вы храните его в Терракоте, пока это не куплено, затем сохраните к базе данных как "система рекордных" данных.

Исторически, данные, которые Вы хранили в базе данных, всегда были "системой рекордных" данных, которые были очень важны для долгосрочного успеха Вашего бизнеса: клиенты, заказы, и т.д. С сегодняшней архитектурой "не сохраняющей состояние" (которые действительно не являются не сохраняющими состояние), мы пихаем все среднесрочные данные вниз к базе данных. Это означает, что мы напрасно наказываем нашу базу данных (с дополнительной работой и устройством хранения данных) и наши разработчики (кто должен обработать объектно-реляционное несоответствие импеданса, даже если использование ORM). Лучший подход должен оставить его в объектах и кластеризировать его с Терракотой. Много недавних Терракотовых пользователей использовали эту технику для значительного сокращения их места базы данных (сохраняющий их миллионы долларов), одновременно увеличивая их способность масштабироваться.

Существует вопрос точки интеграции с базой данных и как сделать передачу надежно. Мы рассматривали это как вариант использования в недавно выпущенном Examinator (Spring / Терракота / Tomcat / ссылочное веб-приложение MySql). Когда экзамены происходят, состояние (ответы на вопросы, рандомизированные упорядочивания выбора, вопросы, отмеченные для обзора), хранится в Терракоте. Но когда экзамены завершаются, получающийся счет вычисляется и хранится долгосрочный в базе данных.

Чтобы сделать это безопасно, мы используем Быть в спящем режиме ключевую стратегию, которая генерирует идентификатор строки базы данных в объекте в Терракоте сначала, затем сохраняет данные к дб, затем удаляет из Терракоты. Этот сценарий имеет потенциальное состояние состязания если сбои приложения после сохранения к базе данных, но прежде, чем удалить из Терракоты. В этом случае приложение могло попытаться повторно сохранить данные к дб, возможно создав две строки. Но из-за предварительно сгенерированного идентификатора, мы можем сказать, была ли строка ранее успешно записана или не, и избегайте той проблемы.

Таким образом, я не думаю, что Терракота заменит Ваш дб в ближайшее время. Это является слишком новым оперативно, чтобы даже считаться как таковым в большинстве магазинов. Модель использования является отличающимся путем. Нет никакого запроса, или возможность SQL в "кучу" (Ваши запросы возможности определяются Вашей объектной моделью). Я думаю, что это может и начинать заменять среднесрочное использование данных, где это - намного более дешевая и более легкая альтернатива. Однако некоторые люди начинают экспериментировать с ним для длительного хранения.

17
ответ дан 1 December 2019 в 12:53
поделиться

Терракота является Java только. Если для Вас нормально быть заблокированным в эту технологию без возможности просто записать некоторые сценарии (без JVM) на других языках, то пойдите с ним.

Статья Kill Your Database with Terracotta была действительно хороша.

4
ответ дан 1 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: