2011-09-14 15 views
2

アトミック性と正規化が基本的な原則であるリレーショナルデータベースの経験があります。NoSQLとアトミック/正規化

これらの原則は、NoSQL環境にも適用されますか? (MongoDBの表記で)異なる言語の文字列を表現する次の方法で

見て:複数の原子変異対

{ 
    'name': 'label_hello', 
    'en' : 'hello world!', 
    'de' : 'hallo welt!', 
    'es' : 'hola mundo!' 
} 

又は

{ 
    'name' : 'label_hello', 
    'values': { 
     'en' : 'hello world!', 
     'de' : 'hallo welt!', 
     'es' : 'hola mundo!' 
    } 
} 

{ 
    'name' : 'label_hello', 
    'lang' : 'en', 
    'value': 'hello world!' 
} 
{ 
    'name' : 'label_hello', 
    'lang' : 'de', 
    'value': 'hallo welt!' 
} 
{ 
    'name' : 'label_hello', 
    'lang' : 'es', 
    'value': 'hola mundo!' 
} 

NoSQLの世界で最も最適なデザインはどれですか?

更新:

はさらに私の質問を明確にする:

のI /知っているようなものを理解したいと思い

:ヒットを増やし、これらの変異体のどの模索するより速くなり、より簡単に更新します、より知的に索引付けすることができますか?

答えて

1

私はNoSQLを初めて使いましたが、Redisのようなユーティリティを使った経験に基づいて、最後の亜種を索引付けするのが最適かもしれません。 2番目はコンパクトなので、ほとんどは開発者の選択です。すべてがすべて原子性と標準化フレームになることができるわけではありません。

0

原子化ではない正規化を意味しませんか?あなたが上部に持っているものは(name,en,de,es)であり、下部には(name,lang,value)の関係で、後で列を追加せずに追加言語を追加することができますが、文書形式で列を追加することができます。(name,en,de,es)(name,en,de,es,fr)に拡張できますfr値を持たない場合は値がありません。

しかし、あなたが本当に原子性を意味する場合、ほとんどのドキュメントシステムでは、単一のドキュメントをアトミックに更新することしかできないため、同時に変更される可能性のある単一のドキュメントに値をグループ化することが望ましいでしょう。

+0

ありがとう、私は私の質問を編集しました。私は原子性を参照していますが、性能に関しては言及しています。 – thwd

3

第2の変種はより速く動作しますが、第1の変種はより少ないメモリを消費します。
最初の亜種では「名前」の値の繰り返しが少ないため、リピートが好きではないため、最初のバリアントを選択します。