2010-07-29 30 views
9

Tôi đang thiết kế một ứng dụng liên quan đến hoạt động của mỗi người dùng 'theo ý nghĩa của twitter, nhưng tôi không có kinh nghiệm về thiết kế/hiệu quả của cơ sở dữ liệu/truy vấn. Có các phương pháp hay nhất để quản lý điều này, những cạm bẫy cần tránh, v.v. không? Tôi thu thập điều này có thể tạo ra một tải rất lớn trên db nếu không được thực hiện đúng (hoặc thậm chí có thể sau đó?).'Người theo dõi' và hiệu quả

Nếu có sự khác biệt, mọi người sẽ 'theo dõi' chỉ một số ít người (nhưng một người có thể có nhiều người theo dõi). Tuy nhiên điều này là không chắc chắn, và tôi sẽ không muốn dựa vào nó.

Bất kỳ lời khuyên nào được biết ơn. Cảm ơn.

Trả lời

6

Khá đơn giản và dễ thực hiện với đầy đủ normalisation. Nếu bạn có một bảng người dùng, mỗi người có một ID duy nhất, bạn sẽ có một bảng TABLE_FOLLOWERS với các cột, USERIDFOLLOWERID sẽ mô tả tất cả những người theo dõi cho mỗi người dùng là mối quan hệ một với nhiều người.

Ngay cả với hàng triệu assosciations trên một máy chủ cơ sở dữ liệu nửa phong nha này sẽ thực hiện tốt và nhanh miễn là bạn đang sử dụng một cơ sở dữ liệu tốt (IE, không MS-Access).

+0

Tôi biết đã lâu rồi, tôi tự hỏi 'FOLLOWERID' có lưu nhiều giá trị không? – lazyprogrammer

1

Điều đó tùy thuộc vào số lượng người dùng bạn mong muốn cần hỗ trợ; số lượng người theo dõi bạn mong đợi người dùng có; và loại tài trợ/nỗ lực phát triển nào bạn mong đợi để có quyền truy cập vào câu trả lời của bạn cho những câu hỏi trước đây chứng tỏ lạc quan.

Đối với dự án quy mô nhỏ, tôi có thể sẽ bỏ qua cơ sở dữ liệu, thiết kế ứng dụng dưới dạng mô hình đối tượng đơn giản với User đối tượng duy trì List[followers]. Giữ tất cả trong RAM cho hoạt động bình thường và sử dụng ORM để tồn tại một cơ sở dữ liệu định kỳ (có thể là postgresql hoặc mysql).

Đối với dự án lớn hơn, tôi sẽ không sử dụng cơ sở dữ liệu quan hệ chút nào; nhưng chính xác những gì tôi sẽ sử dụng sẽ phụ thuộc vào các chi tiết cụ thể của dự án.

Nếu bạn chỉ cố gắng tăng đột biến khái niệm, hãy làm theo cách tiếp cận ORM; nhưng, hãy nhớ rằng nó sẽ không mở rộng.

+0

Bạn có phiền khi chỉ cho tôi một số tài liệu giới thiệu về bộ nhớ đối tượng RAM không? Chúng ta đang nói về công nghệ nào? Một cái gì đó giống như Redis? – Chris

+0

Để tăng đột biến, tôi thực sự có nghĩa là duy trì cơ sở dữ liệu đơn giản trực tiếp trong RAM. Giả sử 100.000 người dùng, với trung bình 100 người theo dõi và đối tượng đơn giản ~ 100 byte cho mỗi người dùng và tài liệu tham khảo 4 byte, bạn chỉ cần ~ 40MB cho biểu đồ người theo dõi và 10MB cho người dùng DB. Ngay cả với việc lập chỉ mục trên đầu trang của 3x có thể dễ dàng điều gì đó bạn có thể phù hợp với RAM và vẫn tồn tại mà không gặp quá nhiều khó khăn đối với DB. – Recurse

4

Mô hình khá đơn giản. Vấn đề ở kích thước của bảng Đăng ký; nếu có 1 triệu người dùng và mỗi người đăng ký 1000, thì bảng Đăng ký có 1 tỷ hàng.

alt text http://www.damirsystems.com/dp_images/follower_model.png

+0

biểu đồ đẹp. Cảm ơn. – user749665

+0

@Damir .. bạn có thể giải thích ý nghĩa của "EnableSubscription" trong biểu đồ không? Đó có phải là một bool? Làm thế nào điều này nên làm việc một trong hai cách, làm theo và làm theo trở lại? Và tại sao việc sử dụng một bool? Không thể chỉ sử dụng bảng tổng hợp và tham chiếu userID cả với tư cách Người dùng và Người theo dõi?Đó có phải là EnableSubcription được sử dụng vì có thể cấm người dùng theo dõi bạn không? – Chriz74

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