1) Что собой представляет Firebase Realtime database?
Хранимая в облаке документ-ориентированная NoSQL база данных . Данные сохраняются в формате JSON и обновляются в режиме реального времени через механизм pus/sub. Ключевое отличие от других движков БД заключается в том, что доступ к ней можно получить непосредственно на клиенте (веб-браузер, Android/iOS приложение), а также доступно REST API , чтобы контролировать доступ к конфиденциальным данным есть возможность использовать декларативные правила безопасности.
В Firebase Realtime database поддерживается автономный режим, все измененные данные, когда клиент был в автономном режиме будут автоматически синхронизированы с сервером.

2) Как структурировать Firebase DB?

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

3) Какие методы доступены для управления данными?

В JavaScript SDK доступны такие методы:
  • db.getRef('path') чтобы указать путь к узлу
  • push({data:1}) чтобы создать узел по указанному пути, он немедленно возвращает ключ созданного узла
  • update({newData:3})  частично обновить все данные в указанном месте
  • set({newData:2}) перезаписать все данные в указанном местеее
  • once('value',snapshot=>snapshot.val())  прочитать данные и подписываться на изменения
4) Поддерживает ли индексы Firebase ?

Firebase  база данных поддерживает индексацию данных, необходимо указать индексы в файле правил базы данных. При попытке фильтрации данных по неустановленному индексу появляется предупреждение, и Firebase загружает все данные и фильтрует их на стороне клиента.
Пример индекса.
{
    "users": {
        ".indexOn": ["email"]
    }
}

5) Как сделать выборку по нескольким параметрам Firebase?

Если вы попытаетесь вызвать orderBy() метод два раза, то будет выброшено исключение, потому что Firebase не поддерживает несколько параметров фильтра. Можно отфильтровать часть данных на стороне сервера, на стороне клиента вручную. Или создайте свои собственные составные индексы(compound index).

6) Как получить только ключи в Firebase?

Это возможно только с помощью REST API-интерфейса , просто добавьте параметр shallow=true

https://dinosaur-facts.firebaseio.com/dinosaurs.json?shallow=true

7) Как реализовать пагинацию в Firebase (разбиение по страницам)?

Существует два способа для реализации пагинации в Firebase, первый заключается в использовании методов limitToLast() или limitToFirst() , которые устанавливают максимальное количество дочерних узлов быть извлечена из таблицы. Проблема в том, что вы не можете получить общее количество узлов, прежде чем не загрузите их все. Поэтому этот способ подходит только для функциональность похожой на кнопку “загрузить больше” .

firebase.database().ref("employees").orderByChild("balance").limitToFirst(10);

Второй способ заключается в том, чтобы получить общее количество строк с помощью REST API с параметром shallow=true, а затем использовать orderByKey() метод в сочетании с значение параметра startAt() и протоколом endat() методы.

let employees = await db.ref("employees").orderByKey()
    .startAt(firstKey).endAt(lastKey)
    .once('value').then(snapshot => snapshot.val());

Проблема второго способа заключается в том, что вы не можете фильтровать данные с параметром shalow=true,так как он не может быть использован в сочетании с любым оператором  тип startAt или endAt. Таким образом, пагинация будет воспроизводится по всей таблице, и если вам нужна функция поиска лучше использовать функциональность limitToFirst

8) Что такое cloud functions? 

Это аналог AWS Лямбда от Google, который используется для создания приложений без использования сервера (serverless app). Вы пишете функцию и указываете триггер, который должен вызвать ее. Есть такие типы триггеров: pub/sub триггеры, триггеры HTTP, Realtime database триггеры, Auth триггеры,  Firestore триггеры. Функции должны реализовываться на Node.JS

9) Как задеплоить firebase functions?

Чтобы развернуть облачные функции, нужно установить  npm пакет firebase-tools глобально.

Затем необходимо выполнить команду firebase login в консоли, изменить текущий каталог на репозиторий проекта и выполнить команду firebase init functions, и firebase создаст минимальный шаблон облачной функции, который готов к развертыванию.

Последний шаг-выполнение команды.
firebase deploy --only functions