ハッシュテーブルの負荷率計算
ハッシュテーブルの負荷率は、保存済み要素数を割り当て済みバケット数で割った値です。この計算ツールは負荷率を求め、ご指定のしきい値と比較して、リサイズが望ましいかを判定します。さらに、現在の要素数をしきい値より厳密に小さい状態にするための最小バケット数も算出します。実装のレビュー、容量計画、観測したテーブル状態の確認、またはリサイズ方針を再現可能な自動テストにする際にご利用いただけます。
無料で実行
一貫した件数から負荷率を計算します
現在保存されている要素数と、割り当て済みのバケット数をご入力ください。このツールは要素数をバケット数で割るため、800 個のバケットに 600 個の要素がある場合、負荷率は 0.75、すなわち 75% です。使用中のバケット数ではなく、論理的なエントリー数を数えてください。衝突した2つのエントリーが同じバケットを共有していても、要素数は2です。また、要素が入っているバケット数ではなく、テーブルに実際に割り当てられたバケット容量をご使用ください。負荷率が示すのは空でないバケットの割合ではなく、1バケット当たりの平均エントリー数であるため、定義の統一が重要です。要素数はゼロでも構いませんが、ゼロ除算ではテーブル状態を表せないため、バケット数は正の整数でなければなりません。独立したテーブル、シャード、パーティションは別々に計算してください。合算すると、全体の比率が妥当に見えても、空き容量の多い領域の陰に高負荷の領域が隠れる可能性があります。返される小数値と百分率は、コードと報告書向けに同じ比率を異なる形式で示したものです。
リサイズのしきい値を選び、結果を判断します
しきい値は、運用方針上リサイズを開始する負荷率です。既定値は 0.75 ですが、テーブル設計に合う有限の正数をご指定いただけます。オープンアドレス法では各要素が1つのスロットを占有し、空きが減るにつれて探索列が長くなるため、通常は 1 未満のしきい値が必要です。分離連鎖法では複数の要素が同じバケットを共有できるため 1 を超えて運用できますが、比率が上がれば衝突のコストも増える傾向があります。このツールは衝突処理方式を仮定せず、ご指定の値をそのまま適用します。境界は含まれるため、丸め前の負荷率がしきい値以上ならリサイズを推奨します。比較には完全な計算値を用い、表示する負荷率だけを安定した出力のために丸めます。この区別により、境界付近で表示上の丸めが判定を変えることはありません。結果は明示された方針の評価としてお使いください。あらゆる処理量、ハッシュ関数、メモリ予算、遅延目標に対して同じしきい値が最適であることを証明するものではありません。
計算結果を容量変更の判断に結び付けます
リサイズが推奨される場合、現在の要素数を指定したしきい値より厳密に小さくするための、数学上最小のバケット数を返します。要素数をしきい値で割った値を切り捨て、1を加えて算出します。現在の割り当てに対して追加が必要なバケット数も表示します。これは方針を満たす最小値であり、実装が実際に割り当てるべき容量と常に一致するわけではありません。多くのハッシュテーブルは容量を倍にするなど等比的に拡張します。また、2の累乗、素数、固定アロケーターが扱える容量だけを許す実装もあります。最小値を実装で利用可能な次の容量まで切り上げ、すぐに再びしきい値へ達しないよう、近い将来の挿入もご考慮ください。リサイズ不要の場合、算出された最小値が現容量より小さくても、追加数はゼロです。自動化ではリサイズ判定の真偽値を安定した分岐条件とし、件数、しきい値、負荷率をログへ保存してください。決定的な API 計算は1回 $0.002 で、ブラウザー版と同じ処理を使用します。
活用例
ハッシュテーブル実装をレビューする
テーブルのスナップショットを文書化された拡張しきい値と照合し、境界での正確な動作をご確認いただけます。
容量増加を計画する
現在の要素に必要な最小バケット数を求め、実装が対応する割り当てサイズへ切り上げる際の基準にできます。
監視ルールを自動化する
要素数とバケット数のメトリクスを、ダッシュボード、テスト、運用アラート向けの決定的な判定へ変換します。
よくある質問
ハッシュテーブルの負荷率はどのように計算しますか?
保存済み要素数を割り当て済みバケット数で割ります。百分率で表す場合は、結果に100を掛けます。
負荷率がしきい値と同じ場合もリサイズが必要ですか?
はい。丸め前の負荷率が指定したしきい値以上であれば、リサイズを推奨します。
負荷率が1を超えることはありますか?
はい。分離連鎖法では複数の要素が1つのバケットを共有できます。オープンアドレス法にはスロット数を超える要素を保存できない方式もあります。
推奨バケット数が必ずしも2の累乗ではないのはなぜですか?
しきい値を厳密に下回る数学上の最小値だからです。実装が対応する容量まで切り上げてください。
要素数をゼロにできますか?
はい。空のテーブルの負荷率はゼロです。ただし、バケット数はゼロより大きい必要があります。
API での計算料金はいくらですか?
API の料金は1回 $0.002 です。同じ決定的な計算をブラウザーでもすぐにお試しいただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/hash-load-factor \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"item_count":600,"bucket_count":800}'const res = await fetch("https://api.kit.forhosting.com/dev/hash-load-factor", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"item_count": 600,
"bucket_count": 800
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hash-load-factor",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"item_count": 600,
"bucket_count": 800
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hash-load-factor", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"item_count":600,"bucket_count":800}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"item_count":600,"bucket_count":800}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hash-load-factor", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"item_count": 600,
"bucket_count": 800
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hash_load_factor",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |