NOSQL中数据库的设计精髓或者设计原则是什么?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

NOSQL中数据库的设计精髓或者设计原则是什么?

2016-06-29 10:48:01 2976 2

我们先看看在mongodb下,Blog表是如何描述的:

var BlogScheme = new db.Schema({
title : String,
desc : String,
author : String,
body : String,
tags : [String],
count: { type:Number, default:0 },
hidden : { type: Boolean, default: false },
date : { type: Date, default: Date.now },
comments : [{ img: String, name: String, body: String, date: Date }],
meta : {
votes: Number,
favs: Number
}
});

  按照mongodb的设计,每篇Blog都是整篇存储的,与其它表基本没有关联,这也是NoSQL的精髓啊!但是这样子,我们该如何去统计Blog的标签tag呢?
这是我在网上摘抄的一篇文章。
其中关于NOSQL设计的一些原则。就是一篇文章就是一个表,基本上不与其他表联系,里面的评论直接放在了blog里面。我想问的是,如果这样做,怎么分页呢???
比如评论分页,,
还有就是nosql的设计原则是什么?有类似于关系型数据库的范式之说吗?

我还找到了一篇文章:
http://www.cnblogs.com/AllenDang/p/3507821.html#!comments
基本上其设计思路就是上面我提到的:将blog和评论放在一起。
这样做是减少了很多查询的。
但是出现了一个问题,如果用户的昵称变了。
那岂不是每一个这个用户评论的的blog都要去修改了????

关系型数据库,修改一下,然后join查询自然就是最新结果。
请问在mongodb里面该如何设计或者处理这种问题?

取消 提交回答
全部回答(2)
  • 云建站小宋
    2021-07-09 11:56:57

    最佳回答:

    nosql比较宽泛,不同的数据库设计原则不同。

    比如mongoDB和redis都属于nosql,但是一个是文档型,一个是KV型,设计原则的区别特别大。

    mongoDB的设计原则还是比较靠近关系型数据库,它的collection和table比较类似,也是insert、remove、update、find这几个基本操作,可以参考关系型数据库来设计。但是它比关系型关系灵活。

    比如:一条微博可以插入9张图片,如果在MySQL中,可能这样设计:微博是一个table,图片信息是一个table,两只表做关联。或者这样设计:在微博那个table中加一个足够大的字符串类型的字段叫img_info,里面存放9张图片信息的json字符串。

    而在mongoDB中,天生就是支持上述的第二种设计的。记住,是天生支持,也是就天生对img_info里面内容crud操作都异常方便。

    然后回到你说的分页的问题:

    分页主要就是用到2个函数:limit和skip

    但是,数据量太大的时候,就不适合用skip分页了。

    《MongoDB权威指南》中给出的解决方案是:获取上一页的最后一条数据,然后使用gt和limit获取下一页的数据。

    关于redis的,@土豆2015 同学已经说的很详细了,就不累述了。

    提醒@土豆2015 一下,mongoDB是将部分数据做内存映射,最大化利用内存,持久化还是会保存在磁盘中的。如果没有持久化,把mongoDB重启一下,数据不就都没有了啊。就算是redis这样纯内存型数据库,也是有数据持久化的。

    官方帮助文档地址:阿里云帮助中心

    更多参考: 阿里云官网(新用户需注册查看),可领上云红包

    0 0
  • a123456678
    2019-07-17 19:48:52

    nosql比较宽泛,不同的数据库设计原则不同。
    比如mongoDB和redis都属于nosql,但是一个是文档型,一个是KV型,设计原则的区别特别大。

    mongoDB的设计原则还是比较靠近关系型数据库,它的collection和table比较类似,也是insert、remove、update、find这几个基本操作,可以参考关系型数据库来设计。但是它比关系型关系灵活。
    比如:一条微博可以插入9张图片,如果在MySQL中,可能这样设计:微博是一个table,图片信息是一个table,两只表做关联。或者这样设计:在微博那个table中加一个足够大的字符串类型的字段叫img_info,里面存放9张图片信息的json字符串。
    而在mongoDB中,天生就是支持上述的第二种设计的。记住,是天生支持,也是就天生对img_info里面内容crud操作都异常方便。

    然后回到你说的分页的问题:
    分页主要就是用到2个函数:limit和skip
    但是,数据量太大的时候,就不适合用skip分页了。
    《MongoDB权威指南》中给出的解决方案是:获取上一页的最后一条数据,然后使用gt和limit获取下一页的数据。

    关于redis的,@土豆2015 同学已经说的很详细了,就不累述了。

    提醒@土豆2015 一下,mongoDB是将部分数据做内存映射,最大化利用内存,持久化还是会保存在磁盘中的。如果没有持久化,把mongoDB重启一下,数据不就都没有了啊。就算是redis这样纯内存型数据库,也是有数据持久化的。

    0 0
添加回答
相关问答

0

回答

请教个初级问题,按照官网的mysql例子,控制台上没有数据输出是什么原因

2022-08-10 11:07:05 61浏览量 回答数 0

1

回答

常用数据挖掘方法中关联规则常用来解决什么问题?

2022-07-24 19:10:33 82浏览量 回答数 1

1

回答

垃圾数据内核自动清理的机制是什么?

2022-05-08 17:43:00 118浏览量 回答数 1

1

回答

数据复制的核 心技术是什么?

2022-04-05 16:57:45 121浏览量 回答数 1

1

回答

Agent的工作原理是什么?

2021-12-05 23:30:31 116浏览量 回答数 1

1

回答

plt.plot([1,2],[9,4],'gD')表示的是什么呀?

2021-11-29 20:43:52 95浏览量 回答数 1

1

回答

单级索引中iloc方法接收的参数不能使用什么?

2021-11-29 20:30:43 87浏览量 回答数 1

1

回答

数据库的NoSQL是什么?

2021-10-29 14:23:57 200浏览量 回答数 1

1

回答

数据库的设计范式第一范式是什么?

2021-10-26 22:07:43 106浏览量 回答数 1

0

回答

Iot Studio中无法关联物联网平台设备,可以关联产品

2021-04-07 09:59:26 338浏览量 回答数 0
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载