Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大量物件データの差分反映をどう実現しているか
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Red Frasco
September 09, 2022
Technology
1
240
大量物件データの差分反映をどう実現しているか
2022.09.07「エンジニアが不動産業界の裏側について語る会」のLT資料です。
▼エンジニアが不動産業界の裏側について語る会
https://connpass.com/event/257082/
Red Frasco
September 09, 2022
Tweet
Share
More Decks by Red Frasco
See All by Red Frasco
これってSRE?いい部屋ネットを1,760%成長させた開発とインフラのコラボレーション
red_frasco
0
130
レガシーで硬直したテーブル設計から変更容易で柔軟なテーブル設計にする
red_frasco
9
1.9k
5年間のDB技術選定・運用を振り返る Aurora MySQL, RDS MySQL, RDS PostgreSQL が混在した理由と今後の展望
red_frasco
0
110
ゼロから構築!6年間で1,760%成長した「いい部屋ネット」を支えるデータ分析基盤
red_frasco
0
130
“後発優位”で挑んだ 「いい部屋ネット」再構築: 4年間のAWS移行で実現した成果とその舞台裏
red_frasco
0
3.1k
Datadog Synthetics 活用事例紹介
red_frasco
0
690
バッチ処理が終わらない!? -処理時間を90%削減した話-
red_frasco
1
410
不動産情報サイトにおけるデータ収集で頑張ったこと
red_frasco
0
360
コストに関するヒヤリハットのお話 ~コスト超過で手遅れにならないためにすべきこと~
red_frasco
0
540
Other Decks in Technology
See All in Technology
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
510
越境する組織づくり ─ 多様性を前提にしたチームビルディングとリードの実践知
kido_engineer
2
190
アーキテクチャモダナイゼーションを実現する組織
satohjohn
0
460
DevOpsエージェントで実現する!! AWS Well-Architected(W-A) を実現するシステム設計 / 20260307 Masaki Okuda
shift_evolve
PRO
3
650
Go標準パッケージのI/O処理をながめる
matumoto
0
160
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
560
タスク管理も1on1も、もう「管理」じゃない ― KiroとBedrock AgentCoreで変わった"判断の仕事"
yusukeshimizu
5
2.6k
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
560
OCHaCafe S11 #2 コンテナ時代の次の一手:Wasm 最前線
oracle4engineer
PRO
1
120
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
570
ナレッジワークのご紹介(第88回情報処理学会 )
kworkdev
PRO
0
190
複数クラスタ運用と検索の高度化:ビズリーチにおけるElastic活用事例 / ElasticON Tokyo2026
visional_engineering_and_design
0
130
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
190
We Have a Design System, Now What?
morganepeng
55
8k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Exploring anti-patterns in Rails
aemeredith
2
290
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
390
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Documentation Writing (for coders)
carmenintech
77
5.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
170
Raft: Consensus for Rubyists
vanstee
141
7.4k
Designing for humans not robots
tammielis
254
26k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
230
Transcript
大量物件データ 差分反映をどう 実現しているか 株式会社Red Frasco 照屋
物件管理システム ポータルサイトDB コンバーター 物件データ ここの話! なんの話? 物件画像 物件情報入力 ポータルサイトDB 物件データ変換
追加・更新・削除
どんな課題があったか システム構成 データ変換の実態 運用(おまけ) 目次
どんな課題があったか
1日2回、30万件のデータを 30分以内に処理する プロジェクト開始時の目標 物件は増える🦆 回数も増える🦆
分散処理と差分反映 工夫しているポイント
システム構成
他社物件管理システム S3 ダッシュボード(Redash) Slack BigQuery FTP Datadog TransferFamily DB 分散ポイント!
ポータルサイト コンバーターシステム(AWS) Step Functions 4.データ登録(Lambda) 3.データ変換(ECS) 5.結果通知(Lambda) 1.物件データ(CSV)のスキャン(Lambda) 2.排他処理(Lambda) Event Bridge システム構成 分散ポイント! 分散ポイント! 分散ポイント!
分散ポイント S3 システム単位でディレクトリを分割 店舗単位でディレクトリを分割 日付単位でディレクトリを分割 Step Functions システムごとにStep Functions自体も複数用意 データ変換
Step Functionsの並列実行でコンテナを40個同時起動 データ登録 Step Functionsの並列実行でLambdaを40個同時起動
データ変換の実態
Lambda 1.ファイルスキャン S3(内部用) ①スキャン ③ステータス保存 ②ファイル移動 連動元からアクセス可能 内部からのみアクセス可能 排他制御 べき等性
スキャンしたファイル をDBへ記録し、重複実 行されないよう制御した り実行状況を管理 こんば S3(外部用) 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録 DB /システムA /店舗A/yyyymmdd/*.csv /店舗B/yyyymmdd/*.csv /店舗C/yyyymmdd/*.csv /店舗D/yyyymmdd/*.csv ・ ・ ・ ・ /Work /システムA /店舗A/yyyymmdd/*.csv /店舗B/yyyymmdd/*.csv /店舗C/yyyymmdd/*.csv /店舗D/yyyymmdd/*.csv ・ ・ ・ ・
こんば 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録 2.データ変換
データ変換でしたいこと S3に配置されたファイルを読み解く 異常データの検知 差分反映(パフォーマンス向上) データ登録用のSTOREファイルとDELETEファイルを生成 新規物件と更新物件のみの 一覧をファイル出力 STOREファイル 削除物件の 一覧をファイル出力 DELETEファイル
ECS S3(内部用) コンテナの内部(Python) こんば 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談
4.結果通知 3.データ登録 並列実行 差分確認 トランザクション 40並列実行 2.データ変換 /Work /システムA /店舗A/yyyymmdd/*.csv /店舗B/yyyymmdd/*.csv /店舗C/yyyymmdd/*.csv ・ ・ ・ (スキャンした物件CSVファイル) 内部からのみアクセス可能 作業テーブル初期化 物件データダウンロード NGデータチェック データ変換 差分反映 ポータル登録用Tsvファイル作成 物件テーブルの更新 1. 2. 3. 4. 5. 6. 7. 取得 配置 RDS Proxy DB 物件テーブルと 作業テーブルにわけている
更新料が1円?! 交通情報がない?! 3階の建物なのに 部屋は5階?! 沿線情報はあるけど、距離 や徒歩時間情報がない?! 居住中なのに 即時入居可?! 住所が古い?! こんば
1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録 2-1.NGデータチェック
物件名や部屋番号などの少ない情報 を保持したテーブルを検索 まずは新規か既存かチェックする 物件名+部屋番号+賃料+敷金/礼金 +住所情報+沿線情報+構造+画像情報 +設備+建物情報+駐車場+フリーレン ト+入居可能日...etc あらゆる項目を文字列で結合 ハッシュ化 e56d5123807bdf4d166...(略)
既存なら更新か否かをチェックする テーブル2 テーブル1 2-2.差分反映 こんば 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録
例えば 入居可能日が2022/09/08の場合 ▼9/7に変換を実施 →まだ未来日なので「2022/09/08」と出力 ▼9/8以降に変換を実施 →入居可能なので「即時」のように出力 こんば 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック
2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録 なぜ変換後に差分チェックをするのか 変換前は同じでも変換後に変わることがある 2-2.差分反映
全物件 掲載中物件 物件テーブル 作業テーブル 変換開始時 最後に戻す 2-3.物件テーブル更新 こんば 1.ファイルスキャン 2.データ変換
2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 掲載中物件のみを扱うことで パフォーマンスを保つ 4.結果通知 3.データ登録
こんば ある程度実装した後の出来事 おや、、データ変換だけで数時間かかりそうだぞ。。 for文多いのか?並列処理必要か? プログラム各所で実行時間を計測してデバッグ ループ内でクラス生成しまくっている凡ミス 修正することで大幅に改善 結果、ストイックにしなくても変換は数分だった 2-4.データ変換の余談 1.ファイルスキャン
2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録
Lambda ポータルサイトDB S3(内部用) 差分反映で出たSTOREファイル 差分反映で出たDELETEファイル /TSV /システムA /店舗A/yyyymmdd/*_store.tsv /店舗B/yyyymmdd/*_store.tsv /店舗C/yyyymmdd/*_store.tsv
・ ・ /TSV /システムA /店舗A/yyyymmdd/*_delete.tsv /店舗B/yyyymmdd/*_delete.tsv /店舗C/yyyymmdd/*_delete.tsv ・ ・ 内部からのみアクセス可能 追加 更新 削除 参照 TSVファイルを読み取り BULK_INSERT BULK_UPDATE BULK_DELETE 実行 こんば 3.データ登録 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 4.結果通知 3.データ登録 並列実行 一括処理 40並列実行
Step Functions 4.データ登録(Lambda) 3.データ変換(ECS) 5.結果通知(Lambda) 1.物件データ(CSV)のスキャン 2.排他処理(Lambda) 実行対象件数 実行対象件数と 処理完了件数を
比較して Slackに通知 Slack 通知例 4.結果通知 こんば 1.ファイルスキャン 2.データ変換 2-1.NGデータチェック 2-2.差分反映 2-3.物件テーブル更新 2-4.データ変換の余談 [成功] 結果: 240/240 Aシステムが正常終了しました。 [失敗] 結果: 239/240 失敗店舗: B店舗 Aシステムが異常終了しました。 4.結果通知 3.データ登録 処理完了件数
運用(おまけ)
運用 - エラーログ Datadog Step Functions実行時に出力したログを連携 検索やフィルターなどエラーログの調査が容易 Slackへ通知
運用 - 物件調査 Big Query 連携直後の物件CSVを全て保持 変換後の登録用TSVを全て保持 過去にどんな物件があったかをSQLで検索 変換結果の履歴もSQLで検索
運用 - フィードバック ダッシュボード (Redash) 警告やエラー内容をダッシュボードに反映 物件の入稿担当の方へのフィードバックの仕組み
不動産のシステムを 1年やって思ったこと
fin