Về cơ bản, bạn có 3 lựa chọn:
-
Chỉ cần lưu trữ
userId
và sau đó tìm nạp người dùng một cách riêng biệt. Bằng cách này, bạn luôn nhận được kết quả tối ưu về dữ liệu mới. Nhưng tất nhiên là chậm hơn. Về cơ bản, đó là những gì một cơ sở dữ liệu quan hệ làm. Một SQL DB sẽ chỉ xem khóa ngoại và tìm nạp dữ liệu theo id. -
Sống với dữ liệu lỗi thời. Lưu trữ bản sao của tên người dùng bên trong các bình luận. Đôi khi đây là hành vi mong muốn, bởi vì bằng cách này, bạn có thể biểu diễn dữ liệu chính xác như khi nó được lưu trữ. Điều này có nghĩa là:Nếu John tạo nhận xét và sau đó tên người dùng của anh ấy được cập nhật thành Paul, bạn vẫn có thể thấy, tên người dùng đó đã được tạo với tên John. (Điều này đặc biệt hữu ích đối với hóa đơn, khi bạn tham chiếu đến một người ở đó và địa chỉ thay đổi, thay vì bạn không muốn cập nhật địa chỉ của hóa đơn cũ)
-
Cập nhật mọi thứ có chứa tên người dùng, khi tên người dùng được cập nhật. Điều này cũng không tệ, vì tên người dùng thường không bao giờ thay đổi. Vì vậy, các lần đọc sẽ luôn nhanh chóng, bởi vì tên được lưu trữ bên trong nhận xét. Và nếu tên thay đổi, bạn phải cập nhật mọi thứ mà người dùng có liên quan. Tất nhiên, đây là một nhiệm vụ chậm, nhưng vì nó không nên xảy ra hàng phút, nó có thể chấp nhận được.
3.1 Bạn có thể tối ưu hóa mọi thứ:nếu tên người dùng thay đổi, điều này sẽ được lưu trữ ở đâu đó và được áp dụng vào lúc nửa đêm. Bằng cách này, bạn có thể thu thập nhiều lần thay đổi tên và cập nhật mọi thứ cùng một lúc.
Như bạn có thể thấy: NoSQL là sự lựa chọn . Bạn có thể làm những điều phù hợp nhất với dữ liệu của mình. Tất nhiên, đó luôn là sự cân bằng:Chậm hơn / nhanh hơn, viết nhiều / ít mã hơn, dễ dàng hơn / khó bảo trì hơn.
Tóm lại là:
- Ghi nhanh, dữ liệu nhất quán, đọc chậm
- Ghi nhanh, dữ liệu nhất quán, đọc nhanh
- Ghi nhanh, đọc nhanh, dữ liệu nhất quán sau quá trình cập nhật có thể mất một chút thời gian. Và quá trình cập nhật tất nhiên là chậm.