当前位置: 首页 > news >正文

苏州网站建设丶好先生科技/百度搜索简洁版网址

苏州网站建设丶好先生科技,百度搜索简洁版网址,丛台企业做网站推广,上海网站设计工具数据库结构设计: 用户信息表,书籍信息表,用户为书籍打分信息表,评论表。 现在假想要做一个显示评论内容的页面,上面会有用户信息和相关书籍的信息,想必大家脑子里已经出现各种select和join了吧。 如果用NoS…

数据库结构设计:

image

用户信息表,书籍信息表,用户为书籍打分信息表,评论表。

现在假想要做一个显示评论内容的页面,上面会有用户信息和相关书籍的信息,想必大家脑子里已经出现各种select和join了吧。

如果用NoSql还是同样的设计的话,那你会惊喜的发现NoSql数据库的性能简直差到爆。性子火爆的估计当场就要掀桌。

 

先从最基本的设计元素说起,几乎所有的NoSql数据库都没有表(table)的概念,取而代之的是文档(document)。文档是个什么东西?Mongodb的解释,文档是一个使用JSON格式以key-value方式存储数据的结构,比如:

{ "item": "pencil", "qty": 500, "type": "no.2" }
看起来和表没什么不同嘛?咳咳,JSON是支持嵌套结构的,比如可以把书籍信息和用户打分的信息存到一起:


  "id": "123zxcrweq2", 
  "title": "雪中悍刀行", 
  "author": "烽火戏诸侯", 
  "scores": [ 
    { 
      "userid": "454zxcfwer1", 
      "nickname": "Allen", 
      "score": 3, 
    }, 
    { 
      "userid": "678zxkiou1", 
      "nickname": "Judy", 
      "score": 4, 
    } 
  ], 
}

一堆document存储到一起就叫做collection,而同一个collection里面的document可以不一样。注意,这里也是重点概念。如果切换到关系型数据库的话,相当于一张表里每一行数据的列都可以不一样。这不是乱套了吗?用不好确实会乱套的。

概念说完了,来看看面对下面这种产品要求的时候应该怎么办。产品经理说了,要在书籍信息页面看到所有评论,评论人的信息和打的分也要出现。

 

如果是关系数据库,获取数据的思路是这样的:

1. 根据书籍Id取到书籍信息。

2. 根据书籍Id取到所有评论信息。

3. 根据评论信息中的用户Id取到相关用户的信息。

4. 根据书籍Id和用户Id取到打分信息。

那在NoSql数据库中如果我们用如下结构存储数据的话……


  "id": "123zxcrweq2", 
  "title": "雪中悍刀行", 
  "author": "烽火戏诸侯", 
  "comments": [ 
    { 
      "author": { 
        "id": "454zxcfwer1", 
        "nickname": "Allen", 
        "avatarurl": "头像1.png", 
      }, 
      "score": 3, 
      "title": "书评1", 
      "content": "书评内容1", 
    }, 
    { 
      "author": { 
        "id": "454zxcfwer1", 
        "nickname": "Judy", 
        "avatarurl": "头像2.png", 
      }, 
      "score": 4, 
      "title": "书评2", 
      "content": "书评内容2" 
    } 
  ], 
}

似乎只要根据书籍Id查询一次就能得到结果了吧……明白为什么说NoSql数据库效率高了吗?一边是从四个集合中查找数据,一边是从一个集合中查找数据,这运行效率肉眼就能看出来差别了吧。

所以到这里我得到了一条设计心得,尽可能把一次展示所需的必要数据都存储到一起。这是典型的空间换时间。所幸现在的科技条件下空间的价格非常低廉,所以很划算。

根据这个设计结构,似乎也不需要事务的支持了,用户为一本书籍打分只需要在一个document里面添加数据就够了。

好,document特性的用处明白了,现在就来研究下NoSql数据库另外一条原则的用途了,还记得是什么吗?同一个collection里面的document可以不一样

还是从实际应用中来看,某日,产品经理说,书籍详细信息页面上还要显示书评的创建时间。

如果使用关系数据库该怎么办?

1. 创建一个为Review表增加”creationtime“列的sql脚本。

2. 到数据库中运行。

3. 修改相关代码和存储过程。

NoSql呢?

1. 在Comment结构实体中增加CreationTime,增加赋值代码。

没了,不需要去修改历史数据,因为?同一个collection里面的document可以不一样。那如果取到历史数据怎么办?Comment的CreationTime会被置为空。挺合理的,也不会产生什么危害。

大家都知道,互联网产品的更新速度是非常快的,经常根据用户反馈和市场情况调整产品形态,而数据结构也会经常发生变化。为了适应这种环境,如何处理历史数据就成了老大难。还记得当年看到一个DBA在设计表的时候会留出几个字段叫做”Reserved1,Reserved2……“,感觉好无厘头,浪费空间,后来随着产品功能的增加才明白这其实是经验丰富的表现。如果用NoSql就不用这么纠结了。

总结一下,就我浅薄的使用经验来看,NoSql的优点是:1. 在精心的设计下查询性能巨好。2. 数据结构弹性十足,特别适合快速发展中的产品。

另外需要提醒一下,Mongodb不支持事务,所以务必在设计的时候考虑到这一点。核心业务数据尽可能通过结构设计做到数据插入的一致性。如果实在无法达成,请立即转回去用关系数据库,否则或早或晚你一定会后悔的。

非本人创作,原文转载:http://www.cnblogs.com/AllenDang/p/3507821.html

转载于:https://www.cnblogs.com/savant/p/3518640.html

http://www.lbrq.cn/news/935101.html

相关文章:

  • 深度科技有限公司/网站搜索引擎优化主要方法
  • 装修行业 网站建设/杭州小程序建设公司
  • cc0图片素材网站/seo网站关键词排名优化公司
  • 培训网站模板免费/百度账号
  • 搜狗推广开户/哈尔滨seo推广
  • 房子设计效果图大全/单页站好做seo吗
  • 上海网站推广专员需求/黄页网络的推广软件
  • 沭阳那家做网站的/今日军事新闻视频
  • 网站建设一屏式网站/淘客推广
  • 成都科技网站建设联系电话/seo收费标准
  • 雄安专业网站建设哪家好/网络营销推广策划
  • 广州网站建设网络推广公司/网络营销人员招聘
  • wordpress 清理/安卓优化大师历史版本
  • 信阳建设网站/交换友情链接的渠道
  • 亚网站建设/千博企业网站管理系统
  • 安宁市建设厅网站/网站搜索引擎优化技术
  • 通州网站建设/企业网络营销策略分析
  • wordpress不显示引用图片/网站优化seo是什么
  • 南通网站建设知识/百度网盘云资源搜索引擎
  • 广州有哪些建站公司/新网站应该怎么做seo
  • 怎么做网站动态地图/最近的国际新闻大事
  • wordpress上传exe/苏州百度 seo
  • 鲅鱼圈网站怎么做/长沙网站开发制作
  • 如何建立公司企业网站/常德政府网站市民留言
  • wordpress 显示加载时间/seo网站优化外包
  • java门户网站开发/谷歌官网网址
  • wordpress 不用模版/搜索引擎seo优化平台
  • 深圳哪里做网站好/线上广告宣传方式有哪些
  • 个人做网站报价/最佳搜索引擎磁力
  • cms系统和网站后台系统/手游推广代理平台有哪些
  • QT笔记--》QMenu
  • 第七章:进入Redis的SET核心
  • 从结构到交互:HTML5进阶开发全解析——语义化标签、Canvas绘图与表单设计实战
  • DNS污染与劫持
  • 【Spring Boot 快速入门】三、分层解耦
  • 接口自动化测试pytest框架