MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Konstruujesz spersonalizowany kanał informacyjny podobny do Facebooka:SQL, MongoDB?

Twój kod niewiele mi mówi; Myślę, że byłoby pomocne, gdybyś mógł ułożyć strukturę danych w zwykłym JSON / SQL.

W każdym razie serializowałbym strumień każdego użytkownika do MongoDB. Nie przechowywałbym kodu HTML w bazie danych z różnych powodów (przynajmniej nie na tym poziomie oprogramowania); zamiast tego należy zapisać odpowiednie dane w (prawdopodobnie polimorficznej) kolekcji. Pobieranie kanału informacyjnego jest wtedy bardzo łatwe, indeksacja jest prosta, itd. Struktura widoku zasadniczo by się nie zmieniła. Jeśli później zechcesz zmienić kod HTML, to również jest łatwe.

Minusem jest to, że spowoduje to zduplikowanie wielu danych. Jeśli ludzie mogą mieć wielu obserwujących, może to stać się problemem. Używanie tablic identyfikatorów użytkowników zamiast pojedynczego identyfikatora użytkownika może pomóc (jeśli informacje są takie same dla wszystkich obserwujących), ale jest to również ograniczone.

W przypadku bardzo dużych problemów z asocjacjami jest tylko buforowanie. Jak rozumiem, magia zarówno na facebooku, jak i twitterze polega na tym, że nie trafiają one zbyt często w db i przechowują dużo danych w pamięci RAM. Jeśli kojarzysz miliardy elementów, robienie tego jest wyzwaniem nawet w pamięci RAM.

Aktualizacje powinny być pisane w sposób ciągły, a nie co godzinę. Załóżmy, że masz duży ruch, a godzinowa aktualizacja zajmuje 30 minut. Teraz najgorszy przypadek to 90 min. opóźnienie. Jeśli przetwarzasz zmiany na czas, możesz skrócić ten czas do prawdopodobnie 5 minut.

W pewnym momencie będziesz musiał wprowadzić założenia, użyć pamięci podręcznej i trochę heurystyk. Kilka przykładów:

  • Im nowszy tweet, tym większy ruch zobaczy. Ma większą szansę na retweetowanie i jest widywany znacznie częściej. Trzymaj go w pamięci RAM.
  • Twoja strona z przeglądem osi czasu na Facebooku z 1991 roku prawdopodobnie nie zmieni się codziennie, więc jest to kandydat do długoterminowego buforowania danych wyjściowych.
  • Obecna aktywność na Facebooku prawdopodobnie zostanie poddana wielu zapisom. Buforowanie danych wyjściowych niewiele tu pomoże. Ponownie, obiekt powinien być przechowywany w pamięci RAM.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd [ERR_HTTP_HEADERS_SENT] Nie można ustawić nagłówków po ich wysłaniu do klienta

  2. Wyjaśnij strukturę agregacji

  3. po usunięciu dokumentu z ograniczonej kolekcji w mongoDB, wystąpił błąd?

  4. nie można zaktualizować dokumentu przez 'findById' i save() z obietnicą

  5. W pymongo MongoDB, jak zrobić count()?