zoukankan      html  css  js  c++  java
  • NoSQL概览

    1. Why NoSQL

    1.1 单机版本

    前提:网站访问量不大的时候,单机版的数据库足够

    思考(应用瓶颈),出现如下三种情况之一,架构必须要升级:

     1. 数据量太大,单个数据库无法存放

     2. 数据索引(单表数据量大于300W,一定要建立索引)索引太大内存无法存放;

     3. 访问量(读写混写)单个数据库扛不住峰值

    1.2 缓存&读写分离版本 

     Memcached(缓存)+ MySQL + 垂直拆分(读写分离)

     分析发展过程:优化数据结构和索引==>文件缓存(IO)==>Memcache

     1. 早期在没有MyCat等数据库中间件的时候,3个MySQL实例会有数据同步的问题,可以同时冗余三分一模一样的数据

     2. 引入另外一种策略(读写分离),3个实例:一个负责写操作,两外两个负责读,并增加同步机制;

     3. 针对频查询的数据,增加缓存机制,减轻数据库压力

    1.3 分库分表&集群版本 

     分库分表 + 水平拆分(MySQL集群)

     早期MyISM:表锁,查询表中的一条记录会锁住整张表,效率低下,高并发下会出现严重的锁问题

     转战Innodb:查询时行锁,锁一行数据

     分库分表解决写的压力,分表(根据不同的字段拆分大表)

    1.4 SQL瓶颈

     如今的时代

     1.定位+音乐+热榜+图片数据的存储不适用于关系型MySQL数据库,效率低下 ===>NoSQL

     2.大数据量的IO下,表结构几乎无法修改

    2. What‘s NoSQL

     2.1 NoSQL分类&特点

    ## NoSQL四大分类:

     1.KV键值对:Redis、Memcache

     2.文档型数据库:MongoDB、ConthDB

     3.列存储数据库:HBase、分布式文件系统

     4.图数据库:Neo4j、InfoGrid A*,最短路径算法

    ## NoSQL特点:

     1. 方便扩展(数据之间没有关系)

     2. 大数据量,高性能(Redis一秒写8W次,一秒读11W)

     3. 数据类型多样,不需要设计数据库

     2.2 RDBMS和NoSQL区别

    SQL

    • ​ 数据和关系维护在单独的表中
    • ​ 数据定义语言
    • ​ 严格的一致性
    • ​ 基础的事务

    NoSQL

    • ​ 键值对存储数据、列存储、文档存储、图形数据库
    • ​ 最终一致性
    • ​ CAP定理和BASE理论
    • ​ 保证三高特性【高性能,高可用,高可扩展】

    3. 拓展

     大数据时代的3V(描述问题):海量,多样,实时

     大数据时代的3高(程序要求):高并发高可拓(可随时拓展集群)、高性能(保证用户体验和性能)

     实际项目:NoSQL+RDBMS配合使用

  • 相关阅读:
    数据结构:关于重建二叉树的三种思路
    操作系统:进程调度算法详解之FCFS和SPF篇
    Java反射机制浅析
    数据挖掘:基于TF-IDF算法的数据集选取优化
    RC隔离 更新where条件列 没有索引的情况
    RR区间锁 不是唯一索引,即使区间内没值,也锁
    If one session has a shared or exclusive lock on record R in an index, another session cannot insert
    RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读
    使用next-key locks 用于搜索和索引扫描,可以防止幻读
    Gap Locks 区间锁
  • 原文地址:https://www.cnblogs.com/oxygenG/p/13781523.html
Copyright © 2011-2022 走看看