メインコンテンツへスキップ
GitHubでこのページを編集

キャッシング

Supersetは、キャッシング目的でFlask-Cachingを使用しています。Flask-Cachingは、Redis(推奨)、Memcached、SimpleCache(インメモリ)、ローカルファイルシステムなど、さまざまなキャッシングバックエンドをサポートしています。カスタムキャッシュバックエンドもサポートされています。

キャッシングは、Flask-Cachingの設定仕様に準拠した辞書をsuperset_config.pyで提供することで設定できます。

次のキャッシュ設定をこのようにカスタマイズできます。

  • ダッシュボードフィルターの状態(必須):FILTER_STATE_CACHE_CONFIG
  • 探索チャートのフォームデータ(必須):EXPLORE_FORM_DATA_CACHE_CONFIG
  • メタデータキャッシュ(オプション):CACHE_CONFIG
  • データセットからクエリされたチャートデータ(オプション):DATA_CACHE_CONFIG

たとえば、Redisを使用してフィルター状態キャッシュを設定するには

FILTER_STATE_CACHE_CONFIG = {
'CACHE_TYPE': 'RedisCache',
'CACHE_DEFAULT_TIMEOUT': 86400,
'CACHE_KEY_PREFIX': 'superset_filter_cache',
'CACHE_REDIS_URL': 'redis://localhost:6379/0'
}

依存関係

専用のキャッシュストアを使用するには、追加のPythonライブラリをインストールする必要があります

  • Redisの場合:redisPythonパッケージをお勧めします
  • Memcached:pylibmcクライアントライブラリの使用をお勧めします。これは、python-memcachedがバイナリデータの保存を正しく処理しないためです。

これらのライブラリはpipを使用してインストールできます。

フォールバックメタストアキャッシュ

フィルター状態と探索キャッシュの一部は必須であることに注意してください。これらのキャッシュのいずれかが未定義の場合、Supersetはメタデータデータベースにデータを格納する組み込みキャッシュの使用にフォールバックします。専用のキャッシュを使用することをお勧めしますが、組み込みキャッシュを使用して他のデータをキャッシュすることもできます。

たとえば、組み込みキャッシュを使用してチャートデータを保存するには、次の設定を使用します

DATA_CACHE_CONFIG = {
"CACHE_TYPE": "SupersetMetastoreCache",
"CACHE_KEY_PREFIX": "superset_results", # make sure this string is unique to avoid collisions
"CACHE_DEFAULT_TIMEOUT": 86400, # 60 seconds * 60 minutes * 24 hours
}

チャートキャッシュタイムアウト

チャートのキャッシュタイムアウトは、個々のチャート、データセット、またはデータベースの設定によって上書きされる場合があります。これらの各設定は、DATA_CACHE_CONFIGで定義されたデフォルト値にフォールバックする前に順番にチェックされます。

キャッシュタイムアウトを-1に設定すると、チャートデータ、データセット、またはデータベースごと、またはDATA_CACHE_CONFIGで設定されている場合はデフォルトで、チャートデータのキャッシュを無効にできることに注意してください。

SQL Labクエリ結果

SQL Labクエリ結果のキャッシングは、非同期クエリが有効になっている場合に使用され、RESULTS_BACKENDを使用して設定されます。

この設定は、その設定にflask-caching辞書を使用するのではなく、代わりにcachelibオブジェクトを必要とすることに注意してください。

詳細については、Celery経由の非同期クエリを参照してください。

サムネイルのキャッシング

これはオプションの機能であり、configで機能フラグをアクティブ化することでオンにできます

FEATURE_FLAGS = {
"THUMBNAILS": True,
"THUMBNAILS_SQLA_LISTENERS": True,
}

デフォルトでは、サムネイルはユーザーごとにレンダリングされ、匿名ユーザーの場合はSeleniumユーザーにフォールバックします。サムネイルを常に固定ユーザー(この例ではadmin)としてレンダリングするには、次の設定を使用します

from superset.tasks.types import ExecutorType

THUMBNAIL_SELENIUM_USER = "admin"
THUMBNAIL_EXECUTE_AS = [ExecutorType.SELENIUM]

この機能を使用するには、キャッシュシステムとCeleryワーカーが必要です。すべてのサムネイルはキャッシュに保存され、ワーカーによって非同期的に処理されます。

画像がS3に保存される構成例を次に示します。

from flask import Flask
from s3cache.s3cache import S3Cache

...

class CeleryConfig(object):
broker_url = "redis://localhost:6379/0"
imports = (
"superset.sql_lab",
"superset.tasks.thumbnails",
)
result_backend = "redis://localhost:6379/0"
worker_prefetch_multiplier = 10
task_acks_late = True


CELERY_CONFIG = CeleryConfig

def init_thumbnail_cache(app: Flask) -> S3Cache:
return S3Cache("bucket_name", 'thumbs_cache/')


THUMBNAIL_CACHE_CONFIG = init_thumbnail_cache
# Async selenium thumbnail task will use the following user
THUMBNAIL_SELENIUM_USER = "Admin"

上記の例を使用すると、ダッシュボードのキャッシュキーはsuperset_thumb__dashboard__{ID}になります。SeleniumのベースURLは以下を使用して上書きできます

WEBDRIVER_BASEURL = "https://superset.company.com"

追加のSelenium Webドライバ設定はWEBDRIVER_CONFIGURATIONを使用して設定できます。Seleniumを認証するためのカスタム関数を実装できます。デフォルトの関数はflask-loginセッションCookieを使用します。カスタム関数の署名の例を次に示します

def auth_driver(driver: WebDriver, user: "User") -> WebDriver:
pass

設定時

WEBDRIVER_AUTH_FUNC = auth_driver