100,000 人以上のユーザーにサービスを提供する大規模な電子商取引 Web サイトを構築していますが、最初の 1 年間でユーザー数が急速に増加すると予想しています。一般に、このサイトは、ユーザーがリストを作成、更新、および削除できる ebay と非常によく似た機能を果たします。ユーザーは、リストを検索して、興味のあるアイテムを購入することもできます。基本的に、システムにはトランザクション要件と非トランザクション要件があります。
**Transactional**
Create a listing (multi-record update)
Remove a listing
Update a listing
Purchase a listing (multi-record update)
**Non-Transactional**
Search listings
View a listing
Couch や MongoDB などのスケーラブルなドキュメント ベースの NoSQL データ ストアの機能を活用したいと考えていますが、同時に ACID トランザクション要件をサポートするリレーショナル ストアも必要です。そこで、両方のテクノロジーを使用するハイブリッド ソリューションを考え出しました。
サイトは「主に読み取り」であるため、スケーラビリティのニーズを満たすために、MongoDB データ ストアをセットアップしました。トランザクションのニーズのために、MySQL Cluster をセットアップしました。ミドルウェア コンポーネントとして、JBoss App サーバー クラスターを使用します。
「検索」リクエストが届くと、JBoss はそのリクエストを Mongo に送信して検索を処理します。これにより、MySQL に負担をかけずに非常に迅速に結果が生成されます。リストが作成、更新、削除、または購入されると、JBoss は MySQL に対してトランザクションを処理します。MongoDB と MySQL の同期を維持するために、MySQL に対して JBoss によって処理されるすべてのトランザクション要求には、リスト ID を介して MongoDB 内の対応するドキュメントを更新するビジネス ロジックの最終ステップが含まれます。この文書更新の統合を容易にするために、MongoDB Java API を使用する予定です。
要するに、サイトは主に読み取られるため、このアーキテクチャにより、MongoDB を水平方向にスケールアウトして、より多くのユーザーに対応できるようになります。MySQL を使用すると、JBoss ミドルウェアを通じて MongoDB ストアを更新しながら、リレーショナル データベースの ACID プロパティを活用できます。
このアーキテクチャに問題はありますか? 一貫性、可用性、および分割耐性を同時に提供できるプラットフォームはありません。NoSQL システムは通常、一貫性をあきらめます。しかし、少なくともこのハイブリッド アプローチでは、システムの複雑さが増すという犠牲を払って 3 つすべてを実現できます。私たちの要件はすべて満たされているので、それで問題ありません。