2009-04-17 23 views

Trả lời

37

Nhiều người trong số các trang web mạng xã hội như Twitter không sử dụng một RDBMS ở tất cả, nhưng một ứng dụng Message Queue. Rất nhiều người trong số họ bắt đầu với một ứng dụng đã có như RabbitMQ. Một số người trong số họ nhận được đủ lớn họ phải tùy chỉnh nhiều hoặc xây dựng của riêng mình. Twitter đang trong quá trình thực hiện điều này lần thứ hai.

Ứng dụng tin nhắn xếp hàng hoạt động bằng cách giữ tin nhắn từ một dịch vụ cho một hoặc nhiều dịch vụ khác. Ví dụ, nói dịch vụ Frank đang xuất bản các tin nhắn đến một hàng đợi foo. Joe và Jill được đăng ký với Franks foo hàng đợi. ứng dụng sẽ theo dõi xem Joe hoặc Jill có nhận được tin nhắn hay không và một khi mọi người đăng ký vào hàng đợi đã nhận được thông báo, nó sẽ hủy bỏ nó. Frank kích hoạt tin nhắn và quên nó đi. Joe và Jill yêu cầu tin nhắn từ foo và nhận bất kỳ tin nhắn nào họ chưa nhận được. Joe và Jill làm bất cứ điều gì họ cần làm với thông điệp. Có lẽ giữ nó xung quanh có lẽ không.

Ứng dụng hàng đợi tin nhắn đảm bảo rằng mọi người được cho là nhận được tin nhắn có thể và sẽ nhận được tin nhắn khi họ yêu cầu họ. Nhà xuất bản có thể gửi tin nhắn tự tin rằng người đăng ký có thể nhận được chúng cuối cùng. Điều này có lợi ích là hoàn toàn không đồng bộ và không đòi hỏi sự tham gia tốn kém.

CHỈNH SỬA: Tôi cũng nên đề cập đến việc lưu trữ các loại thứ này ở quy mô lớn thường bị tiêu chuẩn hóa rất nhiều. Vì vậy, Joe và Jill có thể lưu trữ một bản sao của cùng một thông điệp chính xác. Điều này được coi là ok vì nó giúp quy mô ứng dụng tới hàng tỷ người dùng.

đọc khác:

  1. http://www.rabbitmq.com/
  2. http://qpid.apache.org/
+1

+1 đề cập đến denormalization, đây không phải là rõ ràng với SQL cũ wor ld nơi 3NF đã là ngôi sao hướng dẫn trong một thời gian dài. (http://en.wikipedia.org/wiki/Third_normal_form) – Crypth

0

Đối với quy mô nhỏ tham gia vào users.friends và users.events và truy vấn bộ nhớ đệm có lẽ là tốt nhưng không chậm lại khá nhanh khi bạn bè và sự kiện phát triển. Bạn cũng có thể thử một mô hình dựa trên sự kiện trong đó mỗi lần người dùng tạo một sự kiện một mục được tạo ra trong một bảng nối kết (có thể được gọi là "friends_events"). Vì vậy, bất cứ khi nào người dùng muốn xem những sự kiện mà bạn bè của họ đã tạo, họ có thể chỉ cần thực hiện một kết hợp giữa id của riêng họ và bảng friends_events và tìm hiểu. Bằng cách này, bạn tránh lấy tất cả người dùng với bạn bè và sau đó kết bạn với bảng sự kiện.

7

Cấu trúc dữ liệu chính của các trang web mạng xã hội là graph. Trên facebook, đồ thị không được hướng dẫn (Khi bạn là bạn của ai đó, họ là bạn của bạn). Trên twitter đồ thị được đạo diễn (Bạn theo dõi ai đó, nhưng họ không nhất thiết phải theo bạn).

Hai cách phổ biến để biểu thị đồ thị là adjacency listsadjacency matrices.

Danh sách kề chỉ đơn giản là danh sách các cạnh trên biểu đồ. Xem xét một người dùng có userid nguyên.

User1, User2 
    1  2 
    1  3 
    2  3 

Việc giải thích vô hướng của những hồ sơ này là sử dụng 1 là bạn bè với những người dùng 2 và 3 và sử dụng 2 cũng kết bạn với người sử dụng 3.

Đại diện này trong một bảng cơ sở dữ liệu là tầm thường. Đó là mối quan hệ nhiều đến nhiều bảng mà chúng ta đã quen thuộc. Các truy vấn SQL để tìm bạn bè của một người dùng cụ thể khá dễ viết.

Bây giờ bạn đã biết bạn bè của một người dùng cụ thể, bạn chỉ cần tham gia các kết quả đó vào bảng cập nhật. Bảng này chứa tất cả các cập nhật của người dùng được lập chỉ mục bởi id người dùng.

Chừng nào tất cả các bảng được lập chỉ mục đúng cách, bạn sẽ có một thời gian khá dễ dàng thiết kế các truy vấn hiệu quả để trả lời các câu hỏi bạn quan tâm đến.

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