NoSql数据库使用心得

article/2025/10/3 11:20:12

http://bbs.chinaunix.net/thread-4168061-1-1.html

NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚。但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题?

这个疑惑非常大,为此我看了很多分析文章,但却总感觉是隔靴搔痒。为了一探究竟,半年前我决定用Mongodb这个著名的NoSql数据库做个产品试试。只有在真实的使用环境中才能得到最贴切的感受。
一晃眼,半年过去了,现在我能用亲身的体会来谈谈NoSql数据库存在的理由和试图解决的问题了。就像所有的哲学思考都来源于对日常活动的观察一样,我们也从最基本的东西说起吧。
来看这样一个业务要求,用户可以为一本书打分,并且写评论。熟悉数据库结构设计的人看到这一句话脑子里应该瞬间就会出现下面这样的表结构(我这里就不太讲究了,大家意会即可):

用户信息表,书籍信息表,用户为书籍打分信息表,评论表。
现在假想要做一个显示评论内容的页面,上面会有用户信息和相关书籍的信息,想必大家脑子里已经出现各种select和join了吧。
如果用NoSql还是同样的设计的话,那你会惊喜的发现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://chatgpt.dhexx.cn/article/lcjAwWaL.shtml

相关文章

NoSQL - 学习/实践

1.应用场景 主要用于学习NoSQL数据库, 与关系型数据库的区别, 以及各自的原理实现,应用场景。 2.学习/操作 1.文档阅读 What is NoSQL? | Nonrelational Databases, Flexible Schema Data Models | AWS Relational (SQL) or NoSQL? - Ama…

NoSQL数据库入门

为什么80%的码农都做不了架构师&#xff1f;>>> NoSQL数据库入门 本书是一本NoSQL入门书&#xff0c;从最基本的NoSQL发展史开始&#xff0c;介绍了memcached、Tokyo、Redis和MongoDB的等NoSQL数据库的使用背景、优缺点和具体应用案例...更多<< 转载于:h…

SQL与NoSQL数据库入门基础知识详解

这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者。有自学hadoop的&#xff0c;有报名培训班学习的。所有接触过hadoop的人都知道&#xff0c;单独搭建hadoop里每个组建都需要运行环境、修改配置文件测试等过程。对于我们这些入门级新手来说简直每个都是坑。国内的发行…

大数据开发学习:NoSQL数据库入门

大数据处理&#xff0c;涉及到从数据获取到数据存储、数据计算的诸多环节&#xff0c;各个环节需要解决的问题不同&#xff0c;相关岗位要求的技能也不同。在数据存储阶段&#xff0c;对数据库选型是非常重要的一项工作。今天的大数据开发学习分享&#xff0c;我们就来聊聊NoSQ…

Nosql复习笔记,教材《NoSQL数据库入门与实践》

Nosql复习笔记 目录 一、NoSQL数据库的主要技术特点有以下几种。 二、单机的局限性 三、服务器的纵横扩充 四、帽子定理CAP 五、BASE:基本可用(BA)、 软状态(S)、最终一致性(E) 六、键值数据库实现基本原理 七、键值数据库存储结构基本要素 八、键值存储特点&#xff…

NoSQL数据库入门概述

关系型数据库与NoSql数据库 什么是NoSQL Not Only SQL&#xff0c;其含义是&#xff1a;适合关系型数据库的时候就是用关系型数据库&#xff0c;不适用的时候也没必要非得使用关系型数据库不可&#xff0c;可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足&am…

MongoDB(NoSQL)数据库入门及基本操作

文章目录 一、NoSQL 简介1.1 NoSQL的优点1.2 NoSQL的缺点1.3 NoSQL的分类 二、MongoDB2.0 demo示例2.1 install and connect mongoose2.2 基本指令 一、NoSQL 简介 NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"&#xff0c;是非关系型的数据库。 NoS…

NoSql入门

一.概念&#xff1a; NoSQL(NOSQL Not Only SQL)&#xff0c;意即“不仅仅是SQL”&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据车在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从…

大数据开发——Hive实战案例

文章目录 1. 创建表结构1.1 视频表结构1.2 用户表结构 2. 准备工作2.1 创建临时表2.2 创建最终使用表2.3 对创建表进行解读 3. 业务分析 1. 创建表结构 1.1 视频表结构 1.2 用户表结构 2. 准备工作 2.1 创建临时表 由于使用的是orc方式进行存储&#xff0c;所以我们需要建立…

【大数据处理技术】实验4

安装MongoDB&#xff08;Ubuntu版本&#xff1a;22.04 LTS&#xff09; 0.查看Ubuntu版本 命令&#xff1a;lsb_release -a 1.使用Ubuntu命令安装 &#xff08;1&#xff09;更新系统包&#xff1a; sudo apt update&#xff08;可选&#xff09; sudo apt upgrade&#x…

大数据处理的五大关键技术及其应用

数据处理是对纷繁复杂的海量数据价值的提炼,而其中最有价值的地方在于预测性分析,即可以通过数据可视化、统计模式识别、数据描述等数据挖掘形式帮助数据科学家更好的理解数据,根据数据挖掘的结果得出预测性决策。其中主要工作环节包括:   大数据采集、大数据预处理、大数…

大数据技术原理与应用----大数据处理架构Hadoop

一、Hadoop简介及其应用现状 1、Hadoop简介 Hadoop&#xff08;是大数据技术的集合体&#xff0c;一整套解决方案的统称&#xff09;是由Java开发的&#xff0c;支持多种编程语言。 2、Hadoop的理论基础 &#xff08;1&#xff09;Hadoop的两大核心 ①分布式文件系统&#x…

浅析大数据分析技术

随着大数据时代的到来&#xff0c;在大数据观念不断提出的今天&#xff0c;加强数据大数据挖掘及时的应用已成为大势所趋。大数据分析处理是对纷繁复杂的海量数据价值的提炼&#xff0c;而其中最有价值的地方在于预测性分析&#xff0c;即可以通过数据可视化、统计模式识别、数…

大数据系统及分析技术

大数据 IDC将大数据技术定义为&#xff1a;“为更经济地从高频率的、大容量的、不同结构和类型的数据中获取价值而设计的新一代架构和技术。” 大数据的关键在于种类繁多、数量庞大、使用传统的数据分析工具无法在可容忍的时间内处理相应的数据。大数据分析主要涉及两个不同的领…

【大数据处理技术】实验6

目录 1. 安装pig大数据分析工具 1.1 pig介绍 1.1.1 Pig简介 1.1.2 Apache Pig 与 MapReduce 1.1.3 Apache Pig 与 SQL 1.1.4 Apache Pig 与 Hive 1.1.5 Apache Pig的应用 1.2 pig下载及安装 1.3 配置环境变量 1.4 pig启动 2. pig工具使用方法 2.1 pig工具简单解析 …

【大数据处理技术】实验3

一、安装Eclipse 1.下载Eclipse&#xff08;我使用Xftp传输的&#xff0c;大家可以直接在虚拟机中下载&#xff09; 下载链接&#xff1a;https://www.eclipse.org/downloads/package 2.解压Eclipse 3.桌面显示Eclipse图标 在终端输入&#xff1a;cd /usr/share/application…

处理大数据需要哪些技术

大数据之所以能够从概念走向落地&#xff0c;说到底还是因为大数据处理技术的成熟&#xff0c;面对海量的数据&#xff0c;在有限的硬件条件下&#xff0c;以低成本满足大数据处理的各种实际需求。那么具体处理大数据需要哪些技术&#xff0c;今天我们来简单介绍一下大数据核心…

干货 | 大数据处理技术的总结与分析

一 、数据分析处理需求分类 1、事务型处理 在我们实际生活中&#xff0c;事务型数据处理需求非常常见&#xff0c;例如&#xff1a;淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。 这类系统数据处理特点包括以下几点&#xff1a; 一是事…

大数据技术介绍

为了方便大家梳理清楚大数据学习路线&#xff0c;本文从以下四个方面来介绍大数据技术&#xff1a; 大数据技术栈 大数据发展史 大数据应用 大数据开发岗位 一、大数据技术栈 之前有同事问我怎么转大数据开发&#xff0c;他在网上搜了一堆大数据相关的技术&#xff0c;但是不…

大数据时代:大数据处理技术及采集方法

在大数据时代&#xff0c;传统的大数据处理技术还管用吗? 大数据处理环节下的需求 大数据环节下的数据来源是非常多&#xff0c;而且类型也很多花样&#xff0c;存储和数据处理的需求量很大&#xff0c;对于数据展现也非常的高&#xff0c;并且很看重数据处理的高效性和可用…