为什么我要使用非关系数据库?

时间:2011-10-28 21:51:28

标签: database relational-database non-relational-database

数据库中的最新热潮似乎集中在非关系数据库上。为什么?这似乎适得其反。例如,以关系方式表达我的数据对我来说更有意义(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)似乎也会影响性能,因为您会立即获取整个对象图,而不是您最不需要的对象图。

有人可以向我解释使用非关系型数据库的好处是什么?

2 个答案:

答案 0 :(得分:5)

查看CAP Theorem

PACELC interpretation

关系数据库倾向于进行一组权衡,非关系数据库倾向于做出不同的权衡取舍。对于大规模分布式数据集,非关系数据集有时更有意义。

还有一种感觉,非关系数据库可以消除很多ORM的痛苦,但同样总是存在权衡。在某些用例中,非关系存储可以更快,因为特定层次结构的所有数据可以更紧密地存储在磁盘上。另请注意,非关系数据库仍具有查询功能。

最后,它是针对您的特定用例进行适当的权衡取舍。

答案 1 :(得分:1)

查看Nosql:http://en.wikipedia.org/wiki/NoSQL

这主要是因为可扩展性和性能。