Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
大量データをRedisに入れる際の 容量問題にどう対処したか
Search
Templiver
January 31, 2023
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大量データをRedisに入れる際の 容量問題にどう対処したか
Templiver
January 31, 2023
More Decks by Templiver
See All by Templiver
クリーンアーキテクチャの NodeJSによる実装例
terashin
0
1.5k
Other Decks in Programming
See All in Programming
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
AWSに止められる覚悟してますか?
morizo_1984
2
540
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
800
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
170
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
Workers Cache を知る
syumai
0
370
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
440
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
My Coaching Mixtape
mlcsv
0
360
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Thoughts on Productivity
jonyablonski
76
5.4k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Transcript
大量データをRedisに入れる際の 容量問題にどう対処したか
どういうことを話すか? • 背景 • Redisの容量問題にどう対処したか • Redisクラスターを使う注意点 • AWS Elasticacheの設定をどうするか
• パフォーマンスチューニング
背景 DPAフィードデータを入れる際に、 Redisの容量問題に遭遇した
DPAとは? ECサイトなどの閲覧履歴元に広告を配信する仕組み
DPAフィードデータとは? DPAフィードデータ Redis 閲覧履歴 配信システム zero
どうやってDPAフィードデータを入れている? ... ... ... RDS Elasticache 在庫あり 在庫なし 全部 保存
削除 保存 前日 今日 差分 差分 1. 差分の作成 2. 差分の取り込み
どんな問題が発生していた? cache.r6g.12xlarge Elasticache(Redis) 3億件 90% cache.r6g.16xlarge Elasticache(Redis) 3億件 最大 yahooなど
どう対応したか?
どんな解決策があった? Re Re Re Re Re Re Re Re Re
プロキシ ノードの対応関係を 定期的にロード Redisクラスター Proxy
なぜRedisクラスターへ移行することにしたの? コスト面、運用面でのコストが 最も低いため
AWSで使うには? Elasticache(Redis)で クラスターモードを有効にする
どういう設定にする? シャード数をどうするか? • 制限に気をつける ◦ 上限は、90 例: レプリカ2、プライマリ1構成であれば30ノード。 ◦ redis5.0.3以上の場合、500まで緩和可能
ノードタイプ をどうするか? • クラスターの各ノードタイプ は全て同じ コスト面から少しずつ増やしたいなら小さいものを選ぶ。
RedisとRedisクラスターの違いとは? • マルチ操作がスロット単位でしか行えない • リダイレクトが発生する • ライブラリがサポートしていない可能性
どんな対応をしたの? Re Redis Redisクラスター Re Re Re MSET SET リダイレクト
何か問題は発生した?
問題1: go-redisのSETパフォーマンス 4時間で40万件ほどしかデータが入らなかった 全データ(約3億件)入れるのに4ヶ月ほどかかりそう。。 40万件 4時間後 Redisクラスター Redisクラスター
問題1: go-redisのSETパフォーマンス 参考: https://blog.yuuk.io/entry/2020/goredis-performance-degradation 【原因】 古いgo-redisでRedis6にPipelineを使うと パースエラーのせいでCOMMANDコマンドの結果を キャッシュできない。 【対応】 go-redisのバージョンをv8以上にした。
問題1: go-redisのSETパフォーマンス 100倍高速になった これでも既存MGETの10倍遅い。 全データ入れるのに9日ほどかかる。。
問題1: go-redisのSETパフォーマンス シェルスクリプトで実行すると 高速化する話を聞き、書き直した
問題1: go-redisのSETパフォーマンス ... 各直列の10000 コマンド SET SET SET ... 1000件同時実行
Redis クラスター
問題2: 圧縮したバイト配列をそのまま流せない 圧縮したバイト配列をそれぞれファイルに入れて、 次のように実行する必要があった redis-cli -x set key <compressed.txt
問題2: 圧縮したバイト配列をそのまま流せない 500万レコード入れるのに、 500万ファイル作成するのは現実的ではなさそう。。
圧縮はせず、 JSONフィールド名の短縮を行なった 問題2: 圧縮したバイト配列をそのまま流せない
問題3: 260万件ほど書き込むとそれ以降進まなくなった Redis クラスター ... 大量のTIME_WAIT サーバー TIME_WAITコネクションが溜まりポートが枯渇してしまった
問題3: 260万件ほど書き込むとそれ以降進まなくなった TIME_WAITコネクションを再利用できるよう カーネルパラメータ を変更した net.ipv4.tcp_tw_reuse = 1 参考: https://blog.spacemarket.com/code/aws-batch-%E3%81%A7%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB-%E3%83%91
%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3 %82%B0/
問題3: 260万件ほど書き込むとそれ以降進まなくなった 1000万件入れるのにかかる時間が、 60分 -> 5分と12倍高速になった ※ redisのコマンド実行部分だけでの比較
問題4: 1コマンドごとの結果をファイルに書き出していたら遅い 【対応】 コマンドを実行する大元のスクリプトの実行結果を ファイルに書き出してエラーチェックするようにした 【結果】 1000万件処理する場合、 バッチの実行時間が43分 -> 39分になった。
問題5: 値をダブルクオートしていると遅い 【対応】 値を囲むのを、 ダブルクオートからシングルクオートに変更した。 【結果】 1000万件処理する場合、 バッチの実行時間が39分 -> 17分と半分以下になった。
問題6: Operation timed outが発生する 【対応】 Redisコマンドの同時実行数を1000 -> 500に変更。 【結果】 Operation
timed outは発生しなくなった。 時々発生する。
問題7: jedisのGETパフォーマンス 【200件取得のパフォーマンス比較】 既存のMGET: 5.157 ms RedisクラスターのGET: 24.835
ms 5倍ほど遅い。。
問題7: jedisのGETパフォーマンス Re Re Re GET リダイレクト Re Re Re
MGET jedis lettuce
問題7: jedisのGETパフォーマンス 【200件取得のパフォーマンス比較】 既存のMGET: 5.157 ms RedisクラスターのGET(lettuce): 5.386
ms RedisクラスターのGET(jedis): 24.835 ms 既存とほぼ同じくらいになった jedisと比較して5倍高速に。
結果 【バッチの実行時間】 1000万件入れるのに30分 ただし、キャッシュへの挿入のみ