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

Naf*_*Kay 5 database non-relational-database 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)
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

SQL的强大之处在于这些信息中可以表示 这么多的方式.当然,存在整个对象关系映射问题,但我将其视为一个特征,而不是一个问题.使用SQL,我可以获取比昨天更早的给定帖子的所有不同注释,将所有这些注释整理在一起,并生成统计信息.可以为非关系数据库做同样的事情吗?

使用非关系数据库(如MongoDB)似乎也会影响性能,因为您会立即获取整个对象图,而不是您最不需要的对象图.

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

Nat*_*han 4

看看CAP定理

以及PACELC的解释

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

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

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