Firebase ile önbellek oluşturma

Looker Studio, raporlar için kendi önbellek sistemine sahiptir. Oluşturduğunuz bağlayıcısına izin verdiğinizde, daha hızlı raporları ve erişimi kolaylaştırmak için özel bir önbellek Yıllık Yüzde Oranı oranı sınırlamalarından kaçının.

Örneğin, geçmiş hava durumu verileri sağlayan bir bağlayıcı oluşturuyorsunuz. belirli bir posta kodu için son 7 gündür. Bağlayıcınız oldukça yoğunlaşıyor popüler ancak veri getirdiğiniz harici API yüksek bir hıza sahip anlamına gelir. API, verilerini yalnızca günlük olarak güncellediğinden belirli bir posta kodu için aynı veriyi gün içinde bir kereden fazla getirmeniz gerekmez. Bunu kullanma her posta kodu için günlük önbellek uygulayabilirsiniz.

Şartlar

  • Firebase Realtime veritabanı. Böyle bir siteye erişiminiz yoksa bir ve aşağıdaki adımları uygulayarak Kendi Firebase'inizi oluşturmak için başlangıç kılavuzu Realtime Database örneği.
  • Firebase Realtime'daki verileri okumak ve yazmak için kullanılan bir GCP hizmet hesabı Veritabanı.
  • Bir kaynaktan veri getiren Topluluk Bağlayıcısı.

Sınırlamalar

  • Bu çözüm Looker Studio Gelişmiş Hizmetleri ile kullanılamaz. Zaman Uygulamalar'daki bağlayıcı kodunuz olan Looker Studio Gelişmiş Hizmetleri'ni kullanıyorsanız Komut dosyasının verilere erişimi yok. Bu nedenle, verileri önbelleğe alamazsınız nasıl kullanacağınızı göstereceğim.
  • Rapor düzenleyiciler ve görüntüleyenler bu önbelleği sıfırlayamaz.

Çözüm

Hizmet hesabı uygulama

  1. Google Cloud projenizde bir hizmet hesabı oluşturun.
  2. Bu hizmet hesabının, bulut projesinde BigQuery erişimine sahip olduğundan emin olun.
    • Gerekli Kimlik ve Erişim Yönetimi (IAM) Rolleri: Firebase Admin
  3. Hizmet hesabı anahtarlarını almak için JSON dosyasını indirin. Dosyadaki bağlayıcı projenizin komut dosyası özelliklerinde bulunan içeriğe sahip olması gerekir. Bu anahtarları, Apps Komut Dosyası kullanıcı arayüzünde şuna benzer şekilde görünecektir:
    Hizmet hesabı anahtarlarını Komut Dosyası Özellikleri'ne kaydetme
  4. Apps Komut Dosyası projenize Apps Komut Dosyası için OAuth2 kitaplığını ekleyin.
  5. Hizmet hesabı için gerekli OAuth2 kodunu uygulayın:
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'
    ]);
}

Firebase'den okumak ve yazmak için kod uygulayın

Firebase'de okuma ve yazma işlemleri yapmak için Firebase Database REST API'yi kullanacaksınız Gerçek zamanlı veritabanı. Aşağıdaki kod, Google Etiket Yöneticisi'ni kullanarak bu API'ye erişiliyor.

getData() işlevini uygulama

Mevcut getData() kodunuzun önbelleğe alma içermeyen yapısı şöyle görünmelidir: aşağıdaki gibidir:

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
  };
}

getData() kodunuzda önbelleğe almayı kullanmak için şu adımları izleyin:

  1. "Parçayı" belirleme veya "birim" bir veri kümesi seçin.
  2. Önbellekte minimum veri birimini depolamak için benzersiz bir anahtar oluşturun.
    . Örnek uygulama için configparams adresindeki zipcode kullanılıyor seçeceğiz.
    . İsteğe bağlı: Kullanıcı başına önbellek için temel anahtarla ve kullanıcı kimliği. Örnek uygulama:
    js var baseKey = getBaseKey(request); var userEmail = Session.getEffectiveUser().getEmail(); var hasheduserEmail = getHashedValue(userEmail); var compositeKey = baseKey + hasheduserEmail;

  3. Önbelleğe alınan veriler varsa önbelleğin yeni olup olmadığını kontrol edin.
    . Örnekte, belirli bir posta kodu için önbelleğe alınmış veriler güncel tarihi. Veriler önbellekten alındığında önbelleğin tarihi geçerli tarihe göre kontrol edilir.

    var cacheForZipcode = {
      data: <data being cached>,
      ymd: <current date in YYYYMMDD format>
    }
    
  4. Önbelleğe alınan veri yoksa veya önbelleğe alınan veriler yeni değilse verileri getir kaldırmasını sağlar ve önbellekte depolar.

Aşağıdaki örnekte main.js, önbelleğe alma özellikli getData() kodu içeriyor yardımcı olur.

Örnek kod

Ek kaynaklar

Chrome UX Connector, ~20 GB boyutunda BigQuery tabanlı bir kontrol panelini kolaylaştırır binlerce kullanıcıya sunuyor. Bu bağlayıcı Firebase Realtime Database'i kullanır ile birlikte iki katmanlı önbelleğe alma yaklaşımı için Apps Komut Dosyası Önbellek Hizmeti. Görüntüleyin kodunu inceleyin.