2014-12-18 2 views
5

Firefeed - очень хороший пример того, что может быть достигнуто с помощью Firebase - полностью клиентского клонирования Twitter. Итак, есть эта страница: https://firefeed.io/about.html, где объясняется логика принятой структуры данных. Это помогает понять правила безопасности Firebase.Структура данных Firebase - соответствующая структура Firefeed?

К концу демонстрации, есть этот фрагмент кода:

var userid = info.id; // info is from the login() call earlier. 
    var sparkRef = firebase.child("sparks").push(); 
    var sparkRefId = sparkRef.name(); 

    // Add spark to global list. 
    sparkRef.set(spark); 

    // Add spark ID to user's list of posted sparks. 
    var currentUser = firebase.child("users").child(userid); 
    currentUser.child("sparks").child(sparkRefId).set(true); 

    // Add spark ID to the feed of everyone following this user. 
    currentUser.child("followers").once("value", function(list) { 
    list.forEach(function(follower) { 
     var childRef = firebase.child("users").child(follower.name()); 
     childRef.child("feed").child(sparkRefId).set(true); 
    }); 
    }); 

Это показывает, как написание делается для того, чтобы держать чтения просто - как сказано:

When нам нужно отобразить фид для конкретного пользователя, нам нужно всего лишь посмотреть в одном месте

Так что я это понимаю. Но если мы посмотрим на Twitter, мы увидим, что на некоторых счетах есть несколько миллионов последователей (большинство из них - Кэти Перри с более чем 61 миллионом!). Что будет с этой структурой и таким подходом? Всякий раз, когда Кэти публикует новый твит, он будет делать 61 миллион операций записи. Разве это не просто убило бы приложение? И даже больше, не потребляет много лишнего пространства?

+0

Я должен сказать, что это просто демо ... – zuo

+0

Конечно, поэтому я прошу о правильном способе сделать это. Это поможет мне лучше понять, как обрабатывать структуру данных на Firebase ... –

+1

Я бы предпочел установить слушателей для учетных записей, за которыми вы следуете, поскольку существует ограничение на количество аккаунтов, за которыми вы можете следить, но нет ограничений для последователей. Итак, да, Кэти Перри убьет приложение. Однако даже настройка 2000 слушателей может быть не идеальной. Возможно, он может вращаться, скажем, 100 учетных записей в то время ... – webduvet

ответ

5

С денормализованными данными единственным способом подключения данных является запись в каждое место, где он считывается. Так что, чтобы опубликовать твит для 61 миллиона последователей, потребуется 61 миллион записей.

Вы бы этого не сделали в браузере. Сервер будет прослушивать события child_added для новых твитов, а затем группа рабочих разбивает нагрузку, разбирая подмножество последователей за раз. Вы можете потенциально назначить приоритет онлайн-пользователям, чтобы получать записи в первую очередь.

С нормированными данными вы пишете твит один раз, но платите за соединение при чтении. Если вы кэшируете твиты в фидах, чтобы избежать попадания в базу данных для каждого запроса, вы возвращаетесь к 61 миллиону записей для повтора для каждого твита Katy Perry. Чтобы вытащить твит в режиме реального времени, вам все равно нужно написать твит в сокет для каждого онлайн-подписчика.

Смежные вопросы