热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析NoSQL数据库:键值对、文档、列式存储与图数据库的应用与特点

本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(NotOnlySQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。

1.NoSql是什么?

    Nosql = not only sql,意即“不仅仅是sql”,泛指非关系型数据库。这些类型的数据存储不需要固定的模式(当然也有固定的模式),无需多余的操作就可以横向扩展。

    说到非关系型数据库,就要简单的介绍一下关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,我们平常使用的数据库,像MySQL,Oracle,SQL Server等都是传统的关系型数据库。

2.NoSql数据类型

    NoSql中的数据是使用聚合模型来进行处理的。

    聚合模型主要分为:KV键值对,BSON,列族,图形等几种方式

    KV键值对:就是我们平常使用的map那样的存储模式

    BSON:在MongoDB中常用的一种数据类型,是一种类json的一种二进制形式的存储格式,简称binary json,它和json一样,支持内嵌的文档对象和数组对象

    列族:按列存储数据。最大的特点是方便存储结构和半结构化数据,方便做数据压缩,对针对某一列或者是某几列的查询有非常大的io优势

    图形:不是放图形的,放的是关系,比如:朋友圈社交网络,广告推荐系统等,专注于构建关系图谱

3.NoSql数据库的分类


  • KV键值对
       临时性键值存储:Memcached,Redis
       永久性键值存储:ROMA,Redis 
    应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等
    数据模型:Key指向Value的键值对,通常用HashTable来实现
    优点:查找速度快
    缺点:数据无结构化,通常只被当做字符串或者是二进制数据
  • 面向文档的数据库:MongoDB,CouchDB
        Mongodb是一个基于分布式文件存储的数据库,由c++语言编写。 为web应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据中功能最丰富,最像关系数据库的
    应用场景:WEB应用(与key-value类似,value是结构化的,不同的是数据库能够了解到value的内容)
    数据模型:Key-Value对应的键值对,Value是结构化的数据
    优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
    缺点:查询性能不高,而且缺乏统一的查询语法
  • 面向列的数据库:Cassandra,HBase
    应用场景:分布式的文件系统
    数据模型:以列簇式存储,将一列数据存储在一起
    优点:查找速度快,可扩展性强,更容易进行分布式扩展
    缺点:功能相对局限
  • 面向图形的数据库:Neo4J,InfoGrid
    应用场景:社交网络,推荐系统等,专注于构建关系图谱
    数据模型:图结构
    优点:利用图结构相关算法。比如最短路径寻址,N度关系查找等等。
    缺点:很多时候要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

4.NoSql的优点

    易扩展:nosql数据库种类繁多,但是一个共同的特点都是去掉关系型数据库的关系型特性数据之间无关系,这样就非常容易扩展,也无形之间,在架构层面上带来了可扩展的能力
    大数据量高性能:Nosql数据库都具有非常高的读写能力,尤其在大数据量下,同样表现优秀,这得益于它的无关系型,数据库的结构简单,一般mysql使用query cache,每次表的更新cache就会失效,这是一种大粒度的cache,在针对web2.0的交互频繁的应用,cache性能不高,而nosql的cache是记录级的,是一种细粒度的cache,所以nosql在这个层面上来说就要性能高很多了

    多样灵活的数据模型:Nosql无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删字段是一件非常麻烦的事情,如果是非常大数据量的表,增加字段简直就是一个噩梦

既然Oracle,MySQL等传统的关系型数据库非常成熟并且已经大规模的商用,为什么还要用NoSql呢?
    主要是由于随着互联网的发展,数据量越来越大,对性能的要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现各种各样的NoSql产品,NoSql的根本性优势在于云计算时代,简单,易于大规模分布式扩展,并且读写性能极高。
    看下两者的对比:


参考:Redis相关学习视频,Mycat_V1.6.0.pdf




推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
author-avatar
圊渘湜壞亾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有