2008-12-06 31 views

Trả lời

17

Mặt đất nung là transactional (khối đồng bộ tạo thành giao dịch của các đối tượng đã sửa đổi) nhưng không và không muốn tuân thủ JTA. Có một cuộc thảo luận khá dài về các giao dịch và một số quan niệm sai lầm phổ biến về Terracotta here.

Tôi đã viết một blog post about data lifetimes và cách điều đó sẽ khiến bạn suy nghĩ về việc xác định cơ hội cho việc sử dụng Terracotta. Tóm lại, điểm ngọt của Terracotta là trường hợp sử dụng mà bạn cần sự bền bỉ và sẵn có (ứng dụng của bạn có thể gặp sự cố nhưng bạn vẫn cần dữ liệu) nhưng dữ liệu không nhất thiết phải quan trọng trong thời gian dài.

Ví dụ kinh điển là dữ liệu quan trọng trong ngữ cảnh của phiên người dùng trong ứng dụng web, chẳng hạn như thông tin giỏ hàng. Bạn muốn giữ cho dữ liệu đó liên tục để nếu ứng dụng web của bạn gặp sự cố, bạn duy trì giỏ hàng. Nhưng bản thân giỏ hàng có thể hoặc không bao giờ được mua. Vì vậy, bạn lưu trữ nó trong Terracotta cho đến khi nó được mua, sau đó lưu vào cơ sở dữ liệu như là "hệ thống hồ sơ" dữ liệu.

Trước đây, dữ liệu bạn lưu trữ trong cơ sở dữ liệu luôn là dữ liệu "hệ thống lưu trữ" quan trọng đối với thành công lâu dài của doanh nghiệp của bạn: khách hàng, đơn đặt hàng, v.v. không có quốc tịch), chúng tôi sẽ đẩy tất cả dữ liệu trung hạn xuống cơ sở dữ liệu. Điều này có nghĩa là chúng ta không cần thiết phải trừng phạt cơ sở dữ liệu của chúng ta (với công việc và lưu trữ bổ sung) và các nhà phát triển của chúng ta (những người phải xử lý sự không phù hợp với trở kháng đối tượng, ngay cả khi sử dụng ORM). Một cách tiếp cận tốt hơn là để nó trong các đối tượng và kết hợp nó với đất nung. Một số người dùng Terracotta gần đây đã sử dụng kỹ thuật này để giảm đáng kể dấu chân cơ sở dữ liệu của họ (tiết kiệm hàng triệu đô la) đồng thời tăng khả năng mở rộng quy mô của họ.

Có câu hỏi về điểm tích hợp với cơ sở dữ liệu và cách thực hiện việc thực hiện một cách đáng tin cậy. Chúng tôi thấy đây là trường hợp sử dụng trong lần phát hành gần đây Examinator (một ứng dụng web tham khảo Spring/Terracotta/Tomcat/MySql). Khi các kỳ thi đang được tiến hành, tiểu bang (câu trả lời cho các câu hỏi, các thứ tự lựa chọn ngẫu nhiên, các câu hỏi được đánh dấu để xem xét) được lưu trữ trong Đất nung. Nhưng khi các bài kiểm tra hoàn thành, điểm kết quả được tính toán và lưu trữ dài hạn trong cơ sở dữ liệu. Để thực hiện điều này một cách an toàn, chúng tôi sử dụng chiến lược khóa Hibernate tạo id hàng cơ sở dữ liệu trong đối tượng trong Đất nung trước, sau đó lưu dữ liệu vào db, sau đó xóa khỏi Terracotta. Kịch bản này có một điều kiện chủng tộc tiềm năng nếu ứng dụng gặp sự cố sau khi lưu vào cơ sở dữ liệu nhưng trước khi xóa khỏi Terracotta. Trong trường hợp đó, ứng dụng có thể cố gắng lưu lại dữ liệu vào db, có thể tạo hai hàng. Nhưng do ID được tạo trước, chúng tôi có thể biết liệu hàng đã được viết thành công trước đó hay không và tránh vấn đề đó.

Tóm lại, tôi không nghĩ rằng Terracotta sẽ thay thế db của bạn bất kỳ lúc nào. Nó quá mới hoạt động để thậm chí được coi là như vậy trong hầu hết các cửa hàng. Các mô hình sử dụng là cách khác nhau. Không có truy vấn hoặc khả năng SQL vào heap (khả năng truy vấn của bạn được định nghĩa bởi mô hình đối tượng của bạn). Tôi nghĩ rằng nó có thể và đang bắt đầu thay thế việc sử dụng dữ liệu trung hạn mà nó là một lựa chọn rẻ hơn và dễ dàng hơn nhiều. Tuy nhiên, một số người đang bắt đầu thử nghiệm nó để lưu trữ lâu dài.

4

Đất nung chỉ là Java. Nếu bạn không thể bị khóa vào công nghệ này thì không có khả năng chỉ viết một số script (không có JVM) bằng các ngôn ngữ khác, sau đó đi với nó.

Bài viết Kill Your Database with Terracotta thực sự rất tuyệt.

Các vấn đề liên quan