Web サイトのバックエンド用にスケーラブルなデータベース ソリューションを構築したいと考えています。最近、データベースの設計について読んでいて、うまくいくかもしれないアイデアを自分で開発したようです。これは同期されたデータで n 個のデータベースを維持する斬新な方法だと思いますが、間違っている可能性があります。だから私はSOにアイデアを評価して、それがクレイジーかどうか教えてくれるように頼んでいます. (または、既に存在し、実装されている場合)
このスキームには、サーバーノードのグループがあります。1 つのノードはクエリ ロード バランサを実行し (これをAと呼びましょう)、残りは一般的な dbms を実行しています。これらのノードをまとめてNと呼びましょう。
各 N は他から切り離されています。つまり、Nのノードは他のノードと通信する必要はありません。各NはAのみに接続されます。
プロセスは次のように機能します
- すべてのデータベース クエリはAを介して渡されます。(ここでは、 Aが無限のスループットと処理能力を持っていると仮定しましょう)
- Aは各クエリ ( Q ) を検査し、それがデータベースから読み取る操作か、データベースに書き込むクエリかを判断します。(SQL では、読み取りは選択になり、書き込みは更新になります)
- Qが読み取り操作の場合、 N内のノードの1 つに転送します
- Qが書き込み操作の場合、それをNのすべてのノードに転送します
適切に実装されていると仮定すると、これにより、N内のすべてのノードが同期されたデータベース コンテンツを持つことになります。データの読み取りのみを行うクエリは、1 つのノードに送信する必要があります。
私のシステムでは書き込み操作が非常に少なく、1% 未満であるため、このアイデアは特にうまく機能しているようです。
このアイデアについていくつか質問があります
- このようなスキームは、理論的な観点から理にかなっていますか?
- これが理にかなっている場合、商用または無料のソリューションが既に実装されていますか?