2016-01-01 20 views
5

Cách tiếp cận tốt nhất để cập nhật cột không được lập chỉ mục không được lập chỉ mục (không phải là khóa chính có liên quan) trong suốt các bảng chứa nó trùng lặp?Cách xử lý thay đổi dữ liệu đã chuẩn hóa

tức là người dùng đăng nội dung nào đó và bài đăng đó được nhân bản trong nhiều bảng để truy xuất nhanh. Nhưng khi bài đăng đó thay đổi (với bản chỉnh sửa), nó cần được cập nhật trong toàn bộ cơ sở dữ liệu, trong tất cả các bảng có chứa bài đăng đó (trong các bảng có các khóa chính khác nhau và không xác định).

Giải pháp Tôi đang nghĩ đến việc:

  1. Có một bảng ánh xạ để theo dõi các từ khóa chính trong tất cả các bảng, nhưng có vẻ như để dẫn đến bàn nổ (bài không phải là tài sản duy nhất mà có thể thay đổi).
  2. Sử dụng Solr để thực hiện ánh xạ, nhưng tôi sợ rằng tôi sẽ sử dụng nó cho mục đích sai.

Mọi giác ngộ sẽ được đánh giá cao.

EDIT (lược đồ hư cấu).

Điều gì xảy ra nếu bài đăng thay đổi? hoặc ngay cả tên người dùng display_name của người dùng?

CREATE TABLE users (
    id uuid, 

    display_name text, 

    PRIMARY KEY ((id)) 
); 

CREATE TABLE posts (
    id uuid, 

    post text, 
    poster_id uuid, 
    poster_display_name text 
    tags set<text>, 
    statistics map<int, bigint>, 

    PRIMARY KEY ((id)) 
); 

CREATE TABLE posts_by_user (
    user_id uuid, 
    created timeuuid, 

    post text, 
    post_id uuid, 
    tags set<text>, 
    statistics map<int, bigint>, 

    PRIMARY KEY ((id), created) 
); 
+0

Nếu bạn có thể thêm giản đồ bảng sẽ hữu ích. –

+0

Đã thêm một sơ đồ giả tưởng .. – Droritos

+0

Chúng ta có nên thay đổi tiêu đề thành 'dữ liệu không chuẩn hóa' thay vì 'dữ liệu trùng lặp' không? –

Trả lời

1

Tùy thuộc vào tần suất cập nhật. Ví dụ: nếu người dùng chỉ cập nhật tên của họ không thường xuyên (một số ít thời gian cho mỗi tài khoản người dùng), thì có thể sử dụng chỉ mục phụ là ok. Chỉ cần biết rằng việc sử dụng 2i là một tập hợp phân tán, vì vậy bạn sẽ thấy các vấn đề hiệu suất nếu đó là một hoạt động phổ biến. Trong những trường hợp đó, bạn sẽ muốn sử dụng chế độ xem được thực hiện (hoặc là bản thân trong 3.0 hoặc tự quản lý) để có thể nhận danh sách tất cả các bài đăng cho một người dùng cụ thể, sau đó cập nhật tên hiển thị của người dùng.

Tôi khuyên bạn nên thực hiện thao tác này trong nền và cung cấp cho người dùng một thông báo như "có thể mất [một số đơn vị thời gian] để thay đổi tên của bạn được phản ánh ở mọi nơi".

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