美文网首页
NoSQL数据管理

NoSQL数据管理

作者: 一杭oneline | 来源:发表于2020-04-05 13:19 被阅读0次

    聚合模型

    聚合模型相当于包裹,包裹之间不进行数据交换

    键值数据库 key-value

    memcached 数据库

    key是唯一标识,数据库不关心value是什么,应用程序负责解释。当成一种缓存中间件,数据库查询的缓存,基于内存的数据库。所有操作都是基于key。

     yum install memcached 
     systemctl start memcached 
     telnet 127.0.0.1 11211
    

    magent连接多个memcached数据库,实现分布式。

    redis

    value 类型可以很多,数据结构服务器,redis可以将存在内存中的数据定期刷新并持久化到硬盘中,redis自己提供分布式部署的能力

    redis>HMSET 1001 name "memcached" port "11211"
    redis>HGET 1001 name
    redis>HGET 1001 port
    redis>lpush dbs redis  # lpush上传列表list
    redis>lpush dbs mongodb # key 是dbs 插入一个redis和mongodb
    redis>lrange dbs 0 10
    # set没有顺序
    redis>sadd dbs redis
    redis>sadd dbs mongodb
    redis>sadd dbs memcached
    redis>smembers dbs
    

    需要一个客户端 redis-client
    redis使用hash槽,一次性hash的功能,redis具有主备功能。

    redis安装

    redis-cli
    redis-cli -h xx.xxx.xxx.xxx -p 11211
    
    集群模式安装,至少六台形成集群
    # 修改 redis.conf
    # 1.修改或直接注释bind ip 接受外部ip请求
    # 2.取出cluster-enable_yes 的注释,开启集群功能
    # 3.修改protected-mode yes 为no
    # 4.service redis restart
    # 控制集群需要安装
    yum install redis-trib
    redis-trib create --replicas 1 xx.xxx.xxx.xxx:xxxx ……
    redis-cli -c
    

    mongodb安装

    文档数据库

    yum install mongodb-server
    yum install mongodb
    mongo
    
    insert操作
    # user 集合的名字
    # 第一次存放文档时新建数据库,无需新建
    db.user.insert({json文档})
    db.user.insert({name:"张三",age:"18"})
    db.user.find({name:"张三"})
    db.user.find({name:/^张*/})  #“张”开头
    
    分布式环境构建
    image.png

    mongos是接受用户请求的,多个mongos
    一台机器启动多个mongod进程,扮演不同的角色。
    configserver用来存储配置文件
    shardA是存储副本的,可以有多台服务器存储shardA,构成一个副本集


    image.png

    每一个副本集的个进程

    mongodb配置实例

    1.准备五台虚拟机
    2.设计好角色

    1[C,S1,S2,os]
    2[S1,S2,S3]
    3[S2,S3,S4]
    4[S3,S4,C] S 分片
    5[S4,C,S1] C config
    

    3.分别在1-5号机器启动三个mongod进程
    1)配置分片和数据分片启动参数不同,--configsvr --shardsvr
    2)启动参数中指明自己的分片名(即副本集,C、S1等) --replSet S1
    3)同一机器上不同进程占用不同端口
    4.配置副本集,选择每一个组的任何一台机器上进行配置

    > cfg={_id:"S1",members:[
                  {host:'x.x.x.x:10002'},
                  {host:'x.x.x.x:10001'},
                  {host:'x.x.x.x:10003'}
    ]};
    > rs.initiate(cfg)
    

    5.在1号机器上启动mongos进程,启动参数中指明一个或多个配置服务器
    6.用mongo连接mongos,之后添加到各分片集群

    > sh.addShard("C/X.X.X.X:10001")
    > sh.addShard("S1/X.X.X.X:10002")
    

    7.针对某个数据库,启用分片存储

    > db.runCommand({enableSharding:"dbname"})
    > db.runCommand({shardCollection:"user",key:{"_id":1}}) #数据库的每一个表依据id进行分散存储
    > db.runCommand({shardCollection:"use2",key:{"_id":hashed}}) # hash分片,对"_id"进行hash计算
    

    大部分NoSQL数据库不支持join多表查询操作,但单个表中可以存放很多信息,基本不需要join
    适用于:
    1.适应于大规模多样的数据类型
    2.需要比较丰富的快速查询能力
    不适用:
    1.复杂单文档多文档事务操作
    2.完全无模式
    3.查询不高,但对整体读取、分析要求较高的应用

    列族数据库

    Cassandra
    超级列 大包裹中小包裹,小包裹中分片
    BigTable 谷歌非结构化数据库
    记录,多个记录形成一张大表
    记录中的key多个value值,用时间戳进行区分
    (row:string,column:string,time:int64)-->string
    实例

    ----------------info---------------------------------scores------------------
    1001     name     sex    Address       Chinese   English
             zhang     M        beijing          100     100
    
    1001 是行关键字(倒排)    列索引(族名 列值  info:name) 时间戳
    时间戳,读到的是最新的,可以保留多个版本
    

    最大的特点就是只需要编辑info和scores,不需要确定info里面的内容,可以临时增加

    HBASE模仿了Bigtable


    Hbase.png

    相关文章

      网友评论

          本文标题:NoSQL数据管理

          本文链接:https://www.haomeiwen.com/subject/vvmsphtx.html