Об использовании терракоты в качестве постоянного раствора
Было бы хорошей идеей использовать Terracotta в качестве постоянного решения (замена базы данных)? Меня особенно интересуют вопросы целостности данных и поддержки транзакционных систем.
2 ответа
Терракота является транзакционной (синхронизированные блоки формируют транзакции измененных объектов), но не является и не хочет быть JTA-совместимой. Здесь довольно длительное обсуждение транзакций и некоторых распространенных заблуждений о терракоте.
Я написал сообщение в блоге о времени жизни данных и о том, как это должно отражать ваши мысли об определении возможностей использования терракоты. Короче говоря, сладкое место Terracotta - это тот случай, когда вам нужны постоянство и доступность (ваше приложение может дать сбой, но вам все равно нужны данные), но когда данные не обязательно являются критически важными в долгосрочной перспективе.
Каноническим примером являются данные, важные в контексте пользовательского сеанса в веб-приложении, такие как информация о корзине. Вы хотите сохранить эти данные постоянными, чтобы в случае сбоя веб-приложения вы сохраняли корзину покупок. Но сама корзина может или не может быть куплена. Таким образом, вы храните его в Terracotta до его покупки, а затем сохраняете в базу данных как данные "системы записи".
Исторически данные, которые вы хранили в базе данных, всегда были "системой записи" данных, которые имели решающее значение для долгосрочного успеха вашего бизнеса: клиенты, заказы и т. Д. С сегодняшними "архитектурами без сохранения состояния" (которые на самом деле не являются без сохранения состояния) Мы помещаем все среднесрочные данные в базу данных. Это означает, что мы без необходимости наказываем нашу базу данных (с дополнительной работой и хранением) и наших разработчиков (которым приходится обрабатывать несоответствие объектно-реляционного импеданса, даже если используется ORM). Лучше всего оставить его в объектах и кластеризовать с помощью терракоты. Ряд недавних пользователей Terracotta использовали эту технику, чтобы значительно сократить объем своей базы данных (сэкономив им миллионы долларов), одновременно увеличивая свои возможности масштабирования.
Возникает вопрос о точке интеграции с базой данных и о том, как сделать передачу надежной. Мы рассматривали это как пример использования в недавно выпущенном Examinator (справочное веб-приложение Spring / Terracotta / Tomcat / MySql). Когда проводятся экзамены, состояние (ответы на вопросы, рандомизированные варианты выбора, вопросы, отмеченные для проверки) сохраняется в терракоте. Но когда экзамены завершены, итоговая оценка рассчитывается и сохраняется в базе данных в течение длительного времени.
Чтобы сделать это безопасно, мы используем стратегию ключа Hibernate, которая сначала генерирует идентификатор строки базы данных в объекте в Терракоте, затем сохраняет данные в БД, а затем удаляет из Терракоты. Этот сценарий имеет потенциальное состояние гонки, если приложение аварийно завершает работу после сохранения в базе данных, но перед удалением из терракоты. В этом случае приложение может попытаться повторно сохранить данные в БД, возможно, создав две строки. Но благодаря предварительно сгенерированному идентификатору мы можем определить, была ли ранее успешно записана строка, и избежать этой проблемы.
Таким образом, я не думаю, что Terracotta заменит вашу базу данных в ближайшее время. Это слишком ново в эксплуатации, чтобы даже считаться таковым в большинстве магазинов. Модель использования сильно отличается. В куче нет запросов или возможностей SQL (ваши возможности запросов определяются вашей объектной моделью). Я думаю, что он может и начинает заменять среднесрочное использование данных, когда это гораздо более дешевая и простая альтернатива. Тем не менее, некоторые люди начинают экспериментировать с ним для длительного хранения.
Терракота только Java. Если для вас нормально быть заблокированным в этой технологии, без возможности просто написать некоторые сценарии (без JVM) на других языках, то продолжайте.
Статья " Убей свою базу данных с помощью терракоты" была действительно хороша.