2010-05-16 71 views
5

Như tôi đã hiểu, bạn có thể nhập bất kỳ thông tin không có cấu trúc nào vào cơ sở dữ liệu hướng tài liệu. Hãy tưởng tượng một tài liệu như thế này:Cơ sở dữ liệu hướng tài liệu - Điều gì xảy ra nếu định nghĩa tài liệu thay đổi?

{ 
    name: 'John Blank', 
    yearOfBirth: 1960 
} 

Sau đó, trong một phiên bản mới, cấu trúc này được refactored để

{ 
    firstname: 'John', 
    lastname: 'Blank', 
    yearOfBirth: 1960 
} 

Làm thế nào để bạn làm điều này với cơ sở dữ liệu Tài liệu hướng? Bạn có phải chuẩn bị các kịch bản hợp nhất, thay đổi tất cả các mục nhập của bạn trong cơ sở dữ liệu không? Hoặc có cách nào tốt hơn bạn có thể xử lý các thay đổi trong cấu trúc?

Trả lời

3

Tái cấu trúc ở đây ngụ ý rằng có một ánh xạ xác định từ lược đồ cũ đến lược đồ mới. Vì vậy, lựa chọn hiệu quả nhất là làm điều tương tự bạn muốn làm với một cơ sở dữ liệu SQL và thực sự cập nhật các tài liệu.

Cơ sở dữ liệu định hướng tài liệu cung cấp cho bạn một tùy chọn khác, mặc dù tùy thuộc vào DODB và cách bạn sử dụng DODB trên giao diện người dùng. Tùy chọn đó chỉ đơn giản là để lại dữ liệu một mình và hỗ trợ định nghĩa "cũ" trong ứng dụng của bạn như là một tùy chọn tương thích ngược. Nói cách khác, bạn đang thực hiện các bản dịch này một cách nhanh chóng, trái ngược với bản cập nhật thường xuyên một lần.

Đây không thực sự là một tùy chọn với cơ sở dữ liệu SQL vì bạn phải giữ cột cũ và có thể lập chỉ mục. Với DODB, bạn không thực sự lãng phí bất kỳ không gian dữ liệu hoặc chỉ mục nào. Bạn sẽ phải cân nhắc những lợi thế chống lại những bất lợi.

Những bất lợi chính là, rõ ràng, sự mâu thuẫn, có thể phát triển theo thời gian và dẫn đến lỗi. Một bất lợi khác có thể là chi phí tính toán khi thực hiện điều này một cách nhanh chóng hoặc không có khả năng sử dụng hiệu quả cấu trúc mới (ví dụ, bạn có thể muốn lập chỉ mục trên chỉ lastname). Vì vậy, hầu hết thời gian, tôi nghĩ rằng tôi sẽ chỉ chọn để chạy một cập nhật hàng loạt.

Có một lợi thế rõ ràng để bảo toàn tài liệu cũ; nếu bạn không chắc chắn rằng việc tái cấu trúc của bạn là hoàn hảo - ví dụ: nếu dữ liệu trong cột name của bạn không tuân theo quy ước nhất quán, có thể trong một số trường hợp là lastname, firstname và trong các trường hợp khác là firstname lastname và trong các trường hợp khác là company name - thì thực hiện chuyển đổi của bạn mà không cần cập nhật vĩnh viễn cho phép bạn tinh chỉnh ánh xạ theo thời gian, vì vậy bạn có thể sử dụng các trường firstnamelastname khi khả dụng nhưng quay trở lại trò chơi phỏng đoán name cho dữ liệu cũ.

Như đã nói, tôi có thể đặt trước tùy chọn thứ hai cho các trường hợp ngoại lệ, nơi tôi không tự tin rằng tôi có thể nhận được "tái cấu trúc" chính xác cho mọi bản ghi/tài liệu. Tuy nhiên, đó là một tùy chọn có sẵn cho bạn mà bạn không thực sự có với các loại cơ sở dữ liệu khác.

Ngoài hai thứ đó, tôi không thấy bất kỳ lựa chọn thay thế rõ ràng nào khác. Đó là một quyết định nhị phân; hoặc bạn cập nhật vĩnh viễn dữ liệu hiện có hoặc bạn không cập nhật.

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