首页 程序笔记 什么是NoSql?

什么是NoSql?

一、为什么要有NoSql

关系型数据库在三个方面存在不足,或者说,比不上NoSQL:

1、大量数据的写入处理

这里说的关系型数据库不擅长大量数据写入,并不是说关系型数据库在进行大批量数据插入的时候,比不上NoSql快,而是说,关系型数据库不擅长将这么多的数据写入到分布式服务器里面去!因为大量的数据,往往意味着不可能只存在一台服务器上,应该是分布式的,分散地存储在多台服务器上。而关系型数据库,因为着重表与表之间的关联,需要将所有表放在同一台服务器中,所以有人(淘宝的数据库专家)说,目前的关系型数据库本质上是单机系统。而NoSql因为表之间并无关联,因此是天然适应分布式的,分布式写入,当然要比关系型数据库强。

好比关系型数据库,为了应付大量的数据存储,由一台服务器分为两台服务器,那么就有两种方案:

1)二元数据库

两台服务器的表都一样,写入的时候,可以将数据分成两份,每台写一半,然后再互相更新,同步。那么同步之前,有一致性问题。

2)数据库分割

将一部分表放在服务器A,另一部分表放在服务器B。同步问题是没有了,但如果这些表要关联查找呢?大概只能在应用程序层面进行了。

看上去,这两种方案都很折腾。

2、对存在大量数据的表做索引或进行表结构变更

关系型数据库的表结构很严谨,对有数据的表做表结构变更,或者索引,那么会有一个锁定的问题,数据越多,锁定问题越严重。如果是一个使用中的生产数据库,也许是不可以接受的。

而NoSql,因为其设计和结构不同于关系型数据库,比如mongoDB,文档型,每一条记录都是一个文档,文档里存什么都可以,不存在着所谓固定的文档格式,也就不存在什么表结构变更的问题(MongoDB没有所谓表结构)。关系型数据库,表结构变更,程序和数据库都要改;对MongoDB,改程序就可以了。

至于索引,我还尚不清楚NoSql的索引原理。但如果是键值对型NoSql,则索引都是KEY,没有必要进行变更?

3、没有join的简单查询快速返回结果

查询是关系型数据库的强项,但如果不涉及到join的话,其实NoSql会比它更快?

参考资料:

http://kb.cnblogs.com/page/95676/

二、NoSql的分类

根据数据库的存储种类和特点,可以分为:

1、键值对

代表:memcached,Redis

2、文档型

以mongoDB为代表。比对关系型数据库,集合可看成表,文档可看成记录。每一条记录,都是一个文档。

3、列存储

HBase

4、图存储,对象存储,XML等等

三、如何应用NoSql

NoSql天然分布式,特别有利于数据分散存储,易扩展,高可用,高性能,但不支持事务,如果能与关系型数据库搭配使用,可形成互补。

NoSql的使用方式,大致可分为:

1、以NoSql纯用作内存管理

比如 Redis,临时性或持久性键值存储,性能更超越大名鼎鼎的memcached。

2、以关系型数据库为辅,NoSql为主

以NoSql为数据源,将数据写入NoSql,然后通过复制/同步机制,再将数据同步到关系型数据库里。

好处是简单,灵活,高性能,易扩展。

缺点是有数据同步问题,且技术要求高,因为NoSql缺乏容易使用的复制同步接口。

3、以关系型数据库为主,NoSql为辅

1)NoSql作为镜像

数据同时写入关系型数据库和NoSql,NoSql数据库主要用于读取。这样实现读写分离,可以利用NoSql的高性能来应付大量的查询。

2)数据拆分存储到关系型数据库和NoSql数据库

比如,关系型数据库只存储需要查询的小字段,NoSQL存储所有数据。

这种架构模式把RDBMS和NoSQL的作用进行了融合,各司其职,让关系型数据库专门负责处理擅长的关系存储,NoSQL作为数据的存储。优点是

节省了主数据库(关系型数据库)的IO开销,有利于主数据库的备份和恢复,也使整个架构的性能、扩展性都得到提升。

站心网

一、为什么要有NoSql 关系型数据库在三个方面存在不足,或者说,比不上NoSQL: 1、大量数据的写入处理 ..

为您推荐

.NET 主程序的.dll.config文件有什么用?

.dll.config 文件通常是在开发过程中自动生成的,它的主要作用是为某个类库(.dll 文件)提供一个独立的配置文件,以便开发者可以为该类库单独定义或测试配置项。以下是生成 .dll.config 文件的原因和机制:1. 配置..

CPU、GPU 和 TPU 之间有什么区别?

什么是 CPU、GPU 和 TPU?它们都是用于计算任务的处理器芯片。可以把你的大脑想象成一台计算机,能够完成诸如阅读书籍或解决数学问题的任务。每一项活动都类似于一个计算任务。例如,当你用手机拍照、发送短信或打开..

.NET9 F#有什么新特性?

F# 9 的新特性简介F# 9 是 .NET 9 的一部分,带来了多项增强功能,旨在提升开发效率和语言特性的一致性。这些改进不仅为现有的 F# 开发者提供了更强大的工具,也使新手更容易上手。以下是主要特性概览:1. 改进的类..

尤雨溪的VoidZero到底是什么?

尤雨溪创立的VoidZero是一家致力于打造下一代JavaScript工具链的公司,其核心目的是解决当前JavaScript开发工具在性能和效率上的痛点。这个工具链的目标包括提高速度、减少重复处理,并用统一的架构简化开发者的操作..

什么是.NET渐进式Web应用(PWA)

.NET 渐进式 Web 应用(PWA,Progressive Web Apps)是一种结合了 Web 应用的跨平台性和本地应用体验的应用程序。通过 PWA 技术,.NET 开发者可以使用 Blazor 和 WebAssembly 创建 Web 应用,支持在各种设备和操作系..

.NET9在ASP.NET MVC有什么更新?

在.NET 9 中,ASP.NET Core MVC 和其他 ASP.NET 功能进行了多项增强,以改善开发者的体验和应用性能:静态文件处理和缓存优化:ASP.NET Core MVC 现在支持静态文件的“指纹化”处理,发布时会生成包含唯一..

工作这么多年,你能向新人解释清到底什么是面向对象编程吗?

面向对象编程想必大家都耳熟能详,但是写了这么多代码你对面向对象有清晰的认识吗?来看看这几个问题:到底什么是面向对象编程?和面向过程编程有什么区别?什么又称为面向对象语言、面向过程语言?用面向对象语言写..

技术实力的本质是什么?

背景今天,我们来讨论一个问题:技术实力的本质究竟是什么?在工作中,你可能会遇到,为什么他的实力不如我,他却可以晋升?在面试中,你可能会遇到,我把系统性能优化了10倍,为什么面试官还是看不上我?为什么?到..

什么是VoidZero?Vue和Vite之父尤雨溪成立的技术公司

VoidZero是一家由Vue和Vite之父尤雨溪成立的技术公司,主要致力于解决JavaScript工具链的碎片化、依赖复杂以及性能瓶颈问题,通过提供一个统一、高性能的开发工具链来改善开发者的开发体验。优点分析统一性:VoidZer..

CLS 问题:超过 0.1(桌面设备) 是什么意思?

在网页设计和开发中,CLS(Cumulative Layout Shift)是指页面布局的累计偏移量。当一个用户与页面互动时,如果页面的某些元素突然改变位置或大小,导致整个布局发生偏移,就会产生布局偏移。这种偏移可能会影响用户..

什么是...rest?收集剩余参数

在 JavaScript 中,...rest 参数是一种特殊的语法,用于收集函数定义中所有剩余的参数,并将它们作为一个数组传递给函数。换句话说,它可以将不定数量的参数打包成一个数组。语法:function myFunction(...args) {//..

什么是.NET云原生应用程序?

.NET云原生应用程序是基于.NET技术栈构建的,专为云环境设计、部署和运行的应用程序。.NET云原生应用程序不仅充分利用云计算的优势,如弹性、可伸缩性和高可用性,还能通过现代云原生技术如容器化、微服务架构和自动..

jwt是什么?.NET Core API如何使用JwtBearer验证

JWT是JSON Web Token的缩写,是一种开放标准(RFC 7519),用于在网络上以安全和可靠的方式传输信息。它是一种被广泛使用的跨域身份验证解决方案,可以将用户信息、访问权限等加密后存储在Token中,然后通过网络传输..

什么是.NET框架?它的主要组成部分是什么?

.NET框架是由微软公司开发的一个软件开发平台,用于构建和运行各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和服务。它提供了一个统一的环境,使开发人员能够使用多种编程语言(如C#、VB.NET和F..

什么是微服务架构?它与单体应用程序架构有什么区别?如何在.NET中实现微服务架构?

微服务架构是一种软件架构风格,通过将应用程序拆分为一组小型、自治的服务来构建应用程序。每个服务都专注于解决特定的业务功能,并通过轻量级的通信机制进行交互。这些服务可以独立开发、部署和扩展,可以使用不同..

谷歌的AMP网页和AMP自动广告是什么?

最近在玩谷歌广告Google Adsense,看到谷歌有个AMP自动广告,查看了他的介绍觉得很有意思。谷歌广告联盟的官方介绍是这样的:AMP 自动广告会自动将 AdSense 自动广告放置在您的 AMP 网页上。在添加 AMP 自动脚本和广..

什么是Kafka?Kafka架构原理

在《财富》 500强公司中,超过三分之一的公司使用Kafka。这些公司包括排名前十的旅行社,排名前十的银行中有七个,排名前十的保险公司中有八个,排名前十的电信公司中有九个,等等。LinkedIn,Microsoft和Netflix每..

程序员如何量化炒股?原理是什么?

作为程序员,可以运用编程技能和量化分析来帮助量化炒股。量化炒股有哪些步骤和方法?收集数据:需要收集有关股票市场的数据。可以从各种来源获取这些数据,如Yahoo财经、谷歌财经、股票交易所等。可以使用Python等..

量化炒股的原理是什么?量化交易策略有哪些?

量化炒股是一种利用计算机程序和数学模型来进行投资决策的方法。它的原理是通过分析历史市场数据、价格走势、技术指标等多种因素,构建数学模型,用以预测未来股市走势和行情。这些模型能够自动执行交易,以实现更高..

什么是面向接口编程?

面向接口编程(Interface-Oriented Programming)是一种编程范式,它强调使用接口来定义对象之间的契约或合约,而不是依赖于具体的实现细节。在面向接口编程中,程序的设计和实现侧重于接口定义和使用,而不是具体的..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制