---
title: Goで挑む大規模データ処理
tags: 
author: [mrasu](https://image.docswell.com/user/mrasu)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/87DXM9D5EG.jpg?width=480
description: Goで挑む大規模データ処理 by mrasu
published: October 31, 25
canonical: https://image.docswell.com/s/mrasu/K2Q6LR-2025-10-31-144748
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/87DXM9D5EG.jpg)

hatena.go #2
Goで挑む大規模データ処理
2025.10.31
ja.mackerel.io


# Page. 2

![Page Image](https://bcdn.docswell.com/page/VJPPRZXDJ8.jpg)

オブザーバビリティ
プラットフォーム
やってます
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/2EV2RWLGEQ.jpg)

名前は Mackerel
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/57GRMD3DEL.jpg)

出会った問題と対策、話します
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EQVR15XJP.jpg)

自己紹介
杉中 宏亮 （id:mrasu / @m_rasu）
● Mackerelのアプリケーションエンジニア
● Web ~ DevOps あたりが興味範囲
● 最近の興味は、Apache Paimon, Vortex
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/KJ4M8R92E1.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LE182QKK7G.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GEWZRMDPE2.jpg)

はじめに
※ 注意
今日話す内容は、話者が経験したことを基にしたものです。
各種資料は発表のために再現したものです。
極力再現していますが、実際とは違うデータです。
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/47Z1RQG6J3.jpg)

本日の主役 - APM
APMとは、レイテンシーやトレースなど見れるもの
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/YJ6LR6YLEV.jpg)

本日の主役 - APM
APMは、OpenTelemetryから来るトレースをAthenaで検索している
AWS
検索
S3
Athena
サーバー
簡略図
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GJ5186GM74.jpg)

オブザーバビリティプラットフォームのデータ量 (参考)
Pinterest (Goku): 毎日4.5兆のデータポイント
&gt; Goku was ingesting 4.5 trillion datapoints daily and serving 15K queries
per second with a p99 latency of 100 millisecond
Goku: A Schemaless Time Series Database for Large Scale Monitoring at Pinterest
AbemaTV: 165万スパン / 秒
&gt; ピーク時165万スパン/秒に立ち向かえ！オブザーバビリティコストを
効率化する ABEMA におけるトレースサンプリングの実践的事例
Observability Conference Tokyo 2025
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/9E21KMYRJR.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/D7YZNXG5JM.jpg)

問題
APMが正式リリース
トレースの保存期間が増加
(3日 -&gt; 14日)
表示できる期間が増えた
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/VEN3X1G4E8.jpg)

遅い
長期間を表示しようとすると、
ローディングが終わらないテナント(オーガニゼーション)を発見
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/Y79985W473.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/G7898YNVJD.jpg)

調査開始
Athenaのクエリが遅いと判明
「30秒近くかかってる」
確かに大規模で回すと何十分もかかることはある。
けど、そんな使い方はしていない。
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/L7LWR4PRER.jpg)

調査 - Explain
まずは、explain
Athenaには挙動がわかるものがいくつかある
● 「Execution details」ボタン
● Explain
● Explain Analyze
例:「Execution details」の結果
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4EM9RK4P7W.jpg)

調査 - Explain
1番好きなのは「explain analyze verbose」
「explain analyze」はクエリを実行して動作を教えてくれる
「verbose」をつけるとCPUなどの実行時間や回数がわかる
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/PERGRXWY79.jpg)

調査 - Explain Analyze Verbose
explain analyze verbose してみる
(注: ダミーデータです)
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/P7XXR6P47X.jpg)

調査 - Explain Analyze Verbose
explain analyze verbose してみる
24万！！！
(注: ダミーデータです)
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/37KWR1DP7D.jpg)

調査 - small ﬁles problem
24万ファイルスキャンしているのはおかしい
ファイルが多すぎる、いわゆる「small ﬁles problem」
S3でも503 (SlowDown: Please reduce your request rate) エ
ラーが発生
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/LJ318QR4E5.jpg)

「ファイル数減らすぞ！」
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/8JDXM9Y57G.jpg)

変更対象
遅いクエリを出している画面は2種類ある
● 統計画面
● トレース検索画面
それぞれ対応することに
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/VEPPRZ6DE8.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/27V2RW3G7Q.jpg)

統計画面
MackerelはDBやHTTPの統計を出せる
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/5JGRMDYD7L.jpg)

統計画面を高速化
DB画面ではSQLごとの合計時間やP95などを出している
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/47QVR1MXEP.jpg)

統計画面を高速化
期間を広げるとずっと出なかった
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/KE4M8RV271.jpg)

統計
「統計、毎回計算する必要ある？」
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/L7182Q3KJG.jpg)

事前集計
事前に計算しておけば、被っている部分の計算を省略できる
集計範囲
集計済み期間
事前集計部分からはみ出した期間
集計前の期間
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/G7WZRMPP72.jpg)

事前集計
合計値や平均は事前に計算しておくのは簡単
ただし、パーセンタイルを出すためにはソートがいる
そんな時に使えるのが、t-digest (パーセンタイルの近似値)
これらを事前に計算しておく
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4JZ1RQK6E3.jpg)

事前集計 - 定期実行
EventBridge を起点に、定期的に集計
集計
Athena
定期実行
EventBridge
保存
S3
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/YE6LR6QL7V.jpg)

事前集計 - 定期実行
Athenaの結果を取得する時は、iter.Seqを利用し、結果をs3に保存
(イメージ)
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/GE5186RMJ4.jpg)

事前集計 - できた
2週間を表示できるようになった
HTTP画面
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/9721KMDRER.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/DJYZNX25EM.jpg)

検索
Mackerelの
トレース
検索画面
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/V7N3X18478.jpg)

検索
実行時間分布
も出る
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/YJ9985K4J3.jpg)

検索
期間が長いと
ずっと
出なかった
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/GJ898YRVED.jpg)

検索 - 柔軟性が必要
トレースは色々な条件で検索したい
● 実行時間
● HTTPステータス
● SQL
● etc..
だから、事前に計算するのは難しい
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/LJLWR4KR7R.jpg)

検索 - 理由
遅い理由は「ファイル数が多かったから」と同じ (2x万ファイル)
データ量が同じでもファイル数が減れば速くなる
ダミーデータで計測したら
30秒 -&gt; 2秒
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/47M9RK2PJW.jpg)

検索
「ファイル、まとめよう」
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/P7RGRXMYJ9.jpg)

検索 - ファイル
ファイルはParquetフォーマットで保存している
Parquetは変更は苦手
Parquet
愚直にやると、メモリを大量に使う (CPUも使う)
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/PJXXR6V4JX.jpg)

検索 - ファイルをまとめる
けれど、ParquetはRowGroup単位で分けられている
→ RowGroupごとにまとめると省メモリ
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/3JKWR1QPJD.jpg)

検索 - ファイルをまとめる
まとめる処理は
● 定期処理
● 負荷が高い
-&gt; AWS Lambdaで実行
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/LE318QP475.jpg)

検索 - ファイルをまとめる
S3には「削除と同時に追加」という原子的な操作はできない
つまり、クエリ実行すると重複が起きる可能性がある
重複を起こさないために、複数テーブルにして合算
小さいファイル用のテーブル
(まとめる前)
まとめたファイル用のテーブル
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/8EDXM9L5JG.jpg)

検索 - 速くなった
2週間でも
でるようになった
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/V7PPRZ2D78.jpg)

目次
1. はじめに
2. 問題
3. 調査
4. 統計画面を高速化
5. 検索画面を高速化
6. 終わりに
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/2JV2RWDGJQ.jpg)

終わりに
これで、終わらないローディングが終わるようになった
色々対策考えたけれど、無難な方法に落とし込めてよかった
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/5EGRMDVDJL.jpg)

終わりに
以上。
ご清聴、ありがとうございました。
48


