2013-04-26 2 views
22

Я тестирую firebase для проекта, который может иметь достаточно большое количество ключей, возможно, миллионов.Производительность Firebase с большими наборами данных

Я протестировал загрузку нескольких 10 тыс. Записей с использованием узла, и производительность загрузки оказалась хорошей. Однако веб-интерфейс «FORGE» становится необычно медленным и отображает каждую отдельную запись, если я расширяю свой корневой узел.

Является ли Firebase не предназначенным для этого объема данных, или я делаю что-то неправильно?

+1

Как упоминает Като, это проблема Forge, а не проблема Firebase. Попробуйте перейти непосредственно к более глубокому пути обработки больших наборов данных. –

ответ

64

Это просто ограничения пользовательского интерфейса Forge. Это все еще довольно рудиментарно.

Функции реального времени в Firebase предназначены не только для больших наборов данных, но и для них. Тот факт, что поток записей в режиме реального времени идеально подходит для этого.

Производительность, как и любое приложение больших данных, не хуже вашей реализации. Итак, вот несколько ошибок, которые нужно учитывать при работе с большими наборами данных.

Денормализовать, Денормализовать, Денормализовать

Если набор данных будет повторяться, и его записи могут быть подсчитаны в тысячах, хранить его в своем собственном пути.

Это плохо для переборе больших массивов данных:

/users/uid 
/users/uid/profile 
/users/uid/chat_messages 
/users/uid/groups 
/users/uid/audit_record 

Это хорошо для переборе больших массивов данных:

/user_profiles/uid 
/user_chat_messages/uid 
/user_groups/uid 
/user_audit_records/uid 

Избегайте 'значение' на больших наборах данных

Используйте child_added, так как value должен загрузить весь набор записей клиенту.

Часы для скрытых value операций на детях

При вызове child_added, вы, по сути, призывающих value на каждом ребенок записи. Поэтому, если эти дети содержат большие списки, им придется загружать все эти данные для возврата. Таким образом, раздел DENORMALIZE выше.

+0

Вы имеете в виду, если мы просто хотим получить все о пользователе, так же как отобразить страницу профиля пользователя, тогда мы используем '' Это плохо для итерации больших наборов данных '', иначе, если вы хотите отобразить список пользовательских примеров для использования администратором, то мы используем '", это полезно для итерации большого набора данных "? – vzhen

+4

@ vzhen довольно много, трюк помнит, что при вызове child_added или value (неважно, какой) вы загружаете все данные по этому пути, включая всех детей, а не только элемент корневого уровня, который вы просили. – Kato

+5

Как упоминал Като, child_added назван немного путаным, так как он также возвращает все данные по пути, независимо от того, когда он был фактически добавлен. Если вы хотите «событие при добавлении нового ребенка», вам нужно сделать что-то вроде 'ref.limitToLast (1) .on ('child_added', ...'. –

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