这几天看NoSQL,还是不太理解从传统的关系型数据库中的表、行、列转换到NoSQL。
比如一个最简单的博客数据库设计,有分类表,有文章表、每个分类对应N条文章。
这样的传统关系数据库设计怎么转变到Mongodb、Redis呢?
使用过Mongodb,我是这样设计的,对于文章:
通过tag和分类查询文章,可以使用聚合Map/Reduce等。
对于Redis,处理这些主要还是在自己的应用里实现。
博客用文件就行了,按日期放文件夹里文件夹用日期命名,tag也用文件夹,里面放文章文件的softlink即可
database | database table | collection row | document/BSON document column | field index | index table | joins primary key | primary key
用SQL语句
CREATE TABLE users ( id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age Number, status char(1), PRIMARY KEY (id) )
用NoSQL语句
db.users.insert( { user_id: "abc123", age: 55, status: "A" } )
你完全可以使用关系型数据库的思想设计数据库,比如:
category collection:
name:string
posts collection:
category_id: object_id title:string
也可以嵌套子文档, category collection下有很多的posts doc
category:
posts: []
使用NoSQL数据库,首先就要抛弃关系型数据库的思想。采用对象化的方式去处理数据结构。 每一种NoSQL数据库都代表一种不同的对象处理的设计思想,这个问题太大了。 学NoSQL,先忘掉关系型数据库吧。
回答的人不少啊,但是我没看到比较全面的回答
使用过Mongodb,我是这样设计的,对于文章:
通过tag和分类查询文章,可以使用聚合Map/Reduce等。
对于Redis,处理这些主要还是在自己的应用里实现。
博客用文件就行了,按日期放文件夹里文件夹用日期命名,tag也用文件夹,里面放文章文件的softlink即可
SQL 名称 | MongoDB 名称
database | database
table | collection
row | document/BSON document
column | field
index | index
table | joins
primary key | primary key
例:创建一个表
用SQL语句
用NoSQL语句
你完全可以使用关系型数据库的思想设计数据库,比如:
category collection:
posts collection:
也可以嵌套子文档, category collection下有很多的posts doc
category:
使用NoSQL数据库,首先就要抛弃关系型数据库的思想。采用对象化的方式去处理数据结构。 每一种NoSQL数据库都代表一种不同的对象处理的设计思想,这个问题太大了。 学NoSQL,先忘掉关系型数据库吧。
回答的人不少啊,但是我没看到比较全面的回答