複合条件による高速プラン検索
エリア、カテゴリー、予算、プランの特徴、利用日、希望時間、利用人数などを組み合わせ、店舗が登録した提供期間、曜日、定員、受付期限、空席数も判定して、実際に予約可能な候補を絞り込みます。検索用データとMySQLの全文検索インデックス、構造化された条件検索を組み合わせ、結果はページ単位で必要な件数だけ取得する構成としています。
株式会社ぐるなび様からご依頼を受け受託開発した、グルメ情報サイト「ぐるなび」向けプラン検索・予約システムの開発実例をご紹介します。
高トラフィック環境で、複合条件検索の高速性と予約処理の堅牢性を両立
株式会社ぐるなび様からご依頼を受け、グルメ情報サイト「ぐるなび」内の新たなコンテンツとして、飲食店の予約プランを検索・予約できるWebシステムを開発しました。
開発当時、「ぐるなび」はサイト全体で月間8億PV以上を誇る国内有数の大規模サイトでした。多くの利用者が訪れる環境では、検索処理のわずかな遅延もサーバー全体の負荷や利用者の離脱につながります。一方、予約処理では、同じ空席枠へアクセスが集中しても、過剰受付やデータの不整合を起こさない確実性が求められます。
そこで当社は、エリア、日付、時間、人数、予算などを組み合わせた高速検索と、空席数を正確に管理する予約処理を両立した検索・予約システムを構築しました。利用者向けの検索・予約画面、店舗向けの管理画面、既存サイトと連携するAPI、通知、定期バッチ処理までを一体で設計・開発しています。
画面イメージ(縮小・一部加工のうえ掲載しています)
大規模サイトの新規コンテンツとして、次のような要件と技術的課題がありました。
多数のアクセスが集中しても、検索結果を短時間で返す必要がある
エリア、カテゴリー、予算、特徴、利用日、時間、人数、空席を組み合わせて検索する必要がある
検索のたびに大量のプラン・空席データを集計すると、データベースへ大きな負荷がかかる
既存サイトの店舗情報や会員基盤と連携し、独立した別サービスに見えない導線を構築する必要がある
店舗によるプラン・空席の更新と、利用者による検索・予約を速やかに連動させる必要がある
同じ予約枠へ申込みが重なっても、在庫数と予約データの整合性を維持する必要がある
予約、取消、利用者との連絡、店舗への通知まで、受付後の業務も一つの仕組みで支える必要がある
当社は機能を実現するだけでなく、アクセス規模を前提にデータの持ち方と検索方法を設計し、通常の閲覧処理と重要な予約更新処理をそれぞれに適した方式で構築しました。
※掲載している画面は、お客様向けに開発したシステムの画面イメージです。守秘のため縮小・一部加工のうえ掲載しています。
エリア、カテゴリー、予算、プランの特徴、利用日、希望時間、利用人数などを組み合わせ、店舗が登録した提供期間、曜日、定員、受付期限、空席数も判定して、実際に予約可能な候補を絞り込みます。検索用データとMySQLの全文検索インデックス、構造化された条件検索を組み合わせ、結果はページ単位で必要な件数だけ取得する構成としています。
利用日を指定しない検索や広いエリアを対象とした検索で、全店舗・全日程の空席を都度集計すると処理負荷が大きくなります。そこで、エリアごとの空席有無を数か月先まで定期バッチで集計し、検索向けのデータとして保持する仕組みを構築。利用者のアクセス時に行う計算を事前処理へ移すことで、高トラフィック環境でも安定した応答を維持しやすくしました。
検索結果から、店舗情報、プラン名、説明、画像、提供期間、時間帯、料金、利用可能人数などを確認できます。空席カレンダーでは予約可能な日付と時間帯を分かりやすく表示し、そのまま予約手続きへ進めます。検索一覧、店舗別プラン一覧、プラン詳細、空席カレンダーを段階的に分け、各画面で必要な情報だけを取得することで、探しやすさと処理負荷の軽減を両立しました。
店舗側では、プラン名、説明、提供期間、提供曜日、時間帯、1名あたりの料金、プランの特徴、画像などを登録します。登録内容は公開前にプレビューでき、プラン単位で公開開始・停止を切り替え可能。既存プランを複製して新しいプランを作成する機能も備え、季節や期間に応じた類似プランを効率よく登録できるようにしました。
プランで使用する席やスペースについて、名称、最少・最大利用人数、席種、個室区分、設備・特徴、提供期間、基本の提供可能数を管理します。複数の時間帯を設定できるため、昼・夜など時間枠ごとに異なる予約受付にも対応。プランと提供スペースを関連付け、「どの場所を、どの時間帯に、いくつ提供するか」を一つの予約条件として管理します。
席・スペースと時間帯ごとに、1か月分の提供可能数をカレンダー形式で登録・変更できます。日ごとの個別変更に加え、曜日単位の一括設定や対象月の受付停止にも対応。予約成立時には空席数を減らし、取消時には戻します。利用者向けの空席表示と店舗側の在庫管理に同じデータを用いることで、別台帳への転記や更新の時間差をなくしました。
利用者は、希望日、時間帯、利用人数、予約者名、連絡先、利用目的、店舗への要望などを入力し、確認画面を経て予約を確定します。確定時にはプランの公開状態、提供曜日、受付期限、定員、空席数を改めて確認したうえで、対象の空席データをロックし、予約登録と空席数の更新を一つのトランザクションで処理。同時に複数の申込みが発生しても、過剰受付や不整合を防ぐ設計です。外部会員基盤と連携した入力補助も実装しました。
店舗ごとに、予約情報の通知先、予約受付の締切、取消受付の締切、取消規定、新着予約を表示する期間などを設定できます。通知先には複数の連絡手段を設定でき、登録時のテスト送信で送信先を確認可能。店舗ごとの営業方法や受付体制に合わせて、Web予約の運用条件を調整できる仕組みです。
店舗側の管理画面では、直近1週間の予約件数を日別に確認し、日付を選んで予約者の一覧と詳細を参照できます。予約番号、予約日時、人数、プラン、提供スペース、予約者情報、要望など、接客準備に必要な情報をまとめて表示。店舗側と利用者側の双方から取消処理を行え、取消理由と処理履歴を記録したうえで、予約データと空席数を整合させます。
予約単位で、店舗と予約者が確認事項や要望をやり取りできる連絡機能を設けました。投稿者、日時、内容を履歴として残し、双方の画面から同じ経緯を確認できます。新規予約、取消、予約に関する新しい連絡など、主要な処理に合わせて関係者へ自動通知し、店舗側はメールやFAXなど運用に合った通知先を設定できます。
検索結果やプラン情報をXML形式で提供するAPIを実装し、既存サイト内のさまざまな画面やコンテンツから利用できる構成としました。取得条件と返却件数を制御し、大規模サイト全体へ無理なく組み込める連携方式としています。また、SOAPによる外部API連携で会員認証・会員情報の取得に対応し、既存の店舗情報・会員基盤を生かしながら新しい検索・予約機能を追加できるようにしました。
店舗側では、対象月を指定し、予約番号、利用日、予約者名、人数、提供スペース、プラン、利用金額を一覧で確認できます。利用金額の月間合計も表示し、予約受付後の実績把握を支援。日々の予約管理と月単位の確認を同じデータから行うことで、別の台帳へ転記して集計する負担を抑えました。
検索用データ、全文検索インデックス、事前集計、取得件数の制御を組み合わせ、月間8億PV以上のサイトへ組み込むことを前提とした検索基盤を構築しました。
空席情報の集計を利用者のアクセス時ではなく定期バッチで行い、複雑な条件検索が集中した際のデータベース負荷を抑える設計としました。
予約可能条件の再確認、データロック、トランザクション制御により、同時申込みが発生する環境でも過剰受付を防ぎやすくしました。
XML APIと外部会員サービス連携により、既存サイトの店舗・会員情報や画面導線を生かしながら、新しい予約コンテンツを構築しました。
プラン、席・スペース、時間帯、料金、空席数を同じ仕組みで管理し、利用者向けの検索・予約画面へ直接つなげました。
日別一覧、予約詳細、自動通知、取消処理、予約単位の連絡履歴により、店舗側の確認や利用者とのやり取りを行いやすくしました。
画面を作成した後に速度を調整するのではなく、月間8億PV以上のサイトへ掲載されることを前提に、検索対象データ、絞り込み方法、1回の取得件数、事前集計の範囲を設計しました。リアルタイム性が必要なデータと、あらかじめ計算できるデータを分けることで、検索性能と情報の正確性を両立しています。
エリア、カテゴリー、プラン特徴などの検索条件は全文検索用データへまとめ、空席有無は月・日単位の検索向けデータとして事前集計しました。一方、予約確定に使用する在庫は最新データを直接確認します。参照処理は速く、更新処理は確実に行うという役割分担が、本システムの重要な設計ポイントです。
検索結果に空席が表示されていても、入力中に別の予約が入る可能性があります。本システムでは、予約確定直前に条件と空席を再確認し、対象行をロックしたうえで予約登録と在庫更新を一括処理しました。エラー時には処理全体をロールバックし、中途半端な更新を残さない構成です。
高速な検索機能だけでなく、店舗によるプラン・空席設定、予約後の確認・取消・連絡、通知、実績確認までを一つの業務フローとして構築しました。利用者に見えるコンテンツと、その裏側で日々運用する店舗向け機能の双方を設計できることが当社の強みです。
利用者向け画面、店舗向け管理画面、検索結果を提供するXML API、外部会員基盤とのSOAP連携、検索用データを更新する定期バッチ処理までを一体で開発しました。既存サービスの資産と運用を生かしながら、新しいコンテンツを安全に追加できる構成としています。
高い応答性能とデータの正確性が同時に求められるWebシステムをご提案します
当社では、大規模な商品・店舗検索、予約受付、施設・設備の提供枠管理、在庫・空き状況管理、外部サービス連携など、高い応答性能とデータの正確性が同時に求められるWebシステムを受託開発しています。
アクセスが増えると検索が遅くなる、複雑な検索条件とリアルタイム在庫を両立したい、予約や申込みの同時実行でもデータを確実に更新したい、既存の大規模サイトへ新しいコンテンツを追加したいといった課題がありましたら、想定アクセス、データ量、更新頻度、業務フローを踏まえて、必要なシステム構成をご提案します。
システム導入の検討段階、既存システムの改修、見積もり依頼など、
業務に合わせたご相談を幅広くお受けしています。
「システム化すべきか分からない」段階のご相談から対応可能です。まずは現状をお聞かせください。