Atitit nosql的概念与attilax的理解 目录 1. 常见的nosql 二、Redis,Memcache,MongoDb的特点 1 HBase 1 2. Nosql的核心nosql 1

Atitit nosql的概念与attilax的理解

 

目录

1. 常见的nosql 二、Redis,Memcache,MongoDb的特点 1  HBase 1

2. Nosql的核心nosql 1

3. Sql的特点 1

4. 为什么性能高 2

4.1. 主要简化结构 2

4.2. 去掉了sql引擎 2

4.3. 事务引擎   只保留了存储引擎 2

4.4. 简化的索引 2

4.5. 并发控制机制简化 2

4.6. 动态还是静态的数据结构。 2

 

  1. 常见的nosql 二、Redis,Memcache,MongoDb的特点 1  HBase
  2. Nosql的核心nosql

 

  1. Sql的特点

Sql 比cript层次更高,4gl。。

脚本语言本身信念比较差性能

Sql vm  优化也比较懒 没有标准化所有优化不力,就像js v8 vm以前。。。

 

 

但换来的就是性能比较差了,因为没有充分利用不同平台的特性,所有平台都是一样。往往不同平台的性能跟虚拟机还是有很大关系的。 
不说了,感觉说了一堆的废话。总结一下就是脚本语言是更高层的语言,并不是更高级的语言。

 

 

  1. 为什么性能高 
    1. 主要简化结构
    2. 去掉了sql引擎
    3. 事务引擎   只保留了存储引擎
    4. 简化的索引 
    5. 并发控制机制简化
    6. 动态还是静态的数据结构。

 

 

关系型数据库需要在存储引擎层面支持Join,而NoSQL系统一般根据应用来决定Join实现的方式。举个例子,有两张表:用户表和商品表,每个用户下可能有若干个商品,用户表的主键为<user_id, item_id>,用户和商品的关联属性存放在用户表中,商品表的主键为item_id,商品属性包括商品名,商品URL,等等。假设应用需要查询一个用户的所有商品并显示商品的详细信息,普通的做法是先从用户表查找指定用户的所有item_id,然后对每个item_id去商品表查询详细信息,即执行一次数据库Join操作,这必然带来了很多的磁盘随机读,并且由于Join带来的随机读的局部性不好,缓存的效果往往也是有限的。在NoSQL系统中,我们往往可以将用户表和商品表集成到一张宽表中,这样虽然冗余存储了商品的详细信息,却换来了查询的高效。

关系型数据库的性能瓶颈往往不在SQL语句解析上,而是在于需要支持完备的SQL特性。互联网公司面临的问题是应用对性能和可扩展性要求很高,并且DBA和开发工程师水平比较高,可以通过牺牲一些接口友好性来换取更好的性能。NoSQL系统的一些设计,比如通过宽表实现Join操作,互联网公司的DBA和开发工程师也做过,NOSQL系统只是加强了这种约束。从长远来看,可以总结一套约束集合,并且定义一个SQL子集,只需要支持这个SQL子集就可以在不牺牲可扩展性的前提下支持比如90%以上的互联网应用。我想,NoSQL技术发展到这一步的时候就算是比较成熟了,这也是我们最终想做的事情。我们在设计和使用NoSQL系统的时候也可以适当转化一下思维,如下:

1. 更大的数据量。很多人在使用MySQL的过程遇到记录条数超过一定值,比如2000W的时候,数据库性能开始下降,这个值的得出往往需要经过大量的测试。然而,大多数的NoSQL系统可扩展性都比较好,能够支持更大的数据量,因此也可以采用一些空间换时间的做法,比如通过宽表的方式实现Join。

2. 性能预估更加容易。关系型数据库由于复杂的并发控制,insert buffer及类似page cache的读写优化机制,性能估算相对较难,很多时候需要凭借经验或者经过测试才能得出系统的性能。然后,NOSQL系统由于存储引擎实现,并发控制机制等相对简单,可以通过硬件的性能指标在系统设计之处大致预估系统的性能,性能预估可操作性相对更强。

 

 

 

为什么要从关系型数据库转向NoSQL -- 简明现代魔法.html

 

原文地址:https://www.cnblogs.com/attilax/p/15197540.html