Timestampの精度レベル
timestampの精度レベル(秒、ミリ秒、マイクロ秒、ナノ秒)を比較。用途に応じた精度の選び方と、各システムでの取り扱いを詳しく解説。
Concept
s / ms / μs / ns
詳細な説明
timestampは、整数秒からナノ秒まで、さまざまな精度レベルで時刻を表現できます。適切な精度の選択は、ユースケース、ストレージの制約、および使用する言語やシステムがネイティブにサポートするものによって決まります。
精度レベルの説明:
秒 (s): 1700000000 10桁
ミリ秒 (ms): 1700000000000 13桁
マイクロ秒 (μs): 1700000000000000 16桁
ナノ秒 (ns): 1700000000000000000 19桁
各レベルは前のレベルの1000倍の精度です。1秒 = 1,000ミリ秒 = 1,000,000マイクロ秒 = 1,000,000,000ナノ秒。
何がどの精度を使用するか:
| 精度 | システム |
|---|---|
| 秒 | Unix time_t, Python int(time.time()), cron |
| ミリ秒 | JavaScript, Java, MongoDB ObjectId |
| マイクロ秒 | PostgreSQL, Python datetime, UUID v7 |
| ナノ秒 | Go time.Time, Rust Instant, Linux clock_gettime |
ストレージに関する考慮事項:
秒ベースのtimestampは2038年まで32ビット整数に収まり、64ビット整数なら実質的に永久に対応します。ナノ秒timestampは現時点ですでに64ビットが必要です(32ビット整数では約4.3秒でオーバーフローします)。データベースに保存する際は、精度が高いほどストレージ要件が大きくなり、インデックス作成が遅くなる可能性があることを考慮してください。
変換式:
秒 = ミリ秒 / 1_000
ミリ秒 = マイクロ秒 / 1_000
マイクロ秒 = ナノ秒 / 1_000
// 例:ナノ秒から秒へ
1_700_000_000_000_000_000 ns ÷ 1_000_000_000 = 1_700_000_000 s
よくある落とし穴 — 暗黙の切り捨て: ナノ秒から秒への変換時、ほとんどの言語の整数除算は小数部を切り捨てます。サブ秒の精度を保持する必要がある場合は、余りを保持するか浮動小数点を使用してください(ただし、IEEE 754のdoubleは約15〜17桁の有効数字しかないため、ナノ秒timestampでは精度が失われる可能性があることに注意)。
適切な精度の選び方: スケジューリング、キャッシュ、サブ秒精度が不要なAPIには秒を使用。UIイベント、リクエストログ、データベースtimestampにはミリ秒を使用。分散トレーシング、パフォーマンスプロファイリング、科学データ収集にはマイクロ秒またはナノ秒を使用してください。
ユースケース
JaegerやZipkinなどの分散トレーシングシステムでは、複数のマイクロサービスをまたぐリクエスト内のスパンを正確に順序付けるために、マイクロ秒精度のtimestampが必要です。