精华内容
下载资源
问答
  • NoSQL

    2020-10-25 16:25:55
    NoSQL概述 NoSOL:Not Only SQL NoSQL不依赖业务逻辑方式存储,而是以简单的key-value模式存储。因此大大的增加了数据库扩展能力 不遵循SQL标准 不支持ACID(原子性、隔离性、一致性、持久性) 远超于SQL业务能力 ...

    NoSQL概述

    NoSOL:Not Only SQL
    NoSQL不依赖业务逻辑方式存储,而是以简单的key-value模式存储。因此大大的增加了数据库扩展能力
    不遵循SQL标准
    不支持ACID(原子性、隔离性、一致性、持久性)
    远超于SQL业务能力

    NoSQL适用场景

    对数据高并发的读写
    海量数据的读写
    对数据高可扩展性的

    NoSQL不适用的场景

    需要事务支持
    基于sql的结构化查询存储,处理复杂关系,需要即席查询(立即就要的查询)
    用不到SQL和用了SQL也不可以的情况可以考虑NoSQL

    NoSQL兄弟会

    Menmcached
    • 很早之前出现的NoSQL数据库
    • 数据都在内存中,一般不持久化
    • 支持简单的key-value模式
    • 一般是作为缓存数据库辅助持久化的数据库
    Redis
    • 几乎覆盖了Memecached绝大部分功能
    • 数据都在内存中、支持格式化,主要用作备份恢复e
    • 除了支持简单的key-value模式,还支持多种数据结构的存储,如:list、set、hash、zset
    • 一般是作为缓存数据库辅助持久化的数据库

    Redis

    Redis是一个开源的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

    应用场景

    1.配合关系型数据库做高速缓存
    2.拥有持久化能力,利用其多样性的数据结构存储特定的数据
    例如:

    • 最新N个数据 :通过List按自然时间顺序排序
    • 排行榜,TOP N:利用zset集合
    • 时效性的数据,例如手机验证码:Expire过期
    • 计数器、秒杀:原子性,自增方法INCR、DECR
    • 去除大量数据中的重复数据:利用set集合
    • 构建队列:利用list集合
    • 发布订阅消息系统:pub/sub模式
    安装

    1.下载安装包后放入Linux的/opt
    2.解压
    3.进入redis-3.2.5
    运行make发现错误
    解决:

    • yum install gcc
    • yum install gcc-c++

    之后make发现
    Jemalloc/jemalloc.h:没有那个文件
    解决:
    make distclean之后再 make
    继续执行make install
    进入usr/local/bin/
    ll查看命令

    • redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何(服务启动起来后执行)
    • redis-check-aof:修复有问题的AOF文件
    • redis-check-dump:修复有问题的dump.rdb文件
    • redis-sentinel:Redis集群使用
    • redis-server:Redis服务器启动命令
    • redis-cli:客户端,操作入口
      运行 redis-server
    启动

    在redis的目录下复制redis.conf到root的一个目录下,并且修改一下里面的内容

    daemonize no 改成 yes,让服务在后台启动

    之后启动方式就变得简单了

    redis-server /root/myredis/redis.conf
    

    客户端访问:
    redis -cli
    多端口:
    redis-cli -p 6379
    启动后默认进入零号库
    一共有16个库
    可以根据命令
    select 6切换

    关闭

    进入客户端关闭
    在这里插入图片描述
    进入终端关闭
    在这里插入图片描述

    Redis单线程+多路IO复用技术

    多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,就返回,否则阻塞直到超时。得到就绪状态后进行真正的操作就可以在同一个线程里执行,也可以启动线程执行(例如线程池)。
    串行 vs 多线程+锁(Menmcached) vs 单线程+多路IO复用(Redis)

    Redis和Menmcached三个区别

    Menmcached是多线程的,Redis使单线程+IO多路复用
    另外两个分别是关于持久化和支持数据结构存储

    Redis对key的操作

    查询当前库中所有键

    keys *
    

    判断某个键是否存在

    exists <key>
    

    查看键的类型

    type <key>
    

    删除某个键

    del <key>
    

    为键设置过期时间,单位为秒

    expire <key> <seconds>
    

    查看一个键还有多晒秒过期
    -1 表示永不过期,-2表示已过期

    ttl <key>
    

    查看当前数据库中的key数量

    dbsize
    

    清空当前库

    flushdb
    

    通杀全部库

    flushall
    

    Redis五大数据类型-String
    命令

    获取对应键值

    get <key>
    

    添加键值对

    set <key> <value>
    

    将给定的<value>追加到原值的末尾

    append <key> <value>
    

    获取值的长度

    strlen <keys>
    

    只有在key不存在时设置key的值

    setnx <key> <value>
    

    将key中对应键值增加1
    只能对数字值进行操作,如果为空,新增值为1

    incr <key>
    

    将key中对应键值减1
    只能对数字值进行操作,如果为空,新增值为-1

    decr <key>
    

    将key中对应键值增减,自定义步长

    incrby/decrby <key> <步长>
    

    同时设置一个或多个键值对

    mset <key1> <value1> <key2> <value2>...
    

    同时获取一个或多个value

    mset <key1> <key2>...
    

    同时设置一个或多个键值对,前提是当且仅当所有给定的key都不存在

    msetnx <key1> <value1> <key2> <value2>
    

    获取值的范围,类似java中的substring

    getrange <key> <起始位置> <结束位置>
    

    <value>覆写<key>所对象的字符串值,从<起始位置>开始

    setrange <key> <起始位置> <value>
    

    设置键的同时,设置过期时间

    setex <key> <过期时间> <value>
    

    设置了新值同时获得旧值

    getset <key> <value>
    
    原子性

    所谓原子性操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到另一种线程
    1.在单线程中,能够在单条指令中完成的操作都可以认为是“原子性操作”,因为终端只能发生于指令之间
    2.在多线程中,不能被其他线程(进程)打断的操作都叫原子操作
    Redis但命令的原子性主要得益于Redis的单线程


    Redis数据类型-List
    • 单键多值
    • Redis列表是简单的字符串链表,按照插入顺序,你可以添加一个元素从列表头部(左边)到列表尾部(右边)
    • 它的底层是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间节点的性能较差
    命令

    从左面/右面插入一个或多个值

    lpush/rpush <key> <value1> <value2>
    

    从左面/右面吐出一个值
    值在健在,值亡键亡

    lpop/rpop <key>
    

    <key1> 列表右边吐出一个值,插入到<key2>左边

    ropolpush <key1> <key2>
    

    按照索引下标获得元素(从左到右)

    lrange <key> <start> <stop>
    

    按照索引下标获得元素

    lindex<key> <index>
    

    获得列表长度

    llen<key>
    

    <value>前插入<newvalue>

    linsert <key> before <value> <newvalue>
    

    从左面删除n个value(从左到右)

    lrem <key> <n> <value>
    

    Redis数据类型-set

    Redis set对外提供的功能与list类似,是一个列表功能,特殊之处在于set是可以自动重排,当你需要存储一个列表数据,又不希望出现重复数据,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,而list并不提供。
    Redis set是String类型的无序集合,**它的底层是一个value为null的hash表,**所以,添加、查找、删除的复杂度都为O(1)。

    命令:

    将一个或多个member元素加入到集合key中,已经存在于集合的member元素将会被忽略。

    SADD <key> <value1> <value2>
    

    获取该集合所有值

    SMEMBERS <key>
    

    判断集合<key>是否含该<value>值,如果有返回1,否则返回0

     SISMEMBER <key> <value>
    

    返回该集合元素个数

    scard <key>
    

    删除集合中某些元素

    srem <key> <value1> <value2>
    

    随机从该集合中吐出一个值(吐出后即从该集合中删除)

    spop <key>
    

    随机从该集合中取出n个元素(不会从该集合中删除)

    srandmenmber <key> <n>
    

    返回两个集合交集元素

    sinter <key1> <key2>
    

    返回两个集合并集元素

    sunion <key1> <key2>
    

    返回两个集合的差集

    sdiff <keyy1> <key2>
    
    Redis 数据类型-hash

    Redis hash 是一个键值对集合
    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象
    类似于Java中的Map<String ,Object >

    假设用户ID为查找的key,存储的value用户对象包含姓名、年龄、升入等信息,如果用普通的key-value结构存储,主要有两种形式:
    第一种
    在这里插入图片描述
    每次修改用户的某个属性(年龄等等),需要先序列化修改好后再反序列化,开销较大

    第二种
    在这里插入图片描述
    这会造成用户ID数据冗余
    如果我们用hash来存储
    在这里插入图片描述
    相当于KEY 存储用户ID,key存储属性标签,就可以操作对应属性数据,既不需要重读存储数据,也不会带来序列化和并发修改控制的问题

    命令

    <key>集合中的<filed>键赋值<value>

    hset <key> <field> <value>
    

    <key>集合<field>取出<value>

    hget <key> <field>
    

    批量设置hash的值

    hmset <key1> <field1> <value1> <field2> <value2>
    

    查看哈希表key中,给定域field是否存在

    hexists key <field>
    

    列出该hash集合所有field

    hkeys <key>
    

    列出该hash集合所有的value

    hvals <key>
    

    为哈希表中的域field的值加上增量increment

    hincrby <key> <field> <increment>
    

    将哈希表key中的域field的值设置为value,当且仅当域field不存在

    hsetnx <key> <field> <value>
    
    Redis数据类型-zset

    Redis中有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合,不同之处在于有序集合的所有成员都关联了一个评分(score),这个评分被用来按照从最低分到最高分的方式排序结合中的成员,集合成员是唯一的,但是评分可以充分。
    因为元素是有序的,所以你也可以很快的根据评分或者次序来获取一个范围的元素,访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的只能列表

    命令

    将一个或多个member元素及其score值加入到有序集key中

    zadd <key> <score1> <value1> <score2> <value2>
    

    返回有序集key中,下标在<start> <stop>之间的元素,带WITHSCORES可以连同分数一起返回

    zrange <key> <start> <stop> [WITHSCORE]
    

    返回有序集key中,所有score值介于min和max之间(包括等于)的成员,有序集成员按照score值递增(从小到大)次序排列

    zrangebyscore key min max [witgscore] 
    

    返回有序集key中,所有score值介于min和max之间(包括等于)的成员,有序集成员按照score值递减(从大到小)次序排列

    zrevrangebyscore key max min [withscore] 
    

    给元素的score加上增量

    zincrby <key> <increment> <value>
    

    删除该集合下,指定值的元素

    zrem <key> <value>
    

    统计该集合,分数区间内的元素个数

    zcount <key> <min> <max>
    

    返回该值再集合中的排名,从0开始

    zrank <key> <value>
    

    Redis的java客户端Jedis

    用Windows的IDEA连接虚拟机中Redis注意事项

    禁用Linux防火墙
    redis.conf中注释掉bind 127.0.0.1,然后protect-mode 设置为no
    虚拟机后台必须启动redis

    导入jar包之后,即可连接

    package com.yyx.jedis;
    
    import redis.clients.jedis.Jedis;
    
    import java.util.Set;
    
    public class TestJedis {
        // @SuppressWarnings("resource") 注释掉记得关闭
        public static void main(String[] args) {
            // 创建Jedis对象
            Jedis jedis = new Jedis("192.168.111.114", 6379);
            // 测试连接
            String ping = jedis.ping();
            System.out.println(ping);
            // 向Redis中添加String类型数据
            String set = jedis.set("javakey", "valueJava");
            System.out.println(set);
            // 获取Redis中javakey对应的值
            String javakey = jedis.get("javakey");
            System.out.println(javakey);
            // 获取Redis中所有的key
            Set<String> keys = jedis.keys("*");
            // 遍历
            for (String key : keys
                 ) {
                System.out.println(key);
            }
            jedis.close();
        }
    }
    
    

    Redis的事务

    Redis是一个单独的隔离操作,属物种的所有命令都会序列化,按顺序的执行,事务在执行过程中,不会被其他客户端发送的请求打断。
    Redis 事务的主要作用是串联多个命令防止其他命令插队

    Multi、Exec、discard
    Multi:从输入Multi开始,输入的命令会依次进入命令队列中,但不会执行,知道输入Exec后,Redis会将之前的命令依次执行。
    组队过程中可以通过discard来放弃组队
    组队中某个命令出现了错误,执行时整个的所有队列都会被取消
    如果执行阶段某个命令出现了错误,则只有报错的命令不会执行,而其他的命令都会被执行,不会回滚

    事务冲突问题

    例如:你的支付账号不只有你自己用,假设余额一万,那么如果双十一有三个请求,一个是想给金额减8000,一个是想给金额减2000,还有一个想给金额减1000,肯定不能都完成,这就涉及到了乐观锁悲观锁

    乐观锁:

    每次去取数据时都认为别人不会修改数据,也就不会上锁,但是在更新的时候会判断一下这期间有没有人更新了这个数据,乐观锁适用于多读类型,这样可以提高吞吐量,Redis就是利用这种check-and-set机制实现事务。

    悲观锁:

    每次去拿数据的时候都会认为别人想修改数据,所以每次拿数据时都会上锁,这样别人想那这个数据就会block直到它拿到锁,传统的关系型数据库中就用到了很多悲观锁的机制,比如行锁,表锁,读锁,写锁等

    WATCH key 【key2】…

    综上,在执行multi之前,可以先执行watch key 【key2】…,可以监视一个/多个key,如果在事务执行之前这个key被其他命令所改动,那么事务会被打断。
    例如:
    启动两个Xshell
    同时watch同一个key
    当其中一个执行事务时,另一个将该key对应数据修改
    那么exec事务时就会报错

    如何取消监视unwatch

    取消watch命令对所有key的监视
    如果在执行了Watch之后,exce命令或discard命令先被执行,那么就不需要unwatch

    Redis事务的三特性
    1. 单独的隔离操作:事务中所有命令都会序列化、按顺序的执行,事务在执行的过程中,不会被其他客户端发送来的命令请求打断
    2. 没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前,任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”
    3. 不保证原子性:Redis同一个事物中如果有一条命令执行失败,其后的命令仍会执行,没有回滚

    Redis持久化

    RDB

    在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapsjot快照,它恢复时是将快照文件直接读到内存里

    备份是如何执行的

    Redis会单独创建一个子进程(fork)来进行持久化,会先将数据写入一个临时文件中,待持久化过程结束,在用这个临时文件替换上次持久化好的文件。整个过程中,主进程不进行任何IO操作。如果需要进行大规模数据的恢复,这就确保了极高的性能,且对于数据回复的完整性并不是很非常敏感,RDB的缺点是最后一次持久化后数据可能丢失。优点是RDB比AOF更加高效

    fork进程会产生一个和父进程完全相同的子进程,但子进程在此后夺回exec系统调用,处于效率考虑,Linux中引入了 写时复制一般情况下父进程和子进程会共用同一段物理内存,只有进程空间的各段内容要发生变化时,才会将父进程的内容复制一份给子进程

    RDB保存文件

    在redis.conf中,默认名为dump.rdb
    rdb默认保存路径为Redis启动时命令行所在目录
    手动保存快照:bgsave

    RDB优缺点:

    优点:节省磁盘空间,恢复速度快
    缺点:数据庞大时耗性能,在备份周期一定间隔时间做一次备份,如果Redis意外down,就会丢失最后一次快照后的所有修改

    AOF

    以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来,只允许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次已完成数据的恢复
    默认是不开启的,需要在配置文件中配置(redis.conf中配置文件名称,默认为appendonly.aof)
    AOF文件保存路径和RDB路径一致

    如果遇到AOF文件损坏,可通过
    redis-check-aof --fix appendonly.aof恢复

    AOF同步频率设置
    • 始终同步,每次Redis的写入都会立刻计入日志
    • 每秒同步,每秒计入日志依次,如果待机,本秒数据可能丢失
    • 如果不主动进行同步,把同步时机交给操作系统 在这里插入图片描述
    Rewrite

    AOF采用文件追加方式,文件会越来越大,为了避免这种情况,新增了重写机制,当AOF文件大小超过设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof。
    重写于之前的不同
    例如:
    incby k 1000
    incby k 1000
    incby k 1000
    重写后
    incby k 3000

    Redis如何实现重写

    AOF文件持续增长而过大时,会fork出一条新的进程来将文件重写,(也是先写临时文件最后在rename),遍历新进程的内存中数据,每条记录都有一个Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,与快照类似。

    何时重写?

    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    系统在载入时,或者上次重写完毕时,都会记录AOF大小,设为base_size,如果Redis中AOF当前大小>=base_size+base_size*100(默认)%且当前大小>=64(默认)mb,Redis会对AOF进行重写

    AOF优点

    备份机制更加稳健,丢失数据概率低
    可读的日志文件,通过操作AOF文件,可以处理错误操作

    AOF缺点

    比RDB占用更多磁盘空间
    恢复备份速度慢
    每次读写都同步的话,会影响性能

    如果两个持久化方式都开启,默认听AOF的

    AOF的数据更准确
    官方建议都启用,对数据不敏感可只用RDB,不建议单独用AOF,可能会出现BUG,如果只是做纯内存缓存,可以都不用

    Redis主从复制

    就是主机更新数据后根据配置和策略,自动同步到备机的master/slaver机制加粗样式

    展开全文
  • NoSQL Manager for MongoDB 下载

    热门讨论 2017-03-20 01:12:48
    NoSQL Manager for MongoDB 破解版
  • nosql

    千次阅读 2017-11-19 21:15:15
    nosql:下一代通用数据库(非关系型数据库),其特性有: 非关系、分布式、开源、支持横向扩展 nosql大多是分布式的,因其支持水平扩展,作为分布式系统,要理解CAP和base逻辑 官方非关系型数据库分类: 1.列...
    nosql:下一代通用数据库(非关系型数据库),其特性有:
    非关系、分布式、开源、支持横向扩展
    nosql大多是分布式的,因其支持水平扩展,作为分布式系统,要理解CAP和base逻辑
    官方非关系型数据库分类:
    1.列式存储( Wide Column Store / Column Familie ):Hadoop、Hbase、Cassandra
    2.文档存储( Document Store ):MongoDB、Elastic、CouchDB
    文档的概念:为每一行关系型数据库中的数据自动的自带表头、描述信息并组织成jesion格式
    3.键值存储/元组存储(key value/tuple store;特点是数据模型极其简单,性能好):
    DynamoDB、Riak、 Redis 、LevelDB
    4.图式存储(Graph Databases):Neo4j、Infinite Graph、TITAN
    5.多模型数据库:CortexDB、gunDB
    6.对象数据库(Object Databases):VelocityDB
    7.云数据库:GridGain、Crate Data
    8.XML Databases:专门存储xml格式的数据
    9.多维数据库:Globals
    10.多值数据库(Multivalue Databases)
    11.事件源
    12.时序数据库( Time Series / Streaming Databases;生成数据后极少改变,但会随着时间不断生成新的数据,像监控系统):
    以上主要的nosql数据库有横向扩展的功能,有简洁的API接口,满足base规范;
    介绍base之前首先介绍ACID:
    ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种 特性 ,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
    一致性解释:存储一段数据需要涉及到多个进程时,当多个进程都有可能更改数据,则要确保进程得到的修改完的数据是一模一样的。
    CAP理论:任何分布式系统,最多只能满足三个特性中的两个:一致性、可用性、分区容错性。
    C :多个数据节点上的数据一致;
    A :用户发出请求后的有限时间范围内返回结果;
    P network partition ,网络发生分区后,服务是否依然可用;
    可用性:主从复制,主系统故障,从系统可用;
    分区容错性:允许分区之间的数据短时间内不一致;一旦因为各种故障导致主机之间无法通信,这种状况被称为网络产生了分区
    所以系统满足AP特性的同时满足C(弱一致性:允许一段时间内数据不一致),需要遵循base逻辑( 基于 CAP 演化而来,适用于nosql存储系统的标准 ):
    BASE BA S E ,基于 CAP 演化而来
    BA Basically Available ,基本可用;
    S Soft state ,软状态 / 柔性事务,即状态可以在一个时间窗口内是不同步的;
    E Eventually consistency ,最终一致性;


    redis属于nosql的k/v家族,是基于内存的数据结构存储,即所有数据的读写都在内存中,可被用作数据库、缓存和消息队列(中间件),特点: 开源、内存存储、数据结构存储。
    由于数据存在内存中,为防止断电丢失,Redis会每隔一段时间将数据快照到磁盘,逻辑是内存是数据集存储的地方,磁盘是辅助。 支持的数据结构有字符的线性组合、哈希(关联数组)、列表、集合(无序)、有序的集合、位图、地理位置的空间索引、辐射查询。
    Redis支持内建的复制、 Lua 脚本配置 LRU最近最少使用算法完成存储项的淘汰 、事务、基于磁盘的持久存储(分为快照式持久和追加日志式持久)、高可用( Sentinel Redis Cluster )。
    Redis主从复制中,主节点能读能写,从节点只读。
    Redis Cluster作用:Redis不使用主从复制,在每个节点都保存部分数据,用户访问A节点时,Redis Cluster会分析请求,将请求转发到有相应数据的B节点,完成响应,过程中不会进行同步。
    Redis的全称: REmote DIctionary Server(远程字典服务器)字典指数据结构
    Redis是单进程(单核即可),对CPU要求不高,但对I/O要求很高


    redis的安装配置:
    1.redis的官方站点下载安装

    2.epel源中有redis


    redis是c/s架构的应用程序,使用的协议是redis,因此需要调用它的API才可以交互,所以redis有专用的客户端,还有第三方工具,能安装在桌面上的图形客户端,linux版需要编译安装,rpm包安装要进行捐助才可以使用
    3.主机同步时间

    4.安装redis

    redis自带sentinel工具,有相应程序,用来配置主从复制后完成高可用。

    5.启动服务,不更改监听地址,默认为本机,默认端口为6379

    6.redis的命令行客户端工具:

    7.使用命令行客户端工具

    8.连接本机的redis服务器的命令:

    redis一个进程可以创建多个数据库,库是用数字来表示的,比如0号库、1号库等,不更改配置,默认库有16个(0~15),默认在0号库中操作,切换库使用命令:select+序号

    在数据库中进行增删改查,没有表的概念,都是键值对,reids支持的数据结构很多,对应的命令也各不相同,常用的命令有:
    1.help--------> help+Tab键,会出现命令组,列出通用命令(不同数据结构都可以使用的命令)








    help之后依次敲击Tab键,会进行数据结构的变换:

    1.首先针对字符串的命令:



    2.针对列表的命令(即数组),一个数组中可以有多个元素,数组元素的索引方式是从0开始计数,涉及到先进先出(队列)、后进先出(栈),所以数组可以看作是栈。



    L表示left,R表示right,PUSH表示入栈,POP表示出栈

    3.针对哈希的命令,以H来表示
    哈希即关联数组,数组索引不再是0,1,2,3,而是自定义的字符串;是子key,即value中包含key


    4.针对集合的命令,用S表示



    5.针对有序集合的命令,用Z表示;
    有序集合可以给集合的元素加上索引,还可以加上评分
    只有交集并集计算



    6.针对发布订阅队列的命令:
    一个频道即一个存储信息的队列,可以多人向其中写入数据,也可以多人读取数据,订阅了相关频道,一旦有新数据产生,就会收到通知




    展开全文
  • NOSQL

    2019-09-15 22:45:58
    NoSQL的介绍: 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是...

    NoSQL的介绍:

    非关系型数据库就是NoSQL,关系型数据库代表MySQL
     对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索
     NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库、表(通常是多个表)以及字段。
     NoSQL数据可以存储在内存里,查询速度非常快
     NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替代关系型数据库
     NoSQL因为没有复杂的数据结构,扩展非常容易,支持分布式

    常见的NoSQL

    k-v形式的:memcached、redis 适合储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。
     文档数据库:mongodb   将数据以文档的形式储存。每个文档都是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。
     列存储 Hbase
     图  Neo4J、Infinite Graph、OrientDB

    Memcached介绍

    Memcached是国外社区网站LiveJournal团队开发,目的是为了通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。
     官方站点 http://www.memcached.org/
     数据结构简单(k-v),数据存放在内存里
     多线程
     基于c/s架构,协议简单
     基于libevent的事件处理
     自主内存存储处理(slab allowcation)
     数据过期方式:Lazy Expiration 和 LRU

    091ee4a533d60bc7be23bf054348144635f.jpg

     

    Slab allocation的介绍:

    Slab Allocation的原理
     将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。
     Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。
     Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。

    26588056e7ac193e087044faf52f0be22a5.jpg

    Growth factor

    Memcached在启动时通过-f选项可以指定 Growth Factor因子。该值控制chunk大小的差异。默认值为1.25。
     通过memcached-tool命令查看指定Memcached实例的不同slab状态,可以看到各Item所占大小(chunk大小)差距为1.25
     命令:# memcached-tool 127.0.0.1:11211 display

    Memcached的数据过期方式

     Lazy Expiration
     Memcached 内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,Memcached不会在过期监视上耗费CPU时间。
     LRU
     Memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

    Memcached安装

     yum install -y memcached libmemcached libevent
     systemctl start memcached
     vim /etc/sysconfig/memcached 可以配置参数
     比如加上监听的ip,可以把OPTIONS="" 改为OPTIONS="127.0.0.1"
     其中-m指定memcached分配内存
     -c指定最大并发数
     -u指定运行memcached服务的用户

    a4bd5347afe59a442cb1b8cff821652cec8.jpg

    3e55ea2cce13699cf64d5c844b57cbc0d7a.jpg

    查看Memcached运行状态

     memcached-tool 127.0.0.1:11211  stats
     或者echo stats |nc 127.0.0.1 11211  需要安装nc工具  yum install -y nc
     若安装libmemcached后,可以使用命令
     memstat --servers=127.0.0.1:11211 查看memcached服务状态

    在memcached中,运行state命令可以查看memcached服务的状态信息,其中cmd_get表示总的get次数,get_hits表示get的总命中次数,命中率 = get_hits/cmd_get。    get_hits是一个历史数据。 curr_items是当前存储的数据

    fdba5f84d6e6c89df82bfc245c955384036.jpg

     

    Memcached命令行:

     yum install -y telnet

    telnet 127.0.0.1 11211
     set key2 0 30 2
    ab
    STORED
    get key2
    VALUE key2 0 2
    ab
    END

     

     

    Memcached语法规则

      <command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
     注:\r\n在windows下是Enter键
     <command name> 可以是set, add, replace
     set表示按照相应的<key>存储该数据,没有的时候增加,有的时候覆盖
     add表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败
     replace表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败。
     <key> 客户端需要保存数据的key

       <flags> 是一个16位的无符号的整数(以十进制的方式表示)。 该标志将和需要存储的数据一起存储,并在客户端get数据时返回。 客户端可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
     <exptime> 为过期的时间。 若为0表示存储的数据永远不过期(但可被服务器算法:LRU 等替换)。 如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。
     <bytes> 需要存储的字节数,当用户希望存储空数据时<bytes>可以为0
     <data block>需要存储的内容,输入完成后,最后客户端需要加上\r\n(直接点击Enter)作为结束标志。

    Memcached数据导出和导入

    导出:
     memcached-tool 127.0.0.1:11211 dump > data.txt
     cat data.txt
     导入:
     nc 127.0.0.1 11211 < data.txt
     若nc命令不存在,yum install nc
     注意:导出的数据是带有一个时间戳的,这个时间戳就是该条数据过期的时间点,如果当前时间已经超过该时间戳,那么是导入不进去的

    PHP连接Memcached

    先安装php的memcache扩展
    cd /usr/local/src/
    wget  http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz
    tar zxf memcache-2.2.3.tgz
    cd memcache-2.2.3
    /usr/local/php-fpm/bin/phpize
    ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
    make && make install
    安装完后会有类似这样的提示: Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
    然后修改php.ini(vim /usr/local/php-fpm/etc/php.ini )添加一行 extension="memcache.so“
    检查/usr/local/php-fpm/sbin/php-fpm  -m

    下载测试脚本
    curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
    1.php内容也可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/1.php
    执行脚本
    /usr/local/php-fpm/bin/php 1.php
    或者将1.php放到某个虚拟主机根目录下面,在浏览器访问,即可看到效果
    最终可以看到数据如下:
     [0] => aaa
     [1] => bbb
     [2] => ccc
     [3] => ddd

    94881098c8c15960a98020973d6b9cb84a6.jpg

     

    Memcached中存储session

    本实例是在lamp/lnmp环境下实现

    wget http://study.lishiming.net/.mem_se.txt
    mv .mem_se.txt   /data/wwwroot/default/1.php   //把.mem_se.txt改名为1.php并放到默认的主页目录下(nginx的默认主页下)
    其中session.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
    curl    localhost/1.php
    类似于1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440


    编辑php.ini添加两行
    session.save_handler = memcache 

    session.save_path = "tcp://192.168.0.9:11211" 

    a6089a7eca9bcca59a6e96f8dac491320bd.jpg

    0d1bb233488c8c9750e8cc4d7d99c8665ef.jpg
    或者httpd.conf中对应的虚拟主机中添加
    php_value session.save_handler "memcache"  php_value session.save_path "tcp://192.168.0.9:11211" 
    或者php-fpm.conf对应的pool中添加
    php_value[session.save_handler] = memcache
    php_value[session.save_path] = " tcp://192.168.0.9:11211 "
    telnet 127.0.0.1 11211
    get i44nunao0g3o7vf2su0hnc5440

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    转载于:https://my.oschina.net/u/3964315/blog/3073292

    展开全文
  • Nosql

    2019-04-21 01:09:05
    NULL 博文链接:https://detox.iteye.com/blog/1685478
  • NoSql

    千次阅读 2013-05-16 11:05:34
    NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的...
    NoSQL,指的是非关系型的数据库。随着互联网 web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。

    编辑本段简介

    NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的 关系型数据库运用,这一概念无疑是一种全新的思维的注入。

    编辑本段状况

    计算机体系结构在数据存储方面要求具备庞大的水平扩展性①,而NoSQL致力于改变这一现状。Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。
    NoSQL项目的名字上看不出什么相同之处,但是,它们通常在某些方面相同:它们可以处理超大量的数据。
    这场革命仍然需要等待。的确,NoSQL对大型企业来说还不是主流,但是,一两年之后很可能就会变个样子。在NoSQL运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。分享他们如何推翻缓慢而昂贵的关系数据库的暴政,怎样使用更有效和更便宜的方法来管理数据。
    关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以满足RDBMS (relational database management system, 关系型数据库管理系统)的需要,”在NoSQL拥护者们看来,基于NoSQL的替代方案“只是给你所需要的”。
    水平扩展性(horizontal scalability)指能够连接多个软硬件的特性,这样可以将多个服务器从逻辑上看成一个实体。

    编辑本段NoSQL

    随着互联网 web2.0网站的兴起,非关系型的数据库成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付 web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:
    1、High performance - 对数据库高并发读写的需求
    web2.0网站要根据用户个性化信息来实时生成 动态页面和提供动态信息,所以基本上无法使用 动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘IO就已经无法承受了。其实对于普通的BBS网站,往往也存在对高并发写请求的需求。
    2、Huge Storage - 对海量数据的高效率存储和访问的需求
    对于大型的SNS网站,每天用户产生海量的用户动态,以国外的Friendfeed为例,一个月就达到了2.5亿条用户动态,对于关系数据库来说,在一张2.5亿条记录的表里面进行SQL查询,效率是极其低下乃至不可忍受的。再例如大型web网站的用户登录系统,
    3、High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求
    在基于web的架构当中,数据库是最难进行横向扩展的,当一个应用系统的 用户量和访问量与日俱增的时候,你的数据库却没有办法像web server和app server那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对 数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和 数据迁移,为什么数据库不能通过不断的添加 服务器节点来实现扩展呢?
    在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而对于 web2.0网站来说,关系数据库的很多主要特性却往往无用武之地,例如:
    1、数据库事务一致性需求
    很多web 实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。
    2、数据库的写实时性和读实时性需求
    对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的。并不要求这么高的实时性。
    3、对复杂的SQL查询,特别是多表关联查询的需求
    任何 大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件 分页查询,SQL的功能被极大的弱化了。
    因此,关系数据库在这些越来越多的应用场景下显得不那么合适了,为了解决这类问题的非关系数据库应运而生。
    NoSQL 是非关系型数据存储的广义定义。它打破了长久以来 关系型数据库与ACID理论 大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在 大数据存取上具备 关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。
    当今的应用 体系结构需要 数据存储在横向伸缩性上能够满足需求。而 NoSQL 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的 HBase,也得到了广泛认同。从这些NoSQL项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。
    NoSQL与关系型数据库设计理念比较
    关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非 关系型数据库以键值对 存储,它的结构不固定,每一个 元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

    编辑本段特点

    它们可以处理超大量的数据
    它们运行在便宜的PC服务器集群上
    PC集群扩充起来非常方便并且成本很低,避免了“sharding”操作的复杂性和成本。
    它们击碎了性能瓶颈
    NoSQL的支持者称,通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间,执行速度变得更快。
    “SQL并非适用于所有的程序代码,” 对于那些繁重的重复操作的数据,SQL值得花钱。但是当数据库结构非常简单时,SQL可能没有太大用处。
    没有过多的操作
    虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能集合,而且在 数据完整性上也发挥绝对稳定,他们同时也表示,企业的具体需求可能没有那么多。
    Bootstrap支持
    因为NoSQL项目都是开源的,因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样,不得不从社区中寻求支持。

    编辑本段优点

    易扩展

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

    大数据量,高性能

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

    灵活的数据模型

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

    高可用

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

    编辑本段缺点

    但是一些人承认,没有正式的官方支持,万一出了差错会是可怕的,至少很多管理人员是这样看。
    “我们确实需要做一些说服工作,但基本在他们看到我们的第一个原型运行良好之后,我们就能够说服他们,这是条正确的道路。”
    此外,nosql并未形成一定标准,各种产品层出不穷,内部混乱,各种项目还需时间来检验

    编辑本段NoSQL开源软件

    Membase
    Membase 是 NoSQL 家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,可以下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区 网络空间的供应商。
    Membase容易安装、操作,可以从单节点方便的扩展到 集群,而且为memcached(有线协议的 兼容性)实现了 即插即用功能,在应用方面为开 发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。
    通过兼容多种编程语言和 框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和 编程接口,包括可配置 的告警信息。
    Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的 节点进行复制。 另外,对 存储的数据进行再分配仍然是必要的。
    这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,类准确性的延迟和 吞吐量。通过如下方式可以获得上面提到的特性:
    ◆ 自动将在线 数据迁移到低延迟的存储介质的技术(内存, 固态硬盘,磁盘)
    ◆ 可选的写操作一一异步,同步(基于复制,持久化)
    ◆ 反向通道再平衡[未来考虑支持]
    ◆ 多线程低锁争用
    ◆ 尽可能使用 异步处理
    ◆ 自动实现 重复数据删除
    ◆ 动态再平衡现有集群
    ◆ 通过把数据复制到多个 集群单元和支持快速失败转移来提供系统的高可用性。
    MongoDB
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的 数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的 数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于 面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。
    主要功能特性
    ◆ 面向集合存储, 易存储对象类型的数据
    “面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似 关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。
    ◆ 模式自由
    模式自由(schema-free),意味着对于 存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
    ◆支持动态查询
    ◆支持完全索引,包含内部对象
    ◆支持查询
    ◆支持复制和故障恢复
    ◆使用高效的二进制数据存储,包括大型对象(如视频等)
    ◆自动处理碎片,以支持 云计算层次的扩展性
    ◆支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
    ◆文件存储格式为BSON(一种JSON的扩展)
    BSON(Binary Serialized document Format) 存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。
    ◆可通过网络访问
    MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
    MongoDB把 数据存储在文件中(默认路径为:/data/db),为提高效率使用 内存映射文件进行管理。
    Hypertable
    Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和 网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是 传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。
    Apache Cassandra
    Apache Cassandra是一套开源分布式Key-Value 存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook在使用此系统。
    主要特性
    ◆ 分布式
    ◆ 基于column的结构化
    ◆ 高伸展性
    Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被 路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能 是比较简单的事情,只管在群集里面添加 节点就可以了。
    Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库 的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了 开源项目。它是一个网络社交 云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。
    CouchDB
    所用语言: Erlang
    特点:DB一致性,易于使用
    使用许可: Apache
    协议: HTTP/REST
    双向数据复制,持续进行或临时处理,处理时带冲突检查,因此,采用的是master-master复制
    MVCC – 写操作不阻塞读操作
    可保存文件之前的版本
    Crash-only(可靠的)设计
    需要不时地进行数据压缩
    视图:嵌入式 映射/减少
    格式化视图:列表显示
    支持进行服务器端文档验证
    支持认证
    根据变化实时更新
    支持附件处理
    因此, CouchApps(独立的 js应用程序)
    需要 jQuery程序库
    最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。
    例如:CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。
    和其他数据库比较,其突出特点是:
    ◆ 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部 署上。
    ◆ 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
    ◆ 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
    ◆ 范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
    ◆ 列表数据结构 :在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。
    ◆ 分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败
    展开全文
  • NoSQL(Not Only SQL),指的是非关系型的数据库。随着web2.0的快速发展,非关系型、 分布式数据存储得到了快速的发展,它们不保证关系数据的ACID 特性。 NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型...
  • NoSQL的模式 论文下载

    2011-08-20 10:12:53
    过去一两年 ,一些用于存储大规模数据的数据存储机制逐渐成型,与RDBMS模型相去甚远,被统称为NOSQL
  • 2 下载 3 安装-一直点 Next 完成安装 4 进入程序-弹出设置-直接默认点击OK 5 进入数据库-点击三角 查看数据库内的集合和文档 6.打开控制台 7 输入命令,并执行命令:1是执行所有,2是执行单行,3是执行选中行 8.设置...
  • NOSQL

    2010-11-03 11:24:00
    初的动机很简单,解决文档的保存、共享、交流、查询、下载及权限管理,其本质理念是认为每名员工在工作中生成的每一个电子文档都是企业的资源。然而这个资 源并没有被纳入到ERP中,所谓的企业资源管理中。即便是...
  • 不是使用期30天,版本高且稳定4.8,无限期,请放心使用绝对安全.送给广大爱好mongodb的程序猿.
  • 数据库nosql

    2013-11-20 23:59:11
    NOsql基础描述 详细讲解了nosql基础原理,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,205
精华内容 14,082
关键字:

nosql下载