Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大量物件データの差分反映をどう実現しているか

Red Frasco
September 09, 2022

 大量物件データの差分反映をどう実現しているか

2022.09.07「エンジニアが不動産業界の裏側について語る会」のLT資料です。

▼エンジニアが不動産業界の裏側について語る会
https://connpass.com/event/257082/

Red Frasco

September 09, 2022
Tweet

More Decks by Red Frasco

Other Decks in Technology

Transcript

  1. 大量物件データ
    差分反映をどう
    実現しているか


    株式会社Red Frasco 照屋

    View Slide

  2. 物件管理システム ポータルサイトDB
    コンバーター
    物件データ
    ここの話!
    なんの話?
    物件画像
    物件情報入力 ポータルサイトDB
    物件データ変換
    追加・更新・削除

    View Slide

  3. どんな課題があったか
    システム構成
    データ変換の実態
    運用(おまけ)
    目次

    View Slide



  4. どんな課題があったか

    View Slide

  5. 1日2回、30万件のデータを
    30分以内に処理する
    プロジェクト開始時の目標
    物件は増える🦆 回数も増える🦆

    View Slide

  6. 分散処理と差分反映
    工夫しているポイント

    View Slide



  7. システム構成

    View Slide

  8. 他社物件管理システム S3
    ダッシュボード(Redash)
    Slack BigQuery
    FTP




    Datadog
    TransferFamily
    DB
    分散ポイント!
    ポータルサイト
    コンバーターシステム(AWS)
    Step Functions
    4.データ登録(Lambda)
    3.データ変換(ECS)
    5.結果通知(Lambda)
    1.物件データ(CSV)のスキャン(Lambda)
    2.排他処理(Lambda)
    Event Bridge
    システム構成
    分散ポイント!
    分散ポイント!
    分散ポイント!

    View Slide

  9. 分散ポイント
    S3
    システム単位でディレクトリを分割
    店舗単位でディレクトリを分割
    日付単位でディレクトリを分割
    Step Functions
    システムごとにStep Functions自体も複数用意
    データ変換
    Step Functionsの並列実行でコンテナを40個同時起動
    データ登録
    Step Functionsの並列実行でLambdaを40個同時起動

    View Slide



  10. データ変換の実態

    View Slide

  11. 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
           ・
           ・
           ・
           ・

    View Slide

  12. こんば
     1.ファイルスキャン
     2.データ変換
     2-1.NGデータチェック
     2-2.差分反映
     2-3.物件テーブル更新
    2-4.データ変換の余談
     4.結果通知
     3.データ登録
    2.データ変換
     データ変換でしたいこと
    S3に配置されたファイルを読み解く
    異常データの検知
    差分反映(パフォーマンス向上)
    データ登録用のSTOREファイルとDELETEファイルを生成
    新規物件と更新物件のみの
    一覧をファイル出力
    STOREファイル
    削除物件の
    一覧をファイル出力
    DELETEファイル

    View Slide

  13. 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
    物件テーブルと
    作業テーブルにわけている

    View Slide

  14. 更新料が1円?!
    交通情報がない?!
    3階の建物なのに
    部屋は5階?!
    沿線情報はあるけど、距離
    や徒歩時間情報がない?!
    居住中なのに
    即時入居可?!
    住所が古い?!
    こんば
     1.ファイルスキャン
     2.データ変換
     2-1.NGデータチェック
     2-2.差分反映
     2-3.物件テーブル更新
    2-4.データ変換の余談
     4.結果通知
     3.データ登録
    2-1.NGデータチェック

    View Slide

  15. 物件名や部屋番号などの少ない情報
    を保持したテーブルを検索
    まずは新規か既存かチェックする
    物件名+部屋番号+賃料+敷金/礼金
    +住所情報+沿線情報+構造+画像情報
    +設備+建物情報+駐車場+フリーレン
    ト+入居可能日...etc
    あらゆる項目を文字列で結合
    ハッシュ化
    e56d5123807bdf4d166...(略)
    既存なら更新か否かをチェックする
    テーブル2
    テーブル1
    2-2.差分反映
    こんば
     1.ファイルスキャン
     2.データ変換
     2-1.NGデータチェック
     2-2.差分反映
     2-3.物件テーブル更新
    2-4.データ変換の余談
     4.結果通知
     3.データ登録

    View Slide

  16. 例えば
    入居可能日が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.差分反映

    View Slide

  17. 全物件 掲載中物件
    物件テーブル 作業テーブル
    変換開始時
    最後に戻す
    2-3.物件テーブル更新
    こんば
     1.ファイルスキャン
     2.データ変換
     2-1.NGデータチェック
     2-2.差分反映
     2-3.物件テーブル更新
    2-4.データ変換の余談
    掲載中物件のみを扱うことで
    パフォーマンスを保つ
     4.結果通知
     3.データ登録

    View Slide

  18. こんば
    ある程度実装した後の出来事
    おや、、データ変換だけで数時間かかりそうだぞ。。
    for文多いのか?並列処理必要か?
    プログラム各所で実行時間を計測してデバッグ
    ループ内でクラス生成しまくっている凡ミス
    修正することで大幅に改善
    結果、ストイックにしなくても変換は数分だった
    2-4.データ変換の余談  1.ファイルスキャン
     2.データ変換
     2-1.NGデータチェック
     2-2.差分反映
     2-3.物件テーブル更新
    2-4.データ変換の余談
     4.結果通知
     3.データ登録

    View Slide

  19. 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並列実行

    View Slide

  20. 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.データ登録
    処理完了件数

    View Slide



  21. 運用(おまけ)

    View Slide

  22. 運用 - エラーログ
    Datadog
    Step Functions実行時に出力したログを連携
    検索やフィルターなどエラーログの調査が容易
    Slackへ通知

    View Slide

  23. 運用 - 物件調査
    Big Query
    連携直後の物件CSVを全て保持
    変換後の登録用TSVを全て保持
    過去にどんな物件があったかをSQLで検索
    変換結果の履歴もSQLで検索

    View Slide

  24. 運用 - フィードバック
    ダッシュボード
    (Redash)
    警告やエラー内容をダッシュボードに反映
    物件の入稿担当の方へのフィードバックの仕組み

    View Slide



  25. 不動産のシステムを
    1年やって思ったこと

    View Slide

  26. fin

    View Slide