本記事の前編はこちら
強力な一貫性のユースケース
強力な一貫性のユースケースは、異なる課題を解決します。
ここで、アプリケーション/ユーザーに提供されるデータは、たとえデータの提供に遅れがあったとしても、常に最新かつ正確でなければいけません。
書き込みを見逃したり、古いデータや不正確なデータを提供したりすることは決して許されません。
技術用語で言えば、「強い一貫性」とは次のことを意味します。
- 低レイテンシー読み取り
- 読み取りは常に正しい/更新されたバージョンであり、地域間で一貫性がある (古くなったり不正確であったりしない)。
- 高レイテンシーの書き込みはOK
- 書き込みを失わない
お金関連のアクション、在庫管理、ソーシャル グラフという 3 つの強力な一貫性のユース ケースを見てみましょう。
お金に関わる行為
お金に関連するあらゆる記録は、常に正確かつ最新のものでなければなりません。
決して古くなったり、間違ったりしてはなりません。
ここに想像上のシナリオがあります。
あなたはコロラド州デンバーに住んでいますが、配偶者は仕事で東京に来ています。
あなたの配偶者は、東京の ATM で、共同銀行口座から 200 ドル相当の日本円を引き出しました。
あなたはすぐに、自分の銀行口座を確認します。
片方のアカウントでは、もう一方のアカウントに比べて 200 ドル多く表示されます。
もし詐欺師がこのようなことをしたら、2 つのシステムが同期する前に、そのお金を盗むことができます。
このようなシナリオは壊滅的であり、決して起こりません(そして、お金に関連することは常に強力な一貫性のため、実際には起こりません)。
お金に関連する行動は、送金や ATM での引き出しだけではありません。
これには、決済システム、証券口座、暗号通貨市場に関するあらゆるものが含まれます。
これらすべてのアプリケーションで、データベース (およびデータ) は複数のリージョンに分割されています。
同期アクティブ/アクティブ・データベース・トポロジーを使用しており、各リージョンから書き込みできるため、誰も古いデータを読み取ったり、最新でないデータに書き込んだりすることができません。
これにより、データは常に最新であるため、金融関連のビジネスには非常に堅牢なソリューションが提供されます。
在庫管理
お気に入りの小売店が特別セールを発表しました。
興奮したあなたは、ウェブサイトにアクセスして、新しいコートを注文します。
数日後、販売店からメールが届きました。
彼らは、在庫システムで起こったミスについて謝罪しています。
実際には在庫がなくなってしまったため、新しいコートをお届けすることができません(返金はしてくれるものの、あなたの不満を解消してはくれません)。
これは架空の例であり、現実には決して起こってはならないことです。
在庫は、あらゆる瞬間において常に正確である必要があります。
ちなみに、在庫には発券システムも含まれます。この場合の在庫は座席/サービスです。
在庫が不正確な場合、小売業者は実際には在庫していない製品を販売してしまう可能性があります。
航空会社は、すでに販売された座席を販売してしまうかもしれません。
映画館やコンサートホールでも同様に、同じ座席を複数の顧客に販売することになってしまいます。
何千人、おそらく何百万人もの買い物客が集まる特別セールを想像してみてください。
あるいは、超人気アーティストがコンサートツアーをすることを発表した時のことを想像してみてください。
彼らはみんな同じタイミングで、商品や座席を奪い合います。
存在しないものを販売する(つまり、すでに販売されている)というリスクを防ぐために、在庫管理システムは常に強力な一貫性を使用します。
これにより、表示されるデータは常に正確で最新なのです。
ソーシャルグラフ
あなたは、Facebook、LinkedIn、Snapchat、他の人々やグループ、組織との相互接続を中心に構築されたアプリを使っていますか?
ソーシャルグラフは、このようなつながりを表現したものです。
Facebook を例に挙げると、ソーシャルグラフには、友達、フォローしている人や組織などがすべて含まれます。
ソーシャルグラフは、友達とつながるゲームのプラットフォームや、その他の最新のアプリにも存在します。
なぜ、ソーシャルグラフが書き込みを見逃さず、常に最新のデータを表示することが重要なのでしょう。
その理由は、あなたが誰かと友達であるかどうかを判断することによって、大きな違いが生じるからです。簡単な例を見てみましょう。
あなたはパーティーを開くことにしました。
あなたは、自分の住んでいる地域、たとえば東京に住んでいるすべての SnapChat 友達を招待したいと考えています。
あなたは友達のリストを確認して、マイクがまだそこにいることに気づきました。
しかし、あなたは数週間前にマイクと大喧嘩をし、もう彼を友達とは思っていません。
明らかに、あなたは彼をパーティーに招待したくないでしょう。
あなたは、SnapChat でマイクの友達を解除し、すべての友達に招待状を送り、来週末に開催する盛大なパーティーを発表します。
データベースへの書き込み、マイクの友達を解除したときに、失われたり、古くなったりすると想像してください。
ソーシャル グラフが更新されておらず、マイクが招待状を受け取ったために、マイクがパーティーに現れる可能性があります。
これはほんの一例です。他にも潜在的に危険なシナリオを含む多くのシナリオがあります。
そのため、ソーシャルグラフに関連する書き込みが失われたり、古くなったりすることはありません。
結論
上記は、高い可用性データベース設定と強力な一貫性データベース設定の違いを示すための、ほんの一握りのユースケースです。
Aerospike Databaseは、これらの設定の両方をサポートする数少ないデータベースの 1 つです。具体的な実装は、特定の使用例によって異なります。
あなたのユースケースは何ですか?それは上記のいずれかに当てはまりますか?
それとも別のものでしょうか。
実際の事例や、データ管理に関連するビジネス課題の解決に エアロスパイクがどのようにお役立て出来るのか、まずはこちらからお気軽にお問い合わせください。
このブログは2023/8/29「Database clustering: Use cases」の翻訳です。