sql >> データベース >  >> RDS >> Mysql

Rails 3アプリのMySQLクラスター(NDB)とMySQLレプリケーション(InnoDB):長所/短所?

    最近ドキュメントに投稿されたInnoDBとMySQLCluster(ndb)の良い比較があります...一見の価値があります: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html

    クラスタアーキテクチャは、アプリケーションによってアクセスされるMySQLサーバーのプールで構成されます。これらのMySQLサーバーは実際にはクラスターデータを保存しません。データは以下のデータノードのプールに分割されます。すべてのMySQLサーバーは、すべてのデータノードのデータにアクセスできます。 1つのMySQLサーバーがデータの一部を変更すると、他のすべてのMySQLサーバーに即座に表示されます。

    明らかに、このアーキテクチャにより、データベースのスケールアウトが非常に簡単になります。シャーディングとは異なり、アプリケーションはデータが保持されている場所を知る必要はありません。使用可能なすべてのMySQLサーバー間で負荷分散するだけです。 MySQLレプリケーションを使用したスケールアウトとは異なり、Clusterでは読み取りだけでなく書き込みもスケーリングできます。アプリケーションへのサービスを失うことなく、新しいデータノードまたはMySQLサーバーを既存のクラスターに追加できます。

    MySQL Clusterのシェアードナッシングアーキテクチャは、非常に高い可用性(99.999%以上)を提供できることを意味します。データを変更するたびに、データは2番目のデータノードに同期的に複製されます。 1つのデータノードに障害が発生した場合、アプリケーションの読み取りおよび書き込み要求はバックアップデータノードによって自動的に処理されます。

    MySQL Clusterの分散性により、一部の操作は遅くなる可能性があります(たとえば、数千の中間結果を持つJOIN-これに対処するプロトタイプソリューションが利用可能ですが)が、他の操作は非常に高速で、非常に適切に拡張できます(たとえば、プライマリキーの読み取りと書き込み)。テーブル(または列)をメモリまたはディスクに保存するオプションがあり、メモリオプションを選択することで(変更がバックグラウンドでディスクにチェックポイントされる)、トランザクションを非常に行うことができます。 速い。

    MySQL Clusterは、単一のMySQLサーバーよりもセットアップが複雑になる可能性がありますが、アプリケーションにシャーディングまたは読み取り/書き込み分割を実装する必要がなくなる可能性があります。スイングとラウンドアバウト。

    MySQL Clusterから最高のパフォーマンスとスケーラビリティを引き出すには、アプリケーションを微調整する必要がある場合があります(クラスターパフォーマンスチューニングホワイトペーパー: http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php )。アプリケーションを所有している場合、これは通常大したことではありませんが、変更できない他の誰かのアプリケーションを使用している場合は、問題になる可能性があります。

    最後の注意点は、すべてまたはゼロである必要はないということです。一部のテーブルをクラスターに格納し、一部を他のストレージエンジンを使用して格納することを選択できます。これは、テーブルごとのオプションです。また、クラスターと他のストレージエンジン間で複製することもできます(たとえば、ランタイムデータベースにクラスターを使用してから、InnoDBに複製して複雑なレポートを生成します)。




    1. postgresqlのクエリから最小値、中央値、最大値を取得するにはどうすればよいですか?

    2. mysqlの値をデクリメントしますが、負ではありません

    3. OracleのCURRENT_DATE関数

    4. MySQL多対多選択