nosql是个什么东西?
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。简单来说就是是一项全新的数据库革命性运动。现在听得比较多的NoSQL数据库有Redis、MongoDB、HBase等。
nosql为什么会出现?
平时大家见到或听到的数据库类型如MySQL、Oracle 都是关系型数据库,那么提出 NoSQL这个非关系型数据库当然就是为了弥补关系型数据库的一些缺点。
那么关系型数据库到底有那些缺点呢?
①High performance - 高并发时的性能问题,当数据库处于高负荷运转时,关系型数据库的性能会遇到瓶颈,这个时候的数据库操作会变得更加的费时,虽然可以使用memcached解决,但是也会带来hash不一致等问题.例如:web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
②2、Huge Storage - 对海量数据的高效率存储和访问的需求。对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统
③High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移.
那么非关系型数据库到底有那些优势呢?
NoSQL的优势就在于解决以上问题,首先当数据之间解除关系依赖后,NoSQL的数据库可以轻易地部署在分布式系统上,这样通过多台机器可以分担单一机器的高负荷,解决高负荷下的性能瓶颈问题。同时,由于数据之间无关系,所以可以随时增加或删除字段。还有,就是因为结构简单,它的反应能力比关系型数据库快多了。
总的来说,NoSQL有着高扩展性、分布式计算、低成本、架构的灵活性、半结构化数据等特点。比如在存储微博信息这种场景下,就是非常适合使用NoSQL数据库。
NoSQL 没毛病,为什么 MySQL 还是“王”?
NoSQL 出现时,许多人认为关系型数据库已进入死亡倒计时,MySQL 将退出舞台。然而,在目前的各种数据库榜单中,MySQL 依然保持着领先地位。更令人惊讶的是,虽然甲骨文的受欢迎程度在不断下降,但 MySQL 保持着稳定。 为什么?而且前面看了一些阿里的讲座,阿里的技术大佬说阿里用的就是MySQL数据库。而且相关可靠数据显示目前国内的科技公司几乎都在使用MySQL。
不过 MongoDB 并没有推翻 MySQL,也没有挤垮 Apache Cassandra 或 Apache Hadoop,它们各自有拿得出手的专属使用案例。部分原因源于当今大多数大数据的性质:本质上仍然是事务性的。
这恰恰也是 MySQL 受欢迎的核心:它是最适合广泛数据库从业人员技能的数据库。他们甚至可以利用从 Oracle、IBM DB2 和 Microsoft SQL Server 学习到的东西,将其应用到这个无处不在、免费和开源的数据库。
Morgan所说:“NoSQL负责缩放,像我们的生活一样,有时会大吃一顿,有时却要节食减肥,所以只有严格的纪律和谨慎的管理才能适用。”其次,拥有足够多的用例,开发人员才有动力尝试,社区对于DBA来说也是很大的影响因素。Server Density CEO David Mytton 强调:我们都想要RDS这样的服务,Aurora解决了MySQL的很多痛点。
这也就是为什么MySQL在面世21年后(1996年MySQL 1.0发布)成为地球上最受欢迎的数据库。它没有像Oracle一样贴上“企业级”的标签,也没有像NoSQL以“定制化”为标签来进行营销,但它就是成为了现代开发者的首选数据库。
“免费”、“强大”、“成熟”
这三点就足以使得MySQL站在数据库领域的顶峰,笑傲江湖。
分布式系统介绍:
分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件。
分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。
因此,分布式系统每个节点一般不采用高性能的服务器,而是使用性能相对一般的普通PC服务器。提升分布式系统的整体性能是通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)实现。
分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。比如移动互联网2C应用,随着互联网企业的业务规模不断增大,业务变得越来越复杂,并发用户请求越来越多,要处理的数据也越来越多,这个时候企业级应用平台必须能够适应这些变化,支持高并发访问和海量数据处理。分布式系统有良好的可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求增加。