Об использовании Terracotta в качестве решения для обеспечения устойчивости

StackOverflow https://stackoverflow.com/questions/346647

Вопрос

Было бы хорошей идеей использовать Terracotta в качестве решения для сохранения данных (замены базы данных)?Меня особенно интересуют проблемы целостности данных и поддержки транзакционных систем.

Это было полезно?

Решение

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

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

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

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top