Pamięć podręczna Firebase

Looker Studio ma własny system pamięci podręcznej raportów. Podczas tworzenia możesz zaimplementować niestandardową pamięć podręczną, aby szybciej generować raporty uniknąć ograniczeń RRSO.

Tworzysz na przykład oprogramowanie sprzęgające, które udostępnia historyczne dane pogodowe. z ostatnich 7 dni dla konkretnego kodu pocztowego. Oprogramowanie sprzęgające staje się coraz bardziej popularny, ale zewnętrzny interfejs API, z którego pobierasz dane, ma rygorystyczną szybkość i ograniczeniach. Interfejs API aktualizuje swoje dane tylko codziennie, więc dla określonego kodu pocztowego nie ma potrzeby pobierania tych samych danych wiele razy w ciągu jednego dnia. Użycie tego przewodnika po rozwiązaniu, możesz wdrożyć codzienną pamięć podręczną dla każdego kodu pocztowego.

Wymagania

  • Bazę danych czasu rzeczywistego Firebase – Jeśli nie masz do niego dostępu, utwórz projektu Google Cloud Platform (GCP) Przewodnik dla początkujących dotyczący tworzenia własnej platformy Firebase Instancja bazy danych czasu rzeczywistego.
  • Konto usługi GCP do odczytywania i zapisywania danych w czasie rzeczywistym w Firebase Baza danych.
  • społecznościowe oprogramowanie sprzęgające, które pobiera dane ze źródła;

Ograniczenia

  • Tego rozwiązania nie można używać z usługami zaawansowanymi Looker Studio. Kiedy używasz usług zaawansowanych Looker Studio, czyli kodu oprogramowania sprzęgającego w Google Apps, Skrypt nie ma dostępu do danych. Nie można więc przechowywać w pamięci podręcznej danych. za pomocą Apps Script.
  • Edytorzy i przeglądający raporty nie mogą zresetować tej konkretnej pamięci podręcznej.

Rozwiązanie

Wdrażanie konta usługi

  1. Utwórz konto usługi w projekcie Google Cloud.
  2. Sprawdź, czy to konto usługi ma dostęp do BigQuery w projekcie w chmurze.
    • Wymagane role zarządzania tożsamościami i dostępem: Firebase Admin
  3. Pobierz plik JSON, aby uzyskać klucze kont usługi. Zapisz w we właściwościach skryptu projektu oprogramowania sprzęgającego. Po dodaniu klucz, powinien wyglądać podobnie do tego w interfejsie Apps Script:
    Zapisywanie kluczy konta usługi we właściwościach skryptu
  4. Dodaj bibliotekę OAuth2 for Apps Script do projektu Apps Script.
  5. Zaimplementuj wymagany kod OAuth2 na koncie usługi:
firestore-cache/src/firebase.js
var SERVICE_ACCOUNT_CREDS = 'SERVICE_ACCOUNT_CREDS';
var SERVICE_ACCOUNT_KEY = 'private_key';
var SERVICE_ACCOUNT_EMAIL = 'client_email';
var BILLING_PROJECT_ID = 'project_id';

var scriptProperties = PropertiesService.getScriptProperties();

/**
 * Copy the entire credentials JSON file from creating a service account in GCP.
 * Service account should have `Firebase Admin` IAM role.
 */
function getServiceAccountCreds() {
  return JSON.parse(scriptProperties.getProperty(SERVICE_ACCOUNT_CREDS));
}

function getOauthService() {
  var serviceAccountCreds = getServiceAccountCreds();
  var serviceAccountKey = serviceAccountCreds[SERVICE_ACCOUNT_KEY];
  var serviceAccountEmail = serviceAccountCreds[SERVICE_ACCOUNT_EMAIL];

  return OAuth2.createService('FirebaseCache')
    .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
    .setTokenUrl('https://accounts.google.com/o/oauth2/token')
    .setPrivateKey(serviceAccountKey)
    .setIssuer(serviceAccountEmail)
    .setPropertyStore(scriptProperties)
    .setCache(CacheService.getScriptCache())
    .setScope([
      'https://www.googleapis.com/auth/userinfo.email',
      'https://www.googleapis.com/auth/firebase.database'
    ]);
}

Implementacja kodu do odczytu i zapisu z Firebase

Do odczytu i zapisu w Firebase będziesz używać interfejsu API typu REST Firebase Database. Baza danych czasu rzeczywistego. Ten kod implementuje metody wymagane do dostępu do tego interfejsu API.

Implementacja getData()

Struktura istniejącego kodu w usłudze getData() bez buforowania powinna wyglądać podobny do tego:

firestore-cache/src/without-caching.js
/*
 * This file is only to demonstrate how the `getData()` fucntion would look
 * like without the Firebase Realtime Database caching. It is not a part of
 * the connector code and should not be included in Apps Script / Clasp.
 */

function getData(request) {
  var requestedFields = getFields().forIds(
    request.fields.map(function(field) {
      return field.name;
    })
  );

  var fetchedData = fetchAndParseData(request);
  var data = getFormattedData(fetchedData, requestedFields);

  return {
    schema: requestedFields.build(),
    rows: data
  };
}

Aby użyć buforowania w kodzie getData(), wykonaj te czynności:

  1. Określ „fragment” lub „jednostka” danych, które powinny być buforowane.
  2. Utwórz unikalny klucz do przechowywania minimalnej jednostki danych w pamięci podręcznej.
    W przykładowej implementacji użyto pola zipcode z configparams jako klucz.
    Opcjonalnie: w przypadku pamięci podręcznej poszczególnych użytkowników utwórz klucz złożony, używając klucza podstawowego i tożsamość użytkownika. Przykładowa implementacja:
    js var baseKey = getBaseKey(request); var userEmail = Session.getEffectiveUser().getEmail(); var hasheduserEmail = getHashedValue(userEmail); var compositeKey = baseKey + hasheduserEmail;

  3. Jeśli dane w pamięci podręcznej istnieją, sprawdź, czy pamięć podręczna jest aktualne.
    W tym przykładzie dane dla konkretnego kodu pocztowego w pamięci podręcznej są zapisywane wraz z atrybutem bieżącej daty. Podczas pobierania danych z pamięci podręcznej data przechowywania w pamięci podręcznej to jest sprawdzany w porównaniu z bieżącą datą.

    var cacheForZipcode = {
      data: <data being cached>,
      ymd: <current date in YYYYMMDD format>
    }
    
  4. Jeśli dane w pamięci podręcznej nie istnieją lub są one nieaktualne, pobierz dane ze źródła i przechowywać ją w pamięci podręcznej.

W poniższym przykładzie reguła main.js zawiera kod getData() z buforowaniem .

Przykładowy kod

Dodatkowe materiały

Oprogramowanie sprzęgające Chrome UX umożliwia korzystanie z panelu opartego na BigQuery o wielkości około 20 GB dla tysięcy użytkowników. To oprogramowanie sprzęgające korzysta z Bazy danych czasu rzeczywistego Firebase wraz z Apps Script Cache Service, która zapewnia dwuwarstwowe podejście do buforowania. Zobacz kod, by poznać szczegóły implementacji.