9

データベースの最新の流行は、非リレーショナルデータベースに集中しているようです。なんで?それは一種の逆効果のようです。たとえば、データをリレーショナルな方法で表現する方がはるかに理にかなっています(Djangoのサンプルコード+テーブルのSQL):

class Post(models.Model):
    name = models.CharField()
    created = models.DateTimeField(auto_now_create = True)

class Comment(models.Model):
    text = models.TextField()
    post = models.ForeignKey('Post')
    created = models.DateTimeField(auto_now_create = True)

SQL:

create table post (id int primary key auto_increment,
        name varchar,
        created datetime);

create table comment(id int primary key auto_increment,
        text text,
        post_id int,
        created datetime,
        foreign key post_id references post(id));

SQLの力は、この情報を非常に多くの方法で表現できること です。確かに、オブジェクトリレーショナルマッピングの問題全体が存在しますが、私はそれを問題ではなく機能として見ています。SQLを使用すると、昨日より古い特定の投稿のすべての個別のコメントをフェッチし、それらすべてを照合して、統計を生成できます。非リレーショナルデータベースについても同じことができますか?

また、MongoDBのような非リレーショナルデータベースを使用すると、最低限必要なものではなく、オブジェクトグラフ全体をすぐに取得できるため、パフォーマンスに大きな影響を与えるように思われます。

非リレーショナルデータベースを使用することの利点を誰かが私に説明できますか?

4

2 に答える 2

4

CAP定理を見てください

そしてPACELCの解釈

リレーショナルデータベースは1セットのトレードオフを行う傾向があり、非リレーショナルデータベースは別のセットのトレードオフを行う傾向があります。大規模な分散データセットの場合、非リレーショナルの方が理にかなっている場合があります。

非リレーショナルデータベースが多くのORMの苦痛を取り除くことができるという感覚もありますが、やはりトレードオフが常にあります。場合によっては、特定の階層のすべてのデータをディスク上でより近くに格納できるため、非リレーショナルストレージの方が高速になることがあります。また、非リレーショナルデータベースにはまだクエリ機能があることに注意してください。

結局のところ、それはあなたの特定のユースケースに適切なトレードオフのセットを作ることです。

于 2011-10-28T22:01:51.553 に答える
0

Nosqlを見てください:http://en.wikipedia.org/wiki/NoSQL

これは基本的に、拡張性とパフォーマンスによるものです。

于 2011-10-28T22:06:32.083 に答える