データ構造からデータ記憶技術を概念的に分離することを検討する必要があります。 MySQLは、旧式で実証済みのプラットフォームであることを知っていれば、拡張、拡大縮小、拡大縮小が可能です。 NoSQLのようなものと同じように輝く新しい魅力はないかもしれませんが、それは非常に優れた実績を残しています。
もっと速く実行するようにMySQLをチューニングするには、いくつかの方法があります。組み込みのクラスタリングとレプリケーションの機能により、複数のインスタンスを非常に簡単に拡張でき、MyISAMのようなよりシンプルで高速なデータベースエンジンを使用することで、状況によっては桁違いにパフォーマンスが向上する可能性があります。
MongoDBは非常に興味深い実験ですが、これまでのところストライプは実際には得られていません。それがカッサンドラのような他の高貴なNoSQLプロジェクトのようなものなら、本当に「ウェブスケール」であるためには何年もの作業が必要です。
特定のケースでは、ユーザーのフォロワーのリストを探したいとします。あなたは、おそらくこのような何かをやっている:
SELECT followers.id, followers.name FROM user_followers
LEFT JOIN users AS followers ON followers.id=user_followers.follower_id
WHERE user_followers.user_id=?
あなたは右ここJOIN
は道のトラブルの原因となることを前提にしています。あなたが見落としているのは、アプリケーションのスケールを作るために不可欠である同じ謙虚なトリックを使用して、重要な情報を非正規化することで簡単に結合を削除できるということです。
SELECT follower_id, follower_name FROM user_followers
WHERE user_id=?
今何が加わりありません:あなたはuser_followers
テーブルにあなたがそれにエントリを追加するたびにフォロワーの名前をコピーした場合はどう
。唯一のキャッチは、物を非正規化し始めるときに、何かが乱れてしまった場合に、マスターからコピーを元に戻す方法を実装する必要があることです。マスター値の変更が、必要に応じて便宜的にコピーする。ユーザーが自分の名前を変更することができない場合しかし、あなたも心配する必要はありません、
UPDATE users,user_followers
SET user_followers.follower_name=users.name
WHERE user_followers.follower_id=users.id
:
シンプル一括更新は、同じように簡単である可能性があります。この点で制約があなたを助けることがあります。
NoSQLがアプリケーションに適していると思われるのはなぜですか? MySQLは実稼働環境でどのように使用されますか?これらの回答はすでにありますか、データベースの切り替えに関するヘルプを求めているだけですか、またはNoSQLに切り替える理由をお探しですか? – jergason
私は誰かが私にいくつかの意味を話す必要があると思う。私はMySQLがちょうどクロールに来ることを心配しています、それは与えられたプロファイル/ユーザの各フォロワーのために結合操作を行わなければならないときです。私はデータベースが本当に必要なサイト(プロファイルを持つユーザーベースのサイト)を見慣れていないので、各プロファイルの訪問時にデータベースが何をする必要があるかについて狂った(私にとっては)考えています。 – Elxx
まず、ログのコマンドに対して実行されたクエリを見ることができます(スクリプト/コンソールのRailsロガーをSTDOUTに設定すると啓蒙することができます)。次に、MySQLは恥ずかしがり屋ではありません。 1秒あたり100秒のリクエストが得られない限り、それを実行してください。第三に、常にキャッシュがあります。第4に、完全に切り替えることなくNoSQL(Redis特に)を使用することができます。最後に、newrelic_rpmをインストールし、問題がある場合にのみ心配してください。 –