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
システムリプレースの中でCDCを取り入れている話/chugokudb32-cdc
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Takahashi Ikki
October 06, 2023
Programming
630
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
システムリプレースの中でCDCを取り入れている話/chugokudb32-cdc
第32回 中国地方DB勉強会 において、発表させてもらいました。
Change Data Capture についての紹介です。
Takahashi Ikki
October 06, 2023
More Decks by Takahashi Ikki
See All by Takahashi Ikki
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
790
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osk2025-duckdb
takahashiikki
2
1.1k
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
1.6k
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
1k
ビジネスを止めずにシステムリプレースを進める為のCDCという選択肢/osc24ng-2-b
takahashiikki
0
150
アプリケーションエンジニアから見たPostgreSQL16 の新機能/postgresql16-new-information
takahashiikki
0
470
DBリファクタリングのデータリモデリング勘所/stafesstudy-db-modling
takahashiikki
5
2.2k
アプリケーションエンジニアから見たPostgreSQL15 の新機能/postgresql15-new-information
takahashiikki
7
3.2k
HowDoYouLikePostgreSQl12/Chugokudb28-1
takahashiikki
1
1.3k
Other Decks in Programming
See All in Programming
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
390
FreeBSDでZabbixを動かす.pdf
kenkino
0
270
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
200
Building an Out-of-Order CPU
latte72
1
780
App Intentsのビルドプロセスを支える技術
kntkymt
0
370
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
210
AHC070解法紹介
eijirou
0
120
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
310
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
460
GitHub's CSS Performance
jonrohan
1033
470k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
The Cult of Friendly URLs
andyhume
79
7k
Test your architecture with Archunit
thirion
2
2.4k
Product Roadmaps are Hard
iamctodd
55
13k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
The SEO identity crisis: Don't let AI make you average
varn
0
560
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
800
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Transcript
γεςϜϦϓϨʔεͷதͰ CDCΛऔΓೖΕͯΔ 2023-10-07 தࠃํDBษڧձ ຊPostgreSQLϢʔβʔձ ߴڮ Ұٍ
ࣗݾհ • ߴڮ Ұٍ (@ikkitang) • ελʔϑΣεςΟόϧגࣜձࣾ Tech Product Manager
• TypeScriptͱGo • ຊPostgreSQLϢʔβʔձ தࠃࢧ෦
͓͠ͳ͕͖ • CDC࠾༻ͷഎܠ • CDCͱʁ • Debeziumͷಛ
ҙࣄ߲ • εϥΠυެ։ࡁΈͰ͢ • ࣭ͱ͔͋Ε #ChugokuDB Λ͝׆༻͍ͩ͘͞ʂ • ͷ࣠ͱͯ͠"γεςϜϦϓϨʔε"͕ग़ͯ͘ΔͷͰ ՝ײͷڞײͷҙਤΛࠐΊͯ
ॴଐͷձࣾͷΛଟ͘͠·͕͢࠾༻త͡Όͳ͍Ͱ͢ • ※ CDC࠾༻ͷഎܠ͕݁ߏϘϦϡʔϜΛ͠Ίͯ͠·͍·ͨ͠
CDC࠾༻ͷഎܠ
CDC࠾༻ͷഎܠ ελʔϑΣεςΟόϧגࣜձࣾ • 20097݄7ۀʢ15ظʣ • BtoB(C) ͚ͷϏδωεϞσϧΛల։ • ҿ৯ళ༷ͷECࢀೖɾӡ༻Λτʔλϧࢧ ԉ
• ECαΠτ্Ͱจɾܾࡁड • ͷडऔ • ͷ͓ಧ͚
CDC࠾༻ͷഎܠ ελʔϑΣεςΟόϧגࣜձࣾͷϓϩμΫτͷ՝ײ • 3छྨͷΞΫλʔ • ύʔτφʔ, ૹύʔτφʔ, ٤৯ऀ༷ • 15ظͷϏδωεΛࢧ͑ͨෳࡶͳۀϑϩʔʢిʣ
• ͦΕΒΛશ෦ࢧ͑Δ "தԝूݖͷΞϓϦέʔγϣϯ" • ʮγεςϜͷ߹Ͱ...͝ڠྗΛ͓ئ͍͍ͨ͠·͢ʯ
CDC࠾༻ͷഎܠ γεςϜϦϓϨʔεΛΔ • γεςϜϦϑΝΫλϦϯάͰͳͯ͘ɺϦϓϨʔε. • ϦϑΝΫλϦϯά֎෦తͳৼΔ͍Λม͑ͳ͍ࣄ͕ఆٛ • ৼΔ͍ม͑ͳ͍ͱɺ՝ղܾʹͳΒͳ͍ͷͰม͍͑ͯ͘ • ٕज़తʹ͖Ε͍ʹͳ͚ͬͨͩͷچγεςϜͭ͘Βͳ͍
CDC࠾༻ͷഎܠ ϦϞσϦϯάΛΔ • ϢʔβʔͷߦಈಈػΛੳͯ͠ ײతͳυϝΠϯʢ༻ޠɾUIʣͱͯ͠࠶ఆٛ͢Δ • ϦϞσϦϯάͨ͠ϞσϧΛѻ͏৽γεςϜΛఏڙ͢Δ
CDC࠾༻ͷഎܠ Ϟσϧ͕ίϯςΩετΛ·͙ͨ • ҰํͰɺҰਓͷΞΫλʔ͔ΒݟͨײతͳυϝΠϯɺผͷΞΫλʔ͔ΒݟΔͱײత͡Ό ͳ͍ࣄ͕͋Δ • ʮΞΫλʔ͕มΘΔͱؔ৺͕มΘΔʯΛແࢹͯ͠৽γεςϜͰѻ͍ͬͯ͘ͱ·ͨಉ͡ ͕ൃੜ͢Δ • ͏·͘ίϯςΩετΛ·͍ͨͰ͍͘Έ͕ඞཁ
=> ΠϕϯτۦಈܕΞʔΩςΫνϟΛ࠾༻ • ྫɿ ύʔτφʔ͕"Λొ"ͨ࣌͠ɺͦͷαϙʔτνʔϜͷ "৹ࠪͪ"ϦετʹฒͿ
CDC࠾༻ͷഎܠ·Ͱ͏গ͠Ͱ͢
CDC࠾༻ͷഎܠ ΠϕϯτۦಈܕΞʔΩςΫνϟ • ΞϓϦέʔγϣϯΛߏ͢Δίϯϙʔωϯτ͕Πϕϯτʹج͍ͮͯಈ࡞͢Δઃܭύλʔϯ • ಛఆͷΠϕϯτ͕ൃੜͨ࣌͠ʹదʹΞΫγϣϯΛى͜͢ࣄΛత • × Λొͯ͠ʂ •
̋ ͕ొ͞Ε·ͨ͠ʂ • εέʔϥϏϦςΟ, ॊೈੑ͕ߴ·Δ • Apache Kafka ͱ͍͏ϛυϧΣΞͷγΣΞ͕ଟ͍
CDC࠾༻ͷഎܠ Apache Ka)aΛ༻͍ͨ ΠϕϯτۦಈܕΞʔΩςΫ νϟ • ύʔτφʔ༻ͷΞϓϦέʔγϣϯ • SoEʢྑ͍UXΛఏڙ͍ͨ͠!ʣ •
͚ࣾཧը໘ͷΞϓϦέʔγϣϯ • SoRʢ͍ͭ୭͕ͲΜͳࢦࣔͷجͰ࣮ߦ͔ͨ͠. ཤྺʹ ॏ͖Λஔ͘ʣ • ΞΫλʔΞϓϦέʔγϣϯͷੑ࣭ͷҧ͍Λka-aΛ ഊࢭͱͯ͠औΓೖΕΔࣄͰંΓ߹͍͚ͭͯΔ
ҰํͰ..!
ແࢹͰ͖ͳ͍چγεςϜ • ݱঢ়Ϗδωεಈ͍͍ͯͯͯɺಉ࣌ӡ༻ආ͚ΒΕͳ͍ • ઌఔઃܭͨ͠ka$aͷϝοηʔδͷૹ৴ΛچγεςϜʹରͯ͠ खΛೖΕΔࣄ͍͠ • ͳΜͱ͔ɺچγεςϜͱ͏·͘࿈ܞΛऔΔࣄ͕ग़དྷͳ͍͔ʁ
CDCΛ࠾༻͢Δͧʂʂ
CDC ͱ
CDCͱ • Change Data Capture • σʔλϕʔεͷมߋʢInsert,Update,DeleteʣΠϕϯτΛݕ͠ ผͷΞϓϦέʔγϣϯʹୡ͢ΔͨΊͷٕज़ख๏ • ࠾༻ࣄྫ
• ৯ϩά͞Μɿ Elas5cSearch IndexͷϦΞϧλΠϜߋ৽ • Chatwork͞Μɿ CQRSϞσϧͷߋ৽(ಡΈࠐΈϞσϧͷߋ৽) • ΦϛΧϨ͞Μɿ σʔλϕʔεϦϑΝΫλϦϯά • Debezium ౕ͕ͬͯྑ͍Β͍͠
Debeziumͷಛ
Debezium ͷಛ • Apache Ka*a Connect ʹ४ڌͯ͠࡞ΒΕͨ CDCͷπʔϧηοτ • Debeziumࣗମ
DBͷมߋΠϕϯτΛKa*aͷϝοηʔδͱͯ͠ ൃՐ͢Δ • DB͝ͱʹConnectorΛͬͯมߋΠϕϯτͷݕΛ࣮ݱ͢Δ • MySQL, PostgreSQL, SQL Server, Oracle, MongoDB, Cloud Spanner, ...
༻ྫ ͜ΜͳJSONΛ࡞Δ. { "name": "connector໊", "config": { "connector.class": "io.debezium.connector.mysql.MySqlConnector", "ུ":
"ུ", "database.hostname": "{mysql}", "database.port": "{port}", "database.user": "{user}", "database.password": "{password}", "database.include.list": "{schema}", "table.include.list": "{schema.table1,...}", "snapshot.mode": "initial" } } ͜Μͳσʔλ͕ಘΒΕΔ // Insert { "before": null, "after": { "id": 1, "name": "init name" } } // Update { "before": { "id": 1, "name": "before name" }, "after": { "id": 1, "name": "after name" } } // Delete { "before": { "id": 1, "name": "after name" }, "after": null }
ӡ༻ʹ͓͍ͯؾΛ͚ͭΔࣄ Debezium • ConnectorͰಡΈࠐΉςʔϒϧΛՃ͢Δ࣌ ৬ਓ͕ܳඞཁ ʢΫισΧίωΫλʔ໊Λ͚ͭͳ͍ʂ 1ഊʣ MySQL • ίωΫλఆٛ࣌ͷσϑΥϧτͷڍಈͱͯ͠
ςʔϒϧͷશϨίʔυΛಡΈऔΔʢεφοϓγϣοτʣ • ಡऔதʹಉ͡Ϩίʔυ͕ಡΊΔΑ͏ʹϩοΫऔΔ ʢάϩʔόϧϦʔυϩοΫ or ςʔϒϧϩοΫʣ • ΊͪΌͪ͘ΌͰ͔͍ςʔϒϧΛಡΉ͍࣌ʢ͍ 1ഊʣ PostgreSQL • ಡऔઐ༻γϦΞϥΠβϒϧϨϕϧͷ τϥϯβΫγϣϯΛషΔ • ϩοΫແ͍
ӡ༻ʹ͓͍ͯؾΛ͚ͭΔࣄͷվળྫ • DebeziumͷϩοΫΛؾʹ͢Δ߹ɺ CDCઐ༻ͷReadReplicaΛཱͯΔ • Debeziumࣗମʹࢮ׆ࢹΛೖΕ͓ͯ͘ͷ͕ྑ͍ • αʔόʔ֤λεΫͷੜ͖ࢮʹ • ʮࡴ͞Ε·ͨ͠ɻࣗಈͰىಈग़དྷͳ͍ͷͰखಈͰىͯ͜͠ʯ
ͬͯϩάʹग़ΔͷͰͦΕͷࢹ • ↑ ։ൃɾݕূڥͳͲͷ DBΛࢭΊΔڥͰൃੜ͢Δ • Subscrip6on Filter Ͱݕͯ͠ LambdaͰ Restart API Λࣗಈ࣮ߦ͢Δ
(10ϲ݄)ӡ༻ͯ͠ΈͯಘΒΕͨݟɾײ • ΊͪΌͪ͘Ό͍ • APIʹϦΫΤετ͛ͯ Ϧϩʔυͨ͠Βө͞ΕͯΔ • RESTͰͷઃఆָ͕ • IaaC
• ެࣜυΩϡϝϯτͷཏੑ • ϋϚͬͯɺجຊެࣜDoc͕Ҿ༻ ͞ΕͯΔ • ϑϧϚωʔδυ͡Όͳ͍ • MSKͰka'a-connectαϙʔτͯ͠ Δ͚Ͳɺӡ༻ʹͷͤΔͷ͕ϦεΫ • ઃఆϛεͬͯΔͱͣͬͱϦτϥΠ ʢREST͑ͳ͍ʣ • ϩʔΧϧڥ • DBͱͷଓ͕Ұఆࢭ·Δ࣌ʹ૬ ੑѱΊ
Ҏ্Ͱ͢ʂ