Chúng ta có một số máy chủ đang chèn các khối hàng vào một bảng trong cơ sở dữ liệu quan hệ và một máy chủ đọc dữ liệu mới một lần trong bảng . (Bảng là khái niệm một số loại tệp nhật ký - dữ liệu chỉ được chèn vào nhưng không bao giờ sửa đổi và máy chủ đọc hiển thị đuôi của nhật ký.) Có cách nào để máy chủ đọc chỉ đọc dữ liệu mới không? Chúng tôi tự do cấu trúc (các) bảng như chúng tôi muốn.Chỉ đọc các hàng mới từ một bảng giống như log trong cơ sở dữ liệu
Một số ý kiến cho rằng vượt qua tâm trí của tôi, nhưng không có tác dụng là:
Đánh dấu các hàng như đọc không phù hợp với ứng dụng của chúng tôi: máy chủ đọc không nên thay đổi cơ sở dữ liệu. (Viết vào cơ sở dữ liệu để hiển thị mọi thứ không phải là điều tốt để làm và có thể có vài phiên hiển thị nội dung.)
Chúng tôi có thể chèn dấu thời gian vào mỗi hàng được lấp đầy với thời gian hệ thống cơ sở dữ liệu. Vấn đề là đây không phải là dấu thời gian của thời gian cam kết, mà là thời gian chèn. Nếu bạn yêu cầu cơ sở dữ liệu "cung cấp cho tôi tất cả các giá trị từ bây giờ-5 phút và bây giờ" bạn không thể dựa vào tất cả các giá trị có mặt, vì có thể có các giao dịch đang được tiến hành. Bạn sẽ phải hỏi lại sau cho các giá trị trong khoảng thời gian này, đó là những gì tôi muốn tránh.
Chúng tôi có thể chèn số hàng đang chạy được điền từ một chuỗi. Vấn đề tương tự với các giao dịch đang chạy xảy ra khi sử dụng dấu thời gian.
Có giải pháp nào cho vấn đề không, hoặc tôi phải áp dụng một số phỏng đoán như giả định thời gian giao dịch tối đa và luôn yêu cầu giá trị được ghi sau "giờ - tối đa thời gian giao dịch" và đọc một số dữ liệu hai lần?
Trong trường hợp quan trọng: chúng tôi sử dụng Oracle cho việc này. Nhưng tôi cho rằng các câu trả lời chỉ hoạt động với các cơ sở dữ liệu khác, cũng là mối quan tâm chung.
Khi bạn nói rằng "máy chủ đọc không nên thay đổi cơ sở dữ liệu", bạn có nghĩa là có một bảng trong một db riêng biệt tham chiếu đến bảng bạn quan tâm không phải là một tùy chọn không? Nếu điều đó được cho phép, bạn có thể áp dụng ý tưởng đánh dấu các hàng như được đọc trong bảng được liên kết đó – kristof
@kristof: Tôi nghĩ rằng sẽ khá khó chịu khi viết vào db chỉ để hiển thị nhật ký. 8-} Đó sẽ là một hành động trong tuyệt vọng, và tôi muốn lấy một số dữ liệu hai lần hoặc một cái gì đó - nếu không có câu trả lời thanh lịch cho điều này. –
Đó là một câu hỏi hay - vấn đề là khá khó hiểu nếu bạn cần hỗ trợ đồng thời cho việc viết các giao dịch (không có khóa thô) nhưng không cho phép người đọc duy trì bất kỳ trạng thái nào trong DB. Bạn có thể xem dữ liệu được đưa vào hàng đợi chứ không phải là "nhật ký" - trong trường hợp đó tôi cũng sẽ ghi các ID của các hàng được chèn vào một bảng "các mục đang chờ xử lý" riêng biệt được người tiêu dùng chọn. Nhưng điều đó vi phạm một trong các yêu cầu của bạn. – araqnid