Terracotta를 지속성 솔루션 (데이터베이스 대체)으로 사용하는 것이 좋습니까? 특히 데이터 무결성 문제와 트랜잭션 시스템 지원에 대해 궁금합니다.Terracotta를 지속성 솔루션으로 사용하는 경우
답변
테라코타는 transactional (동기화 된 블록은 수정 된 개체의 트랜잭션을 형성 함)이지만 JTA와 호환되지 않으려하고 있습니다. Terracotta here에 대한 거래 및 일반적인 오해에 대해 상당히 긴 토론이 있습니다.
필자는 blog post about data lifetimes을 작성했으며 이것이 테라코타 사용에 대한 기회를 식별하는 방법에 대해 어떻게 생각해야 하는지를 설명했습니다. 간단히 말해 테라코타의 가장 좋은 점은 데이터가 장기적으로 중요하지 않은 경우에도 지속성 및 가용성 (앱이 다운 될 수 있지만 데이터가 여전히 필요함)이 필요한 유스 케이스입니다.
표준 예제는 장바구니 정보와 같은 웹 응용 프로그램의 사용자 세션과 관련하여 중요한 데이터입니다. 웹 애플리케이션이 충돌 할 경우 장바구니를 유지할 수 있도록 해당 데이터를 영구 보존하려고합니다. 하지만 장바구니 자체가 구매 될 수도 있고 구입되지 않을 수도 있습니다. 그래서 구입 전까지 테라코타에 보관 한 다음 "기록 시스템"데이터로 데이터베이스에 저장하십시오.
역사적으로 데이터베이스에 저장 한 데이터는 고객, 주문 등 비즈니스의 장기적인 성공에 중요한 "기록 시스템"데이터였습니다. 오늘날의 "상태 비 저장"아키텍처 (실제로는 stateless), 모든 중기 데이터를 데이터베이스에 저장합니다. 이것은 불필요하게 데이터베이스 (추가 작업 및 저장 장치 사용)와 개발자 (ORM을 사용하는 경우에도 객체 관계형 임피던스 불일치를 처리해야 함)를 처벌하고 있음을 의미합니다. 더 나은 방법은 객체에두고 테라코타로 클러스터하는 것입니다. 최근의 Terracotta 사용자들은이 기술을 사용하여 데이터베이스의 공간을 크게 줄이거 나 (수백만 달러 절약) 동시에 확장 능력을 향상 시켰습니다.
데이터베이스와의 통합 지점 및 핸드 오프를 안정적으로 수행하는 방법에 대한 질문이 있습니다. 최근에 릴리스 된 Examinator (Spring/Terracotta/Tomcat/MySql 참조 웹 응용 프로그램)의 유스 케이스로 보았습니다. 시험이 진행 중일 때 상태 (질문에 대한 답변, 무작위 선택 순서, 검토 용으로 표시된 질문)는 테라코타에 저장됩니다. 그러나 시험이 끝나면 결과 점수가 계산되어 장기간 데이터베이스에 저장됩니다.
안전하게이 작업을 수행하기 위해 테라코타의 개체에 데이터베이스 행 ID를 먼저 생성 한 다음 데이터를 db에 저장 한 다음 테라코타에서 제거하는 최대 절전 모드 키 전략을 사용합니다. 이 시나리오는 응용 프로그램이 데이터베이스에 저장 한 후 테라코타에서 제거하기 전에 충돌하는 경우 경쟁 조건이 될 수 있습니다. 이 경우 응용 프로그램은 데이터를 db에 다시 저장하려고 시도 할 수 있으므로 두 행을 만들 수 있습니다. 그러나 미리 생성 된 ID로 인해 행이 이전에 성공적으로 작성되었는지 여부를 알 수 있고 그 문제를 피할 수 있습니다.
요약하면 테라코타가 언제든지 귀하의 데이터베이스를 즉시 대체 할 것이라고 생각하지 않습니다. 대부분의 상점에서 운영하기에는 너무 새로운 것으로 간주됩니다. 사용 모델은 다른 방식입니다. 힙에는 쿼리 또는 SQL 기능이 없습니다 (쿼리 기능은 개체 모델에 의해 정의됩니다). 나는 그것이 훨씬 저렴하고 쉬운 대안 인 중기 데이터 사용을 대체 할 수있을 것이라고 생각한다. 그러나 장기 저장을 위해 실험을 시작하는 사람들이 있습니다.
테라코타는 Java 전용입니다. 다른 언어로 일부 스크립트 (JVM없이)를 작성하지 않고도이 기술에 갇혀 있으면 괜찮습니다.
Kill Your Database with Terracotta 상품이 정말 좋았습니다.