为什么要使用NoSQL

什么是NoSQL,为什么要使用NoSQL? 1 为什么用 NoSQL? 1.1 单机 MySQL 的美好时代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 在那个时候,更多的都是静态网页,动态交互类型的网站不多。 上述架构下,我们来看看数据存储的瓶颈是什么? DAL : Data Access Layer(数据访问层 – Hibernate,MyBatis) 数据量的总大小一个机器放不下时。 数据... 阅读详情

转载:http://www.infoq.com/cn/news/2011/01/nosql-why/

【编者按】NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于NoSQL方面的经验和体会。


非常荣幸能受邀在InfoQ开辟这样一个关于NoSQL的专栏,InfoQ是我非常尊重的一家技术媒体,同时我也希望借助InfoQ,在国内推动NoSQL的发展,希望跟我一样有兴趣的朋友加入进来。这次的NoSQL专栏系列将先整体介绍NoSQL,然后介绍如何把NoSQL运用到自己的项目中合适的场景中,还会适当地分析一些成功案例,希望有成功使用NoSQL经验的朋友给我提供一些线索和信息。

NoSQL概念

随着web2.0的快速发展,非关系型、分布式数据存储得到了快速的发展,它们不保证关系数据的ACID特性。NoSQL概念在2009年被提了出来。NoSQL最常见的解释是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一词最早于1998年被用于一个轻量级的关系数据库的名字。)

NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。在NoSQL概念提出之前,这些数据库就被用于各种系统当中,但是却很少用于web互联网应用。比如cdb、qdbm、bdb数据库。

传统关系数据库的瓶颈

传统的关系数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,同时也积累了大量的成功案例。在互联网领域,MySQL成为了绝对靠前的王者,毫不夸张的说,MySQL为互联网的发展做出了卓越的贡献。

在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。

到了最近10年,网站开始快速发展。火爆的论坛、博客、sns、微博逐渐引领web领域的潮流。在初期,论坛的流量其实也不大,如果你接触网络比较早,你可能还记得那个时候还有文本型存储的论坛程序,可以想象一般的论坛的流量有多大。

Memcached+MySQL

后来,随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。在这个时候,Memcached就自然的成为一个非常时尚的技术产品。

Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端。当时,如果你去面试,你说你有Memcached经验,肯定会加分的。

Mysql主从读写分离

由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。

分表分库

随着web2.0的继续高速发展,在Memcached的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但是由于在互联网几乎没有成功案例,性能也不能满足互联网的要求,只是在高可靠性上提供了非常大的保证。

MySQL的扩展性瓶颈

在互联网,大部分的MySQL都应该是IO密集型的,事实上,如果你的MySQL是个CPU密集型的话,那么很可能你的MySQL设计得有性能问题,需要优化了。大数据量高并发环境下的MySQL应用开发越来越复杂,也越来越具有技术挑战性。分表分库的规则把握都是需要经验的。虽然有像淘宝这样技术实力强大的公司开发了透明的中间件层来屏蔽开发者的复杂性,但是避免不了整个架构的复杂性。分库分表的子库到一定阶段又面临扩展问题。还有就是需求的变更,可能又需要一种新的分库方式。

MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。

关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。

NOSQL的优势

易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

大数据量,高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。

灵活的数据模型

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。

高可用

NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如Cassandra,HBase模型,通过复制模型也能实现高可用。

总结

NoSQL数据库的出现,弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。

MySQL和NoSQL都有各自的特点和使用的应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,NoSQL关注在存储上。

参考阅读

  1. NoSQL:http://nosql-database.org/
  2. NoSQL在wiki上的介绍:http://en.wikipedia.org/wiki/NoSQL
  3. NoSQL相关博客:http://nosql.mypopescu.com/
  4. NoSQL相关博客:http://blog.nosqlfan.com/
  5. 新浪微博NoSQL微群:http://q.t.sina.com.cn/127870
基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化 本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。 阅读详情

相关推荐

病理图像处理个人手札(三)WSI & MIL

1.什么是WSI? WSI全称是Whole Slide Image,也就是全视野数字切片,主要应用在病理学细胞图像领域。WSI 是利用数字扫描仪对传统的病理切片进行扫描,采集具有高分辨率的数字图像,再通过计算机将得到的碎片化图像进行无缝拼接整合,制作可视化数字图像的一项技术。与传统载玻片相比,很好地解决了传统的玻璃切片易损坏、易褪色、易丢片、检索困难的问题。 一言以蔽之,WSI是对传统载玻片进行数字化。 由于是全视野,因此它将包含多尺度的切片在一个文件上面。因此WSI将使用到金字塔模型满足其支持不同分辨率的

baiweizeng的博客 1万+

NoSQL开篇——为什么要使用NoSQL

【编者按】NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于NoSQL方面的经验和体会。\\非常荣幸能受邀在InfoQ开辟这样一个关于NoSQL的专栏,InfoQ是我非常尊重的一家技术媒体,同时我也希望借助InfoQ,在国内推动NoSQL的发展,希望跟...

cpongo5 521

STM32/GD32以太网开发避坑指南:ZLG EPORTM模块调试实战(含YT8512H配置)

本文针对STM32/GD32平台使用ZLG EPORTM模块进行以太网开发时遇到的常见问题,提供了详细的调试实战指南。重点解析了从传统PHY驱动迁移到YT8512H芯片的核心步骤,包括软件复位延时、RMII时钟配置等关键陷阱,并分享了LWIP集成与稳定性验证的实用经验,帮助开发者高效避坑。

rice5的博客 1161

RDBMS与NoSQL的区别

RDBMS的特点:关系型数据库管理系统 工具:MySQL、Oracle、SQL Server 应用:业务性数据存储系统 特点:体现数据之间的关系,支持事务,保证业务完整性和稳定性,小数据量的性能也比较好。 开发:SQL 问题:以网站后台存储为例,当并发量很大,所有的高并发全部直接请求MySQL,容易导致MySQL崩溃。 NoSQL的特点:(Not Only SQL) 非关系型数据库 工具:Redis、Hbase、MongoDB 应用:一般用于高并发高性能场景下的数据缓存或者数据存储。 特点:读写速度特

haidengfashi的博客 2063

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键arduino程序首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数:setup()函数。

DOF526570的博客 1万+

用C#完成最小二乘法拟合平面方程,再计算点到面的距离

【代码】用C#完成最小二乘法拟合平面方程,再计算点到面的距离。

MechMaster 647

HCIA-Big Data华为认证大数据工程师在线课程笔记

文章目录简介 简介 大数据是指利用常用软件工具捕获、管理和处理数据所耗时间超过可容忍时间的数据集。 对比项 数据库 大数据 数据规模 小(以MB为处理单位) 大(以GB、TB、PB为处理单位) 数据类型 单一(结构化为主) 繁多(结构化、半结构化、非结构化) 模式和数据的关系 先有模式后有数据 先有数据后有模式,模式随数据增多不断演变 处理对象 数据(池塘中的鱼) 预测(“鱼”,通过某些鱼判断其它种类的鱼是否存在) 处理工具 One size fits all No si

L小Ray想有腮 7370

uniapp - H5人脸识别认证与活体检测功能(纯前端免费方案+微信sdk人脸识别)完整源码,微信公众号网页/h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp源码

uniapp实现人脸认证,uniAPP h5手机拍照+人脸识别,免费人脸识别插件,前端人脸识别解决方案,uniapp H5人脸识别带前后摄像头,人脸识别在H5页面进行采集,微信公众号H5人脸核身,H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,uniapp人脸监测,uniapp人脸生物监测,使用uniapp开发H5人脸采集功能/人脸识别功能,uniapp项目—h5端人脸采集功能实现,uniapp vue3人脸核身,H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信

🏆 前端领域优质创作者 3809

Nosql的存储模式

主要类别: 键值数据存储模式 文档数据存储模式 列族数据存储模式 图数据存储模式 其他数据存储模式 尤其键值存储模式是Redis 数据库的基础;文档存储模式是MongoDB数据库的基础。 数据库的主要功能是存储和处理数据,由此NOSQL也不列外 一、键值数据存储模式(Redis) 键值数据库(Key Value Database)是一类轻量级结合内存处理为主的NOSQL数据库。说它轻量级,指的是它的存储数据结构特别简单,数据库系统本身规模也比较小;说它以内存为主的运行处理,设计目的是为了更快地实现对大数据的

weixin_44703894的博客 6343

STM32实现简单的智能电子相框

具体的代码案例和详细的代码实现超过5000字,无法在此篇文章中提供。但是,你可以参考STM32的官方文档和相应的图形库和多媒体库的文档,以获得更详细的实现细节和代码示例。对于硬件,我们可以选择使用STM32开发板,如STM32F4 Discovery。对于软件开发环境,我们将使用Keil MDK-ARM作为开发工具,并使用STM32CubeMX进行代码配置。在本文中,我们将使用STM32单片机实现一个简单的智能电子相框,包括显示照片、播放视频和音乐功能。接下来,我们将详细描述实现智能电子相框的步骤。

2401_85625565的博客 1006

【软件测试】- 公有云、私有云、混合云简介以及如何在公有云与私有云上分别搭建测试环境

公有云、私有云以及混合云是目前云计算领域的三种主要模式。它们之间的区别主要在于部署方式、数据访问和管理控制的不同。在阿里云或腾讯云上使用 Kubernetes 和 Docker 搭建测试环境可以提供高度的可伸缩性和灵活性。这样的环境非常适合于需要在多种配置和条件下进行测试的复杂应用。通过云服务提供的工具和服务,可以轻松管理和监控整个测试过程。在云服务上搭建测试环境涉及选择合适的云提供商、配置云资源、安装和设置所需软件等步骤。### 1. 选择云服务提供商。

weixin_46453070的博客 2342

NoSQL的特点以及与RDBMS的区别

什么是NoSQL NoSQL的特点 RDBMS和NoSQL的区别 3V+3高

qq_51447436的博客 5972

基于Harness Engineering构建AI Agent的全自动化CI_CD流水线

AI Agent的CI/CD是指对Agent的全生命周期资产(代码、Prompt、RAG知识库、模型权重、工具配置)进行持续集成、持续测试、持续发布和持续观测的自动化流程,核心目标是在保障发布质量的前提下,最大化提升Agent的迭代效率。

AI云原生与云计算技术学院 625

Redis基础——非关系型数据库(NOSQL)介绍、Redis 基础、使用Jedis 操作Redis

一、概述

Lemon 825

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

什么是NoSql?为什么要使用NoSql?

NoSQL数据库的产生就是为了解决大规模数据集合,多重数据 种类带来的挑战,尤其是大数据应用难题。

初尘屿风的博客 7494

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么使用 NoSQL:NoSQL 与 SQL 的区别

1. 概念 SQL (Structured Query Language) 数据库,指关系型数据库。主要代表:SQL Server,Oracle,MySQL,PostgreSQL。 NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB,Redis,CouchDB。 2.诞生的原因 随着互联网的不断发展,各种类型的应用层出不穷,在这个云计算的时代,对技术提出...

JinXYan的博客 399

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

有关系型数据库的情况下,为什么还要使用NOSQL(非关系型数据库)?

与关系型数据库相比,NOSQL数据库展现了更高的灵活性和扩展性优势。它无需预先设计固定的表结构,因此可以根据实际应用需求灵活地进行数据的存储和组织。

m0_54185237的博客 696

NoSQL使用详解

NoSQL数据库为处理大规模、非结构化数据提供了灵活的解决方案。它们在许多场景中具有明显优势,但也应关注其技术限制。通过理解各种NoSQL类型的特点以及应用场景,开发者可以更好地选择合适的数据库,提升开发效率和系统性能。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章NoSQL原理使用场景以及限制NoSQL数据库:从入门到实战的总结与指南。

ning的博客 1540

探索无界数据:Awesome NoSQL Guides 使用指南

探索无界数据:Awesome NoSQL Guides 使用指南 项目介绍 Awesome NoSQL Guides 是一个汇聚了大量关于使用非关系型数据库优质资源的精选列表,由 erictleung 创建并维护。此项目旨在为开发者提供一个一站式平台,深入理解NoSQL数据库的精髓,从基本概念到高级技术细节,覆盖广泛的知识点。无论是NoSQL的入门者还是寻求深化理解的资深开发者,都能在这个项目中找...

gitblog_00789的博客 786

数据库:什么是NoSQL,为什么要使用NoSQL?

引入 单机mysql的美好时代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。 那个时候,更多的是静态网页,动态交互类型的网站不多 上述架构上,我们来看看数据存储的瓶颈是什么? DAL:Data Access Layer(数据库访问层-- Hibernate,MyBatis) 数据量的总大小一个机器放不下时 数据的索引(B+ Tree)一个机器的内存放不下时 访问量(读写混合)一个实例不能承受 如果满足了上面的1 or 3 个时,只能对数据库的整体架构进行重构 memcach

OceanStar的博客 1万+

什么是NoSQL,为什么会有NoSQL,它有什么特点,它的使用场景

什么是NoSQL? NoSQL(Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型数据库。 非关系型数据库兴起: 1.对数据库高并发读写的需求 (一瞬间很多用户访问:商场网站的秒杀、火车抢票) 2.对海量数据的高效率存储和访问的需求 (类似QQ、Facebook、Twitter这种网站,每天几亿客户同时在线,每个人传5张图片…关系型数据库是很难应付的。) 3.对数据库高扩展性和高可用性的需求 (数据库横向扩展:新业务开展,需要新增相关大量数据信息。) 当前主流NoSQL

kilig 1778

Redis的介绍和使用(NoSQL、Jedis)

Redis 本次介绍以下几个内容: NoSQL介绍 Redis介绍 Jedis的API 使用工具类来连接Redis NoSQL介绍 NoSQL概念 Not Only SQL:不仅仅是SQL,指的就是非关系型数据库,它是关系型数据库有益的补充。最终的数据还是保存在关系型数据库中。非关系型数据库主要是提升数据库的查询速度,一般做为数据的缓存来使用。 优点 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 速度快:nos

YINJOER的博客 329
上一篇: IOS-本地存储-NSUserDefaults
下一篇: Golang-interface(一 基本使用)
张哲BJUT
博客等级 码龄15年 151粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值