2010-12-12 3 views
1

userのテーブルとfollowerのテーブルがあります。フォロワーテーブルはuser_id秒とfollower_id秒のリストです。かなりまっすぐに見える。Rails 3 NoSQLへの切り替えが遅すぎるのはいつですか? (ケース:フォロワーシステムを作成する)

私は生産のためのMySQLを使用して計画されてきたと私は道を好きな感じ、これは本当に私はMongoDBのに切り替えるべき$$

で私を噛まないように起こっていますか?それは遅すぎますか?

私はNoSQLを何も扱ったことがありません。私はどのように結合の問題を回避するのかと思います。私は自分のプロフィールからユーザーを分離する以外は、この問題を解決するための少しの努力をしても大丈夫です。私は、activerecordが次のような文で結合を使用すると仮定しています。@name = User.profile.full_name

+2

NoSQLがアプリケーションに適していると思われるのはなぜですか? MySQLは実稼働環境でどのように使用されますか?これらの回答はすでにありますか、データベースの切り替えに関するヘルプを求めているだけですか、またはNoSQLに切り替える理由をお探しですか? – jergason

+0

私は誰かが私にいくつかの意味を話す必要があると思う。私はMySQLがちょうどクロールに来ることを心配しています、それは与えられたプロファイル/ユーザの各フォロワーのために結合操作を行わなければならないときです。私はデータベースが本当に必要なサイト(プロファイルを持つユーザーベースのサイト)を見慣れていないので、各プロファイルの訪問時にデータベースが何をする必要があるかについて狂った(私にとっては)考えています。 – Elxx

+1

まず、ログのコマンドに対して実行されたクエリを見ることができます(スクリプト/コンソールのRailsロガーをSTDOUTに設定すると啓蒙することができます)。次に、MySQLは恥ずかしがり屋ではありません。 1秒あたり100秒のリクエストが得られない限り、それを実行してください。第三に、常にキャッシュがあります。第4に、完全に切り替えることなくNoSQL(Redis特に)を使用することができます。最後に、newrelic_rpmをインストールし、問題がある場合にのみ心配してください。 –

答えて

0

データ構造からデータ記憶技術を概念的に分離することを検討する必要があります。 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 

シンプル一括更新は、同じように簡単である可能性があります。この点で制約があなたを助けることがあります。

関連する問題