2010-11-19 12 views
6

MongoDBでは、スペースを節約するために短いキー名を使用するのが一般的です。例えば、1の代わりに「FIRST_NAME」のアプリ内しかしMongoidとRailsでのフィールドエイリアス

の「FN」を使用する場合があります、あなたはすべての場所の上に「FN」を使用した場合にねじ込まれています。それはあまりにも醜いです。具体的には、Mongoidでフィールドを宣言するときにエイリアスを指定する簡単な方法はありますか?

また、誰もがMongoidを使用するすべてのオープンソースのサンプルプロジェクトを知っていますか?

ありがとうございます!

答えて

3

私はMongoDBのプロジェクトでは、短いキーの名前を見たことがないので、私はそれが一般的な方法だと言うではないでしょう。私はあなたが目に見えるスピードの向上を見ていないと思いますし、あなたのコードが不必要に複雑になります。記述的な名前は長く、彼らはそれが永久にタイプするのに必要なほど記述的ではありません。

MongoDBのオープンソースプロジェクトがたくさんあります。ちょうどgithubで検索してください。

- 以下の編集 -

これはかなり独断的な答えでした。他の回答に記載されているように処理方法(https://github.com/mongoid/mongoid/blob/master/lib/mongoid/attributes/processing.rb)を上書きする方が、小さなフィールド名を必要とするシナリオではより適切です。このような

+5

速度の問題ではなく、スペースの問題です。 "first_name"と "fn"を10億倍(〜10GB対2GB)の間に格納するのには大きな違いがあります。コモディティハードウェアを使用している場合は、スペースは安いですが、サーバーグレードのハードウェアで実行している場合は、スペースがかかります。参照してください:http://blog.boxedice.com/2010/10/23/on-shortened-field-names-in-mongodb/ – Intelekshual

+0

フィールド名を短縮する必要があるのは、次の場合です。1)小さな値、2 )非常に大きなデータセット、3)非常に緩やかなスキーマ(アドホックフィールド)。これらの3つのケースを考えると、私は処理方法を上書きすることが意味があることに同意します(下記の回答)。それでもクエリを実行するときはそのことを念頭に置いておく必要があります。したがって、かなり複雑なコードを生成しています。たとえば、私が実際に大きなデータセットを持っていて、小さな値を持っていても、スキーマがほとんど変化しない(統計情報のように)なら、おそらくmongodbの代わりにpostgresqlを選ぶでしょう。 –

+0

Dave Rapinの意見で10Gen(MongoDBの後ろにいる会社)の人たちが同意していません[1]。 @Intelekshualが述べたように、ディスク容量を大幅に節約できますが、Mongoは作業セットとインデックスをメモリに保存する必要があります。 http://docs.mongodb.org/manual/faq/developers:小さい文書は、パフォーマンスが [1]より肥大化Mongoのドキュメントを処理する必要がないため、アプリのコードゲインを高めるもちろんのこと、メモリに格納することができますより多くの意味します/#how-do-i-optimize-small-documents用の最適化ストレージ – xentek

0

何かがあなたのクラスファイルで作業する必要があります。 (それはちょうど作成または更新にハッシュを渡して、すべてのケースでテストされていません。)

field :fn, :type => String 

    alias :first_name :fn 
    alias :filtered_process :process 

    def process(attrs = nil) 
    attrs[:fn] = attrs[:first_name] unless attrs.nil? 
    filtered_process(attrs) 
    end 
+0

Mongoid 3は、フィールドエイリアシングのサポートを組み込んでいるので、ルビのメソッドキャッシュデソルエイリアスメソッドを使用する必要はありません。 – xentek

11

ここで概説として、あなたが

field :fn, :as => :firstname 

を使用して検討する必要があります。 http://groups.google.com/group/mongoid/browse_thread/thread/ce3298d6a167bd70

このモンゴイドで完全にサポートされている非常に良い習慣です。

+0

アイデアは、あなたのアプリケーションコードが 'fn'ではなく' firstname'を呼び出すということです。モンゴイはフィールドを 'fn'としてmongoの内部に保存します。 – xentek

関連する問題