7

Trường hợp com.datastax.driver.core.PreparedStatement có phải là một singleton trong một ứng dụng không?Datastax - Chuẩn bị sẵn sàng an toàn?

Nếu có, điều gì xảy ra nếu kết nối bị mất? Liệu PreparedStatement có trở thành không hợp lệ và một hành động thủ công phải được thực hiện để 'reprepare it'?

Một ví dụ đơn giản về việc sử dụng PreparedStatement (ngoài việc chuẩn bị + thực hiện trong cùng một phương pháp) sẽ rất tuyệt vời!

Trả lời

8

Các đối tượng được chuẩn bị trước là chủ đề an toàn. Bạn có thể thay đổi chúng (ví dụ: đặt mức độ nhất quán mặc định) theo những cách có thể dẫn đến mâu thuẫn nếu nhiều chuỗi đã làm điều đó đồng thời, nhưng đó là điều an toàn hơn.

Báo cáo chuẩn bị về cơ bản là trình bao bọc ID và siêu dữ liệu và máy chủ sẽ giữ nguyên câu lệnh đã chuẩn bị miễn là nó bị hỏng (nhưng nút bị hỏng hoặc khởi động lại có nghĩa là nó bị mất và phải được chuẩn bị lại). Về lý thuyết, một tuyên bố chuẩn bị có thể được tuần tự hóa và deserialized ở một nơi khác và vẫn còn làm việc, bit tôi sẽ không khuyên bạn nên nó.

Báo cáo được chuẩn bị cục bộ cho nút và như tôi đã đề cập, không tồn tại khi khởi động lại, vì vậy nếu bạn định giữ chúng xung quanh, bạn cần đảm bảo rằng bạn xóa chúng khi kết nối không thành công hoặc nút khởi động lại. Tôi sẽ cố gắng để phạm vi chúng giống như cách bạn phạm vi kết nối của bạn, tạo lại chúng trên kết nối và kết nối lại. Có lẽ không phải là lời khuyên tuyệt vời, nhưng nó phụ thuộc rất nhiều vào cách ứng dụng của bạn được cấu trúc.

+0

Tôi nghĩ rằng các câu lệnh chuẩn bị không chỉ là nút cụ thể, mà chúng được chia sẻ trên cụm Cassandra. – pinkpanther