Tôi đang làm việc trên một trang web sẽ sử dụng các tính năng của mạng xã hội (như facebook chẳng hạn).Mẫu thiết kế: hệ thống thông báo
Tôi muốn triển khai hệ thống thông báo hiển thị nội dung như "X đã thêm bạn làm bạn", "Y mời bạn tham dự", "Z đã thực hiện câu đố mới nhất" ... và tôi không biết cách làm.
Tôi tự hỏi là những gì các giải pháp tốt nhất:
- Giải pháp 1, hay còn gọi là "khai thác gỗ".
Bảng "thông báo" chuyên dụng. Tôi thêm hàng trong bảng này mọi thứ làm tăng một thông báo happend (bạn thêm, quizz trả lời, vv). Bảng "thông báo" có các trường có chứa thông tin khác nhau, theo loại thông báo nào được thêm vào bảng.
Tốt: dễ dàng mã, tách biệt giữa tính năng thông báo và tính năng "bình thường", không quá nhiều tài nguyên khi tôi cần đọc bảng.
Bad: Bảng thông báo sẽ phát triển rất lớn (tôi nghĩ tôi sẽ thêm 10k hàng/ngày trong bảng), thông tin "trùng lặp": thông tin trong bảng thông báo có thể tìm thấy trong tất cả các bảng khác sử dụng ngày/danh sách/so sánh bất kỳ.
- Giải pháp 2, còn gọi là "tìm khắp mọi nơi".
Mỗi lần tôi cần hiển thị danh sách thông báo hoặc hiển thị có bao nhiêu thông báo mới, tôi nhìn vào tất cả các bảng có liên quan, so sánh ngày/v.v để biết điều gì mới xảy ra kể từ lần cuối cùng người dùng kiểm tra thông báo.
Tốt: Không phải bảng quá lớn so với giải pháp 1, không có "dự phòng" của thông tin.
Bad: Tôi sợ vì số lượng người dùng (~ 1k +), nó làm cho máy chủ phát nổ vì nó là tài nguyên/tốn thời gian, khó mã hóa/duy trì.
Bạn có thể cho tôi biết suy nghĩ của bạn tốt hơn và lý do tại sao hay bạn có giải pháp mà tôi không tưởng tượng được không?
Cảm ơn =)
Edit: Hãy nói rằng tôi sử dụng một thiết kế DB thực sự cơ bản: Người dùng có bạn bè, có thể làm trắc nghiệm nào. 1 bảng cho danh sách người dùng, danh sách câu hỏi, 1 bảng câu đố < -> quan hệ người dùng, 1 người dùng bảng < -> người dùng cho tình bạn. Mỗi khi người dùng truy cập tiểu sử của riêng mình, anh ấy có thể xem điều gì đã xảy ra: câu đố mới < -> quan hệ người dùng, người dùng mới < -> quan hệ người dùng, v.v. Bạn sẽ thiết kế thông báo như thế nào?
Đó là giải pháp tôi thích. Nhưng tôi tự hỏi liệu bảng "xếp hàng" có chứa thông báo của mọi người sẽ không quá lớn sau một thời gian? Hãy nói rằng tôi có 2k người dùng, có 5 thông báo/ngày (đó là khoảng những gì sẽ happend), đó là 10k/ngày hàng mới trong bảng này. Bạn nghĩ sao ? –
Bạn có thể có hàng đợi "đại lý miễn phí", được gán cho người dùng có thư đang chờ xử lý và sau khi tất cả thư bị mất, hàng đợi có thể đi vào hàng đợi miễn phí để người dùng khác sử dụng. Điều này cũng có thể kiểm soát tốc độ bạn tạo bản cập nhật, hồ bơi hạn chế hữu ích và giám sát thông báo trung bình trên mỗi hàng đợi hoặc thư trong hàng chờ đợi có thể cho bạn biết khi nào bạn cần mở rộng hệ thống theo chiều ngang. – AlexC
Mm, bạn có thể giải thích nó một cách chính xác. Giữa nhanh mà tôi không phải người Mỹ cũng không phải tiếng Anh, và thực tế là tôi hút vào dev (^^), tôi đã không bắt được tất cả những gì bạn nói. thanks =) –