MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xây dựng Newsfeed giống Facebook được cá nhân hóa:SQL, MongoDB?

Mã của bạn không cho tôi biết nhiều điều; Tôi nghĩ sẽ rất hữu ích nếu bạn có thể bố trí cấu trúc dữ liệu của mình bằng JSON / SQL thuần túy.

Dù sao đi nữa, tôi sẽ tuần tự hóa luồng của từng người dùng thành MongoDB. Tôi sẽ không lưu trữ HTML trong cơ sở dữ liệu vì nhiều lý do (ít nhất là không phải ở cấp độ đó của phần mềm); thay vào đó, bạn nên lưu dữ liệu có liên quan trong một tập hợp (có thể là đa hình). Sau đó, việc tìm nạp nguồn cấp tin tức rất dễ dàng, việc lập chỉ mục rất đơn giản, v.v. Cấu trúc chế độ xem về cơ bản sẽ không thay đổi. Nếu sau này bạn muốn thay đổi HTML, điều đó cũng dễ dàng.

Nhược điểm là điều này sẽ sao chép rất nhiều dữ liệu. Nếu mọi người có thể có nhiều người theo dõi, điều này có thể trở thành một vấn đề. Sử dụng mảng id người dùng thay vì một id người dùng duy nhất có thể hữu ích (nếu thông tin giống nhau cho tất cả những người theo dõi), nhưng nó cũng bị hạn chế.

Đối với các vấn đề liên kết rất lớn, chỉ có bộ nhớ đệm. Theo cách hiểu của tôi, điều kỳ diệu ở cả facebook và twitter là chúng không bị lỗi db rất thường xuyên và giữ rất nhiều dữ liệu trong RAM. Nếu bạn đang liên kết hàng tỷ mục, thực hiện điều đó là một thách thức ngay cả trong RAM.

Các bản cập nhật nên được viết liên tục thay vì hàng giờ. Giả sử bạn có nhiều lưu lượng truy cập và cập nhật hàng giờ mất 30 phút. Bây giờ, trường hợp xấu nhất là 90 phút. sự chậm trễ. Nếu bạn xử lý các thay đổi ngay trong thời gian, bạn có thể cắt giảm thời gian này xuống có thể là 5 phút.

Tại một số thời điểm, bạn sẽ phải đưa ra các giả định, sử dụng bộ nhớ đệm và một số phương pháp phỏng đoán. Một số ví dụ:

  • Một tweet càng gần đây, thì càng có nhiều lưu lượng truy cập. Nó có cơ hội được tweet lại cao hơn và nó được nhìn thấy thường xuyên hơn nhiều. Giữ nó trong RAM.
  • Trang tổng quan về dòng thời gian trên facebook của bạn năm 1991 có thể sẽ không thay đổi hàng ngày, vì vậy đây là một ứng cử viên cho bộ nhớ đệm đầu ra lâu dài.
  • Hoạt động facebook hiện tại có thể trải qua nhiều bài viết. Bộ nhớ đệm đầu ra sẽ không giúp được gì nhiều ở đây. Một lần nữa, đối tượng nên được giữ trong RAM.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. giới hạn số lượng bộ sưu tập trong cơ sở dữ liệu

  2. Lưu trữ chuỗi Json dưới dạng mảng MongoDB trong C #

  3. Mongoosastic - thông báo {[Lỗi:Không có kết nối trong cuộc sống]:'Không có kết nối trong cuộc sống'}

  4. MongoDB updateOne ()

  5. Sử dụng nhiều cơ sở dữ liệu Mongodb với Meteor.js