Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supabase: データ使用量の確認 + 必要に応じて有料プランへのアップグレードしましょう #1297

Open
3 tasks
KATO-Hiro opened this issue Sep 23, 2024 · 2 comments

Comments

@KATO-Hiro
Copy link
Collaborator

KATO-Hiro commented Sep 23, 2024

WHY

  • 一部に関しては無料プラン枠を超過している可能性があるため

TODO

  • Egress Bandwidth の利用量が増えている原因を特定
  • APIリクエストの制限
  • キャッシュの利用
@KATO-Hiro KATO-Hiro changed the title Supabase: データ使用量の確認 + 必要に応じて有料プランへのアップグレード Supabase: データ使用量の確認 + 必要に応じて有料プランへのアップグレードしましょう Sep 24, 2024
@KATO-Hiro
Copy link
Collaborator Author

SupabaseのEgress Bandwidth(外向き帯域幅)の利用量が無料枠を超過している場合、考えられる原因と対処方法は以下の通りです。

考えられる原因

  1. 大量のデータ転送:

    • クライアントとサーバー間で大量のデータが転送されている可能性があります。特に、画像や動画などの大きなファイルを頻繁にやり取りしている場合、帯域幅の使用量が増加します。
  2. 頻繁なAPIリクエスト:

    • クライアントからのAPIリクエストが頻繁に行われている場合、帯域幅の使用量が増加します。特に、データの取得や更新が頻繁に行われる場合は注意が必要です。
  3. キャッシュの欠如:

    • クライアント側でキャッシュが適切に設定されていない場合、同じデータが何度もサーバーから取得されることになり、帯域幅の使用量が増加します。
  4. 大規模なデータセットの取得:

    • 一度に大規模なデータセットを取得している場合、帯域幅の使用量が増加します。特に、フィルタリングやページネーションが適切に行われていない場合は注意が必要です。

対処方法

  1. データ転送の最適化:

    • 画像や動画などの大きなファイルは、圧縮して転送するか、CDN(Content Delivery Network)を利用して配信することで、帯域幅の使用量を削減できます。
  2. APIリクエストの最適化:

    • クライアントからのAPIリクエストを最適化し、必要なデータのみを取得するようにします。例えば、フィルタリングやページネーションを使用して、一度に取得するデータ量を減らします。
  3. キャッシュの利用:

    • クライアント側でキャッシュを適切に設定し、同じデータを何度もサーバーから取得しないようにします。HTTPキャッシュヘッダーを使用して、キャッシュの有効期限を設定します。
  4. データ取得の最適化:

    • 一度に大規模なデータセットを取得するのではなく、必要なデータのみを取得するようにします。例えば、クエリパラメータを使用して、必要なフィールドのみを取得するようにします。

具体的な対策例

以下に、Supabaseを使用した具体的な対策例を示します。

画像の圧縮とCDNの利用

// 画像を圧縮してアップロードする例
const compressImage = async (file) => {
  const options = {
    maxSizeMB: 1,
    maxWidthOrHeight: 1920,
    useWebWorker: true,
  };
  try {
    const compressedFile = await imageCompression(file, options);
    return compressedFile;
  } catch (error) {
    console.error(error);
  }
};

// 圧縮した画像をSupabaseにアップロード
const uploadImage = async (file) => {
  const compressedFile = await compressImage(file);
  const { data, error } = await supabase.storage
    .from('your-bucket')
    .upload('path/to/image.jpg', compressedFile);
  if (error) {
    console.error(error);
  } else {
    console.log('Image uploaded successfully:', data);
  }
};

APIリクエストの最適化

// ページネーションを使用してデータを取得する例
const fetchData = async (page, limit) => {
  const { data, error } = await supabase
    .from('your-table')
    .select('*')
    .range((page - 1) * limit, page * limit - 1);
  if (error) {
    console.error(error);
  } else {
    console.log('Data fetched successfully:', data);
  }
};

キャッシュの利用

// HTTPキャッシュヘッダーを設定する例
const fetchWithCache = async (url) => {
  const response = await fetch(url, {
    headers: {
      'Cache-Control': 'max-age=3600', // 1時間のキャッシュ
    },
  });
  const data = await response.json();
  return data;
};

まとめ

  • 大量のデータ転送や頻繁なAPIリクエストが原因で帯域幅の使用量が増加することがあります。
  • データ転送の最適化、APIリクエストの最適化、キャッシュの利用、データ取得の最適化などの対策を講じることで、帯域幅の使用量を削減できます。
  • 具体的な対策例を参考にして、Supabaseの利用量を最適化してください。

これらの対策を実施することで、SupabaseのEgress Bandwidthの使用量を抑えることができます。

@KATO-Hiro
Copy link
Collaborator Author

SupabaseのEgress Bandwidthの使用量を削減するためには、キャッシュを適切に設定することが重要です。キャッシュを設定することで、同じデータを何度もサーバーから取得する必要がなくなり、帯域幅の使用量を削減できます。

以下に、キャッシュの設定方法をいくつか紹介します。

1. HTTPキャッシュヘッダーの設定

HTTPキャッシュヘッダーを使用して、ブラウザやCDNにキャッシュを指示することができます。以下は、HTTPキャッシュヘッダーを設定する例です。

クライアントサイドでのキャッシュ設定

const fetchWithCache = async (url) => {
  const response = await fetch(url, {
    headers: {
      'Cache-Control': 'max-age=3600', // 1時間のキャッシュ
    },
  });
  const data = await response.json();
  return data;
};

// 使用例
const data = await fetchWithCache('https://your-supabase-url/rest/v1/your-table');
console.log(data);

2. Supabase Edge Functionsを使用したキャッシュ設定

Supabase Edge Functionsを使用して、キャッシュヘッダーを設定することもできます。以下は、Supabase Edge Functionsでキャッシュヘッダーを設定する例です。

Edge Functionの作成

// supabase/functions/cache.js

export default async (req, res) => {
  const { data, error } = await supabase
    .from('your-table')
    .select('*');

  if (error) {
    return res.status(500).json({ error: error.message });
  }

  res.setHeader('Cache-Control', 'max-age=3600'); // 1時間のキャッシュ
  return res.status(200).json(data);
};

3. CDNの利用

CDN(Content Delivery Network)を使用して、静的ファイルやAPIレスポンスをキャッシュすることも効果的です。Supabaseのストレージを使用している場合、CDNを設定することで、帯域幅の使用量を削減できます。

SupabaseストレージでのCDN設定

Supabaseのストレージバケットに対してCDNを設定する方法は、Supabaseのドキュメントを参照してください。以下は、一般的な手順です。

  1. Supabaseダッシュボードにログイン:

    • Supabaseのダッシュボードにログインします。
  2. ストレージバケットの設定:

    • ストレージバケットを選択し、CDN設定を有効にします。
  3. CDNの設定:

    • CDNプロバイダー(例:Cloudflare)を設定し、キャッシュポリシーを設定します。

4. クエリの最適化

クエリを最適化することで、必要なデータのみを取得し、帯域幅の使用量を削減できます。以下は、クエリの最適化の例です。

ページネーションの使用

const fetchData = async (page, limit) => {
  const { data, error } = await supabase
    .from('your-table')
    .select('*')
    .range((page - 1) * limit, page * limit - 1);

  if (error) {
    console.error(error);
  } else {
    console.log('Data fetched successfully:', data);
  }
};

// 使用例
const data = await fetchData(1, 10); // 1ページ目、10件取得
console.log(data);

まとめ

  • HTTPキャッシュヘッダーを使用して、ブラウザやCDNにキャッシュを指示します。
  • Supabase Edge Functionsを使用して、キャッシュヘッダーを設定します。
  • CDNを利用して、静的ファイルやAPIレスポンスをキャッシュします。
  • クエリの最適化を行い、必要なデータのみを取得します。

これらの方法を組み合わせることで、SupabaseのEgress Bandwidthの使用量を効果的に削減できます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant