2012-03-02 22 views
13

Chúng tôi đang đánh giá NoSQL cho một dự án sắp tới. Tôi có xu hướng nghĩ về mọi thứ theo cách RDBMS và đang gặp khó khăn trong việc khái niệm hóa việc thiếu sự bình thường hóa.Cách xử lý các thay đổi trong dữ liệu trùng lặp trong NoSQL

Tôi hiểu rằng việc sao chép dữ liệu không được coi là sai trong NoSQL. Điều tôi đang gặp khó khăn khi hiểu là sửa các thay đổi đối với dữ liệu để ngăn chặn các bất thường.

Giải thích về Câu hỏi của Ví dụ:

Bạn đang tổ chức một loạt các giải đấu poker. Bạn có người chơi, địa điểm và sự kiện giải đấu. Như tôi đã hiểu, giải đấu sự kiện có thể chứa một vị trí và một bộ sưu tập người chơi. Nó không không cần phải có tất cả dữ liệu của người chơi, nhưng nếu bạn muốn nhận được các tên và địa chỉ nhà của mọi người tham dự giải đấu tiếp theo, thông tin đó phải nằm trong bộ sưu tập giải đấu.

Ai đó đã kết hôn và di chuyển, thay đổi họ của họ và địa chỉ . Ứng dụng có cần cập nhật bộ sưu tập người chơi và bộ sưu tập giải đấu không? Hay là mô hình của tôi về các bộ sưu tập sai? Làm thế nào để nhà phát triển "theo dõi" nơi thông tin được sao chép?

Trả lời

10

Mô hình mà tôi thấy được sử dụng khá gần đây là có bộ sưu tập dữ liệu "tổng thể" bất biến (trong trường hợp của bạn, danh sách người chơi, danh sách giải đấu với người chơi trong mỗi giải đấu được mô hình hóa) liên quan ", nơi mà bản ghi giải đấu có danh sách id người chơi) và danh sách không chuẩn hóa (trong trường hợp của bạn, danh sách các giải đấu có dữ liệu người chơi được điền đầy đủ) chỉ được cập nhật bằng cách chạy một quá trình định kỳ " dữ liệu.

Bằng cách này, ứng dụng chỉ cần cập nhật dữ liệu chính và quá trình cập nhật định kỳ cuối cùng sẽ xây dựng lại kết quả không chuẩn hóa.

+0

Khi bạn nói "không thay đổi" bạn có nghĩa là nếu * bất cứ điều gì * thay đổi trên đối tượng chủ đó, bạn đang xóa nó và tạo một cái mới? –

+1

Xin lỗi, có thể do sử dụng sai từ đó. Bởi không thay đổi, tôi có nghĩa là danh sách tổng thể không được sửa đổi trong quá trình tạo danh sách không chuẩn hóa. –

9

Một điều cần làm là có một "hệ thống bản ghi" hoặc làm chủ cho từng loại dữ liệu bạn có. Không cần phải là nguồn duy nhất cho tất cả dữ liệu nhưng mỗi nguồn phải có một.

Một biện pháp khác cần thực hiện là làm cho dữ liệu được phiên bản (giữ lại các thay đổi lịch sử) để dữ liệu không chuẩn hóa có thể không thay đổi được - trong ví dụ của bạn dữ liệu người chơi cho một giải đấu đã xảy ra trong quá khứ là phù hợp với thời gian đó. Nếu một người chơi chuyển đến địa chỉ mới kể từ đó bạn vẫn có thể nhận được điều đó bằng cách truy cập "hệ thống hồ sơ" của người chơi để nhận địa chỉ hiện tại nhưng hồ sơ giải đấu phản ánh địa chỉ của anh ấy vào thời điểm đó ...

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