精华内容
下载资源
问答
  • 第7章 物理存储结构;本章内容;本章要求;7.1 项目导入——规划人力资源管理系统数据库物理存储结构 ;7.2 Oracle数据库系统结构;...逻辑存储结构主要描述Oracle数据库内部数据的组织和管理方式,与操作系统没有关系。...

    第7章 物理存储结构;本章内容;本章要求;7.1 项目导入——规划人力资源管理系统数据库物理存储结构 ;7.2 Oracle数据库系统结构;在Oracle数据库的存储结构包括物理存储结构和逻辑存储结构。物理存储结构主要用于描述Oracle数据库外部数据的存储,即在操作系统中如何组织和管理数据,与具体的操作系统有关;逻辑存储结构主要描述Oracle数据库内部数据的组织和管理方式,与操作系统没有关系。物理存储结构是逻辑存储结构在物理上的、可见的、可操作的、具体的体现形式。 ;;;数据文件:用于存储数据库中的所有数据;控制文件:用于记录和描述数据库的物理存储结构信息;重做日志文件:用于记录外部程序(用户)对数据库的改变操作;归档文件:用于保存已经写满的重做日志文件;初始化参数文件:用于设置数据库启动时的参数初始值;跟踪文件:用于记录用户进程、???据库后台进程等的运行情况;口令文件:用于保存具有SYSDBA,SYSOPER权限的用户名和SYS用户口令;警告文件:用于记录数据库的重要活动以及发生的错误;备份文件:用于存放数据库备份所产生的文件。;7.3 数据文件及其管理;7.3.1数据文件概述;数据文件的管理策略由于对数据库的操作最终转换为对数据文件的操作,因此在数据库运行过程中对数据文件进行频繁的读写操作。为了提搞I/O效率,应该合理的分配数据文件的存储位置。把不同存储内容的数据文件放置在不同的硬盘上,可以并行访问数据,提高系统读写的效率。初始化参数文件、控制文件、重做日志文件最好不要与数据文件存放在同一个磁盘上,以免数据库发生介质故障时,无法恢复数据库。 ;7.3.2 数据文件的管理;(1)创建数据文件;向ORCL数据库的USERS表空间中添加一个大小为10 MB的数据文件。 ALTER TABLESPACE USERS ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' SIZE 10M;向ORCL数据库的TEMP表空间中添加一个大小为5 MB的临时数据文件。ALTER TABLESPACE TEMP ADD TEMPFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP02.DBF' SIZE 5M;;(2)修改数据文件大小;为ORCL数据库的USERS表空间添加一个自动增长的数据文件。ALTER TABLESPACE USERS ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS03.DBF' SIZE 10M AUTOEXTEND ON NEXT 512K MAXSIZE 50M;修改ORCL数据库USERS表空间的数据文件USERS02.DBF为自动增长方式 。ALTER DATABASE DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF ' AUTOEXTEND ON NEXT 512K MAXSIZE UNLIMITED;

    ;取消ORCL数据库USERS表空间的数据文件USERS02.DBF的自动增长方式。 ALTER DATABASE DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF ' AUTOEXTEND OFF;将ORCL数据库USERS表空间的数据文件USERS02.DBF大小设置为8 MB 。ALTER DATABASE ?DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' RESIZE 8M;;(3)改变数据文件的可用性;归档模式下数据文件可用性的改变;;非归档模式下数据文件可用性的改变 ;改变表空间中所有数据文件的可用性 ;;(4)改变数据文件的名称或位置 ;改变同一个表空间中的数据文件的名称或位置;改变多个表空间中的数据文件的名称或位置;(5)删除数据文件 ;;;;(7)查询数据文件信息;查询数据文件动态信息SELECT NAME,FILE#,STATUS,CHECKPOINT_CHANGE# FROM V$DATAFILE 查询数据文件的详细信息 SELECT TABLESPACE_NAME,AUTOEXTENSIBLE,FILE_NAME FROM DBA_DATA_FILES;查询数据文件的增长方式SELECT TABLESPACE_NAME,BYTES,AUTOEXTENSIBLE,FILE_NAME FROM DB

    展开全文
  • 物理存储结构主要用于描述Oracle数据库外部数据的存储即在操作系统中如何组织和管理数据与具体的操作系统有关 逻辑存储结构主要描述Oracle数据库内部数据的组织和管理方式与操作系统没有关系 物理存储结构是逻辑存储...
  • 数据库物理结构设计

    2021-03-31 16:52:46
    1:确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。 2:对物理结构进行评价,评价的重点是时间和空间效率。 不同的数据库产品所提供的物理环境和存取方法,和存储结构有很大的差别 能供设计人员使用...

    物理结构设计

    数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统 为一个给定的逻辑数据模型选取一个最合适的应用要求的物理结构的过程,就是数据库的物理设计。
    数据库的物理设计通常分为二部
    1:确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。
    2:对物理结构进行评价,评价的重点是时间和空间效率。
    不同的数据库产品所提供的物理环境和存取方法,和存储结构有很大的差别
    能供设计人员使用的设计变量,参数范围也是很不相同的,因此没有通用的物理设计方法可遵循。

    对于数据库查询事务,需要得到如下信息:

    查询的关系。
    查询条件所涉及的属性。
    连接条件所涉及的属性。
    查询的投影属性。
    对于数据更新事务,需要得到如下信息
    被更新的关系。
    每个关系上的更新操作条件所涉及的属性。
    修改操作要改变的属性值。

    关系模式存取方法选择

    关系数据库系统是多用户共享的系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求。
    存取方法是快速存取数据库中数据的技术,数据库管理系统一般提供多种存取方法。常用的存取方法为索引方法和聚簇方法。
    B+树索引和hash索引是数据库中经典的存取方法,使用最为普遍。

    展开全文
  • 数据库基础 非关系数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型...(缓存中没有) 再去(关系数据库)物理存储中访问数据 即 请求 ---&g...

    数据库基础 非关系型数据库 MongoDB 和 redis



    1 NoSQL简介


    访问量增加,频繁的读写
    直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大
    所以,需要内存级的读写操作,作为缓存


    1 NoSQL的使用

    为了加快读写操作时间 减少服务器压力

    先访问(非关系型数据库)缓存中的数据

    (缓存中没有) 再去(关系型数据库)物理存储中访问数据

    即 请求 --->> nosql --->> mysql


    2 NoSQL的特点

    优点 : 高可扩展性
           分布式计算
           低成本
           架构灵活
           没有复杂的关系
    
    缺点:
          没有标准化(产品不一样)       
          有限的查询功能功能
          最终一致是不直观的程序


    3 NoSQL的分类

    非关系数据库的分类:
    
         列存储 :
         文档存储:
         键值对:
         图存储:
         对象存储:
         xml数据库:

    redis,mongodb 中 储存 一些 经常使用(不常改变)的数据


    2 MongoDB


    基本概念

    MongoDB 是一个 基于分布式文件存储的NoSQL,

    也可以做硬盘级别的读写

    面向集合,json风格的文件形式

    完整的索引支持,对任何属性都可以索引


    mongodb 的三元素:

    数据库
    database

    数据库 是一个集合的物理容器

    集合(表)
    collection

    集合 ,存储多个文档(结构不固定)---相当于关系型数据库的表

    {'name':'a','gender':'male'}
    {'book':'a','gender':'male'}
    {'name':'a','age':18}

    文档(行)

    document ,文档,就是对象 由键值对构成 json的扩展形式 bson

    {'name':'a','gender':'male'}


    与关系型数据库的对比:

    mongodb       关系型
    
    database       database
    collection     table
    document       row
    field          column
    index          index
    primary key    主键自己维护


    mongodb的安装和部署 (windows):

    注意:

    偶数版本是稳定版本,奇数版本是开发版本

    32bit的mongodb最大只能存放 2G 数据,64bit 没有限制



    服务端 mongod 默认端口27017

         1 官网下载64bit
           自定义安装后
    
         2   在mongodb\下创建 data文件夹; 在data\下创建db文件夹  即 mongodb\data\db;
    
         3    然后命令行 cd D:/mongodb/bin  切换路径 输入mongod.exe --dbpath D:/mongodb/data/db
    
         4     出现如下,启动成功
         
         #  2017-11-07T09:40:38.843+0800 I COMMAND  [initandlisten] setting featureCompatibilityVersion #  to 3.4
         #  2017-11-07T09:40:38.845+0800 I NETWORK  [thread1] waiting for connections on port 27017
    
         5   web访问  本地端口 127.0.0.1:27017
             It looks like you are trying to access MongoDB over HTTP on the native driver port.
             说明服务已开启
    
         6 配置 Mongodb服务
    
          # 创建 mongodb.cfg 文件 写入如下配置
    
        systemLog:
            destination: file
            path: D:\mongodb\data\log\mongod.log
        storage:
            dbPath: D:\mongodb\data\db
    
    
        #  创建  data\log 文件夹
    
       7  命令行下 执行 mongod.exe --config "D:\mongodb\mongod.cfg" --install
    
           net start mongodb
           net stop  mongodb
    
           mongod.exe --remove   移除mongodb服务

    客户端

    mongo.exe


    界面版mongodb

    安装配置完成,可以使用图形界面版mongodb,这里推介 robomongo robo 3t


    mongodb操作


    • 1 数据库操作

        没有数据的 集合 和 数据库不会显示
      
        db     查看当前的数据库名称; 所有物理上存在的数据库
      
        db.stats() 查看当前的数据库信息;
      
        show dbs   查看所有的数据库
      
        use day1   直接创建 并切换数据库
      
        db.dropDatabase() 删除库,需要先切换到当前库
      
        exit 退出
        ctrl + c


    • 2 集合操作

        db.createCollection("stu")
      
        show collections
      
        show tables
      
        db.t1.insert({"name":"aaa"})  # 创建 t1 同时 插入数据
      
        db.stu.drop()


    • 3 数据类型 和 数据操作

    mongodb的数据类型

    object ID --- 文档ID ---唯一标识
    string 必须是有效的utf-8
    boolean
    integer 整数可以是 32 64的 取决于服务器
    double 储存浮点数
    arrays 数组 列表
    object 文档可以嵌套
    null
    timestamp
    date    new Date()

    Object ID

    不重复 文档的唯一性(可以自己定义 没有定义的mongodb会默认)
    
    默认 12字节的 16进制数
    
    前四个字节是当前的时间戳 时间相关
    3个字节 机器ID
    2个字节的MONGODB进程ID
    3个字节 简单的增量值


    数据操作:

    插入:(没有 集合会自己创建)
    
      db.stu.insert(document)
      db.stu.insert({name:"gl",gender:0})
        
       db.stu.insertMany([{},{},{}]) 插入多条记录
    
      自动生成的id : _id" : ObjectId("5a043500ffedb64e1403b240")
    
    查询:
    
      db.stu.find()
    
    修改:
    
    
        覆盖式的 修改:
            
            db.stu.update({"name":"a"},{"username":"al"})
    
    
      用 $set:{} ($unset:{}删除某个属性)只修改某个属性 --
    
      不用的话 会修改整个文档的结构
    
    
          db.stu.update({匹配条件},{$set:{name:"abc"}}) 只改第一个匹配的
        
          db.stu.update({},{$set:{name:"abc",gender:0}}) {} 匹配全部 只修改第一个
        
          db.stu.update({匹配条件},{$set:{name:"abc"}},{multi:true}) 全部修改
        
            db.stu.update({找不到带的匹配条件},{$set:{name:"abc"}},{upsert:true}) 找不到 插入记录
    
            db.stu.update({匹配条件},{$unset:{"要删除的字段":"任意字符"}})  清除某一字段
    
        $inc 增加
            
            db.stu.update({},{$inc:{"age":1}},{multi:true})  age自增1
        
        $push 添加
    
            db.stu.update({匹配条件},{$push:{"hobby":"read"}})
            db.stu.update({匹配条件},{$push:{"hobby":{$each:[1,2]}}})
    
    
    
        $pop 删除两端
    
            db.stu.update({匹配条件},{$pop:{"hbooy":-1})
            db.stu.update({匹配条件},{$pop:{"hbooy":1})
    
        $pull:按照条件删除元素,:"$pull" 把符合条件的统统删掉,而$pop只能从两端删
    
            db.stu.update({匹配条件},{$pull:{"hbooy":["read"]})
    
    
        $addToSet: 避免添加重复:去重 url
    
            db.urls.insert({"_id":1,"urls":[]})
            
            db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
            
            db.urls.update({"_id":1},{"$addToSet":{"urls":{"$each":[
                        'http://www.baidu.com',
                        'http://www.baidu.com',
                        'http://www.xxxx.com']}}})
            
        
    
    
    保存:按照 _id 字段
    
      如果一个文档存在的话是 覆盖式的修改,
    
      不存在是添加 insert
    
      db.stu.save({name:"emily",gender:2}) 新增
    
      db.stu.save({_id:"23010132",name:"emily",gender:2}) 有的话覆盖
    
    
    删除:
    
        1、删除多个中的第一个
    
            db.user.deleteOne({ 'age': 8 })
        
        2、删除国家为China的全部
    
            db.user.deleteMany( {'addr.country': 'China'} ) 
        
        3、删除全部
    
            db.user.deleteMany({}) 
        
          db.stu.remove({gender:0},{justOne:true}) # 是否只删除一条
        
          db.stu.remove({}) 删除全部
    
     
      size:
    
      db.createCollection("sub",{capped:true,size:10}) # 超过 size大小 会覆盖 capped


    数据查询:

    db.sub.find() 查询所有
    db.sub.find().pretty() 查询所有 格式化输出
    db.sub.findOne() 查询第一个

    比较运算符:
    
      < $lt
      <= $lte
      > $gt
      >= $gte
      != $ne
        = {"条件":"条件"}
    
            db.sub.find({age:{$gte:18}})
      
    
    逻辑及运算符:
    
      且 , 
    
      或 $or[数组]
    
            db.sub.find({$or:[{age:{$gte:18}},{gender:0}],name:"alex"})
    
        非 not
    
            db.sub.find({age:{$not:{$gte:18}}})
    
        取余:
    
            db.sub.stu.find({age:{$mod:[2,1]}}) 除2余1 的age
    
    
    范围运算符:
    
      $in
    
      $nin
    
            db.sub.find({age:{$in:[18,20]}})
    
    
    支持正则表达式:
    
      使用 正则 表达式
            db.stu.find({name:{$regex:"^黄.*?[a,e]$"}})
    
    取 指定的 字段
        
        db.stu.find({"name":{$regex:"^al"}},{"name":1,"age":1,"_id":0})  只选择查看name age 不要 id
    
    查找数组  {hobby:["tea","music"]}
    
            db.stu.find({"hobby":"tea"}) 包含tea的全部查找
            
            db.stu.find({"hobby.3":"tea"}) 查看第三个 hobby 是 tea的
    
            db.stu.find({"hobby":{$all:["tea","music"]}})  查看 hobby 既有 tea 又有 music的
    
            db.stu.find({},{"_id":0,"hobby":{"$slice":[0,3]}})  查找 所有记录的 第一到第三个hobby
    
    
    
    支持函数
    
      db.stu.find({$where:function(){return this.age>20}})
    
      this 指的是文档对象
    
      mongodb 用的是 js的编辑器
    
     
    
    limit(n) 选择 n 条  显示的个数
    
    skip(m) 跳过m条 
    
      db.sub.find().skip(1).limit(2)
    
    
    投影:只选择某个字段
    
      db.sub.find({},{name:1,gender:0}) # 表示只查看name字段
    
    排序:
    
      db.sub.find().sort({age:-1}) # 1 -1 正序逆序
      db.sub.find().sort({age:-1,"_id":1}) # 先按 age 降序 再按 id正序 
    
    count:计数
    
      db.sub.count({name:{$gte:18}})
      
    distinct:消除重复
    
      db.sub.distinct("gender",{age:{$lte:20}})
    
     


    mongoDB的高级操作

    aggregate 聚合:
    
     
    
      主要用于计算数据 类似 sum avg
    
      db.stu.aggregate([{管道:{表达式}}])
    
    
    常用的管道
    
      $ group -----group by
      $ match ----过滤数据
      $ project ---- 修改文档的结构
      $ sort
      $limit
      $skip
      $unwind
    
    表达式:
      $ sum
      $ avg
      $ min
      $ max
      $ push
      $ first
      $ last  
    
    
     分组 --- group
    
      db.sub.aggregate([
      {$group:{_id:"$gender",counter:{$sum:1}}}
      ])
    
      # $push ---将 符合条件的数据存入 一个新文档中
      db.sub.aggregate([
      {$group:{_id:"$gender",counter:{$push:"$$ROOT"}}}
      ])
    
    
    过滤 --- match
    
    db.sub.aggregate( [
    {$match:{age:{$gt:20}}} ,
    {$group:{_id:"gender",counter:{$sum:1}}}
    ] )
    
    # 先过滤结果 然后 再 分组操作
    
    
    # $project
    # $sort
    # $limit
    # $skip
    
     
    
      顺序=====
    
      db.stu.aggregate([
      {$match:{age:{$gt:20}}},
      {$group:{_id:"gender",counter:{$sum:1}}},
      {$project:{_id:1,counter:1}}, # 投影
      {$sort:{_id:-1}},
      {$skip:{1}},
      {$limit:1},
    
      ])
    
    
    unwind 拆分数组
    
     
    
      db.t1.aggregate([
      {$unwind:"$size"}
      ])
    
    /* 1 */
    {
    "_id" : 1.0,
    "title" : "t-shirt",
    "size" : "M"
    }
    
    /* 2 */
    {
    "_id" : 1.0,
    "title" : "t-shirt",
    "size" : "L"
    }
    
    /* 3 */
    {
    "_id" : 1.0,
    "title" : "t-shirt",
    "size" : "S"
    }


    索引

    创建大量的数据
    
    
         mongodb的shell 同时也是javascript的编译器 ---- 支持js语法
    
    
      for(i=0;i<1000000;i++){
      db.t1.insert({name:"test"+i,age:i})
      }
    
           查看 查询状态 --- explain("executionStats") 查询工具
    
      db.t2.find({name:"name10000"}).explain("executionStats")
    
    
    创建索引 
    
      db.t2.ensureIndex({属性:1}) # 1 表示升序 -1 表示降序
    
    
    唯一索引:唯一约束
      db.t2.ensureIndex({属性:1},{"unique":true})
    
    联合索引
      db.t2.ensureindex({name:1,age:1})
    
     
    
    查看文档的所有索引:
      db.t1.getIndexes()
    
    删除索引
      db.t1.dropIndex(索引名)
    
     


    数据备份与恢复

    备份
    
      mongodump -h dbhost -d dbname -o dbdirectary
    
      mongodump -u xxx -p xx --authenticationDatabase py3 -d xxx -o xxx
    
    
    恢复
    
      mongorestore -h dbhost -d dbname --dir dbdirectary


    账户安全

    1 数据库权限
    
    # root 只在admin数据库中可以使用 ==== 数据库后台 DBA使用
    
    # read 允许访问指定的数据库 普通用户
    # readWrite 允许读写指定的数据库 普通用户
    
    2 创建 admin 管理员账号
    
    # use admin 权限 授权的数据库
    # db.createUser({user:"admin",pwd:"123",roles:[role:"root",db:"admin"]})
    
    
    3 启用安全认证
    
    修改配置文件:
    
    security:
    authorization:enabled
    
    重启服务:
    
    
    连接:
    # mongo -u 用户名 -p 密码 --authenticationDatabase py3


    主从 副本集

    # 1 主从关系
    
        工作服务器
        请求 ---->>负载均衡
        备份服务器 备份服务器
    
    # 2 数据的冗余备份 并在多个服务器上储存数据副本 , 提高数据的可用性, 和安全性
    
        复制还允许 从硬件故障和服务中断中恢复数据
    
    # 3
    
    复制至少需要两个节点 A,B。。
    A是主节点 负责处理客户端的请求
    其余的都是从节点,负责复制主节点上的数据
    搭配方式有:一主多从 一主一从
    #心跳 主节点会记录在其上所有的操作- - 从节    点定期的轮训主节点上的操作记录, 对自己    的数据副本进行相同的操作 保持主从一致性
    #无宕机切换 主节点宕机--变成从节点,从节点变成主节点
    #备份
    
     
    
    # 创建副本集 --- 实现数据备份
    
    
    开启两个服务终端
    
    mongod --bind_ip xxxxxx --port 20717 --dbpath 数据库文件夹 --replSet rs0
    
    mongod --bind_ip xxxxxx --port 20718 --dbpath 数据库文件夹 --replSet rs0
    
    再开两个客户端 -- 连接终端
    
    mongo --host xxxxx --port xxxx
    
    mongo --host xxxxx --port xxxx
    
    
    rs.initiate() 设置初始化 设为主节点
    rs.status() 查看状态
    
    rs.add("ip,port") 添加 从节点
    
    
    在主的数据库中写入数据 从的数据库也会有 # 心跳
    
    在从的数据库中查询需要 设置权限
    
    rs.slaveOk()
    
    
    删除节点:
    rs.remove("ip,port")
    
     
    模拟主从切换 两个服务端 关闭 开启 --- 再连接 主从自动切换
    
     


    与python的交互:

    from pymongo import *
    
    
    #  建立连接
    client=MongoClient("mongodb://localhost:27017")
    
    # client = MongoClient("127.0.0.1",27017)
    
    #  切换数据库  use
    db=client.sub
    
    db = client["sub"]
    
    # 获取集合
    t1=db.t1
    
    # print(db.collection_names()) --- 查看当前所有的表
    
    
    
    # 增加   insert_one
    
    # ob=t1.insert({"name":"张三"})  # 数据的ID 对象
    # t1.insert_one({"name":"张三"})  # 数据的ID 对象
    # print(ob)     # 5a06c29a36dc0d1b24ab4132  ObjectId("5a06c26436dc0d1a5c4891ab"),
    
    # print(t1.insert_many[,,,].inserted_ids)   inserted_ids -- 返回id
    
    # 修改   update_one  update_many 全部修改
    
    # t1.update({"name":"李四"},{"$set":{"name":"张三"}})
    # t1.update_many({"name":"张三"},{"$set":{"name":"李四"}})
    
    
    # 删除   delete_one  delete_many
    
    # t1.delete_many({"name":"张三"})
    
    
    # 查询   find
    
    # find() 得到的是一个 迭代器 
    
    # 
    
    # cursors=t1.find({"age":{"$gt":1}}).skip(1).sort("age",-1)
    # for cur in cursors:
    #     print(cur["name"])
    
    
    from pprint import pprint
    
    for item in cursors:
        print(item) #    格式化显示 数据


    3 redis


    • 简介:

    Redis 是基于内存的数据库(数据和key放在内存里)。内存满了以后就会开始自动删除数据

    url一般放在redis里面,爬取到的数据放在MongoDB里面

    MongoDB,只用来保存数据。爬到的数据存到里面就不管了。

    Redis, 更像一个队列,有源源不断的URL进去,有源源不断的URL出来,

    URL用过一次以后不需要,随着爬取到的数据一起存入MongoDB里面

    MongoDB 不是内存型数据库,只不过把所有文件索引存到内存里而已。
    同样的机型,用MongoDB会比Redis存更多,但Redis响应更快。关键的是看量有多大

    可以把MongoDB当成MySQL, 把Redis当成内存

    数据交换用Redis. 数据持久化用MongoDB


    • 下载安装预配置


    下载:

    github  windows版本  https://github.com/MicrosoftArchive/redis
    
    下载解压完成
    
     
    启动 redis :
    
     redis-server     安装路径+ redis.windows.conf
     
    
    安装 redis windows 服务:


    redis 的安装与部署 6379

    windows 下
    
    ===服务端===
    
    配置 service
    redis-server --service-install D:\redis\redis.windows.conf
    删除 service
    redis-server --service-uninstall
    
    启动redis-server --service-start
    停止 redis-server --service-stop
    
    ===客户端===
    
    启动 redis-cli
    退出 exit
    
    
    ===============================================
    
    配置文件 redis.conf
    
    daemonize yes 后台运行
    
    pidfile --- 记录pid
    
    port
    
    bind ip
    
    loglevel 日志信息
    
    save 900 1 900s 1次写操作 -- 物理写操作一次
    save 300 10
    save 60 10000
    
    dbfilename 默认物理存储 路径
    
    ====================================================================================
    
    
    redis-server  --service-install  redis.windows.conf   # 安装为 windows  service服务
    
    redis-server  --service-uninstall  #  卸载
    
    redis-server  --service-start     #  启动
    
    redis-server  --service-stop         # 停止


    redis 的配置文件:

    daemonize no -->> daemonize yes   是否在前端或后端运行(守护进程)
    
    bind 127.0.0.1  默认是绑定本机  注释后 允许slaver端 连接到 master端


    redis master slaver 测试:

    redis-server 路径+redis.windows.conf   #启动 master server 端 redis 
    
    redis-cli    启动 mster client 端 
    
    set key 123
    
    get key ---123
    
    
    redis-cli -h ip                  #启动 slaver 端 redis
    get key  --123


    • redis 语法:

        # 数据库切换 select 1 (默认36个数据库 默认在0)
      
      
      
        # 数据类型
      
          string 是基本数据类型
      
              是 redis的基本数据类型
      
              最大能存储 512 MB的数据
      
              string 类型是二进制安全的  -- 可以为任何数据 数字 图片 序列化 对象
      
      
        基本命令:
      
            设置键值:
            set key value
      
            获取 值
            get key --value
            mget key1,key2 -- value1,value2 # 获取多个值
      
            运算:
      
            incr key  ---    将 key 对应的 value 加 1
            incrby key increment   将 key 对应的 value 加 increment
      
            decr key  ----  将 key 对应的 value 减 1
            decrby key decrment  将 key 对应的 value 减 decrement
      
            追加--在原有的基础上添加 值:
      
            append key value  在原有的基础上添加 值
      
            字符长度:
      
            strlen key
      
            键命令:
      
            keys *  查看当前所有的key  通配符 *
            keys *1*  正则匹配
      
            exits key  是否存在  1 0  真假
      
            type key 查看键 对应值的属性
      
      
            expire key seconds   设置 有效时间
      
            ttl key 查看剩余 时间
      
            del key  删除 键值对
      
        ==============================================
      
        hset 字典
      
            hash 命令:( 存对象 属性+值 )
            hash用于    存储 对象 ;  对象的格式是 键值对
      
            命令:
            设置:
      
                hset key field value  |  hset py  name "allp"
      
                hmset key field value [field value]
      
            获取
                hget py name -- allp
      
                hgetall py 获取所有的属性和值 --- 奇数的是属性  偶数的是值
                hkeys py 获取所有的属性
                hvals py 获取所有的值
      
                hlen py  属性的个数
                hstrlen py name   ---某个属性对应的值得长度
      
                hexists py name ----是否存在属性
            删除:
                hdel py name   ---删除某一个属性
      
        ============================================================
      
        list命令:(  数组-- 两侧都可以进入数据)   一个键 维护多个值
        添加的 顺序
            设置:
      
                lpush py1 alex
                rpush py1 egon
      
                linsert py1 before alex name
                linsert py1 after egon  male
      
                lrange py1 0 -1 查看所有元素
      
                blpop py1 alex
                brpop py1 egon  # 阻塞 时间 timeout
      
                lpop py1     # 不会等待
                rpop py2
      
                llen py1   # 列表长度
      
                lindex  py1  index
      
                ltrim py1 0  3  只保留 索引 0到3的数据  其他的都删除
      
        ======================================================
      
        set 命令 (无序 唯一不重复 ):
      
            设置:
                sadd key members(可以多个)
            获取:
                smembers key
      
                scard key  元素个数
      
            交集:
                sinter  py1 py2
            差集:
               sdiff  py1  py2
            并集:
                suinion py1 py2
      
            判断是否在某个集合中
                sismember py1 haha
      
            spop  py1  随机删除一个元素 并返回
      
            srandmember py1 3  随机取出3个元素
      
         ===============================================================
      
        zset 有序集合: sorted set
                  按照权重排序
      
              设置:
                   zadd myset 权重 "xxx"  权重 "ooo"
                   zadd zcourse_set 0 scrapy 1 django 5 scrapy-redis
      
              获取:
                zrangebyscore zcourse_set 0 1        # 权重
      
                zrange myset start stop      #   zrange py1 0 -1
      
                zcard myset  ---查看元素个数
      
                zcount myset min max --返回权重 在 min 和max之间值 的 元素个数
      
                zscore myset xxx 查看元素的权重
      
      
      
        redis 内部实现发布订阅
      
            信息推送
      
            消息的格式:
                类型:
                subscribe:订阅成功
                unsubscribe:取消订阅
                message: 其他终端发布消息
                命令:
            订阅:
                subscribe py111 可以多个频道
      
            取消订阅:
                ctrl c
      
            发布:(另外的一端 发布消息)
                publish 频道 消息
      
      
        # redis.conf
      
        配置主从
      
        主
            修改 绑定
            bind ip ==== 主 master
      
        从
            bind ip ==== 从 slavor
            slaveof 主ip port
      
      
        登录 redis-cli -h ip主
      
            redis-cli -h ip从 自动备份主的数据
      
      
        自动完成 数据备份


    • 与python的交互

        # import redis  # 引入模块
      
        # 连接
      
        # r=redis.StrictRedis(db=0,host="localhost",port=6379,)
      
        # 数据操作 1 
      
            直接操作
            # r.set("0","0")
      
        # 数据操作  2 
      
            pipeline 缓存多条命令  然后一次性执行
      
            # pipe=r.pipeline()
            # pipe.set("name","hello")
            # pipe.get("name")
            #
            # pipe.execute()
      
            # print(r.ping())
      
      
        #   自己实现封装
      
        # class myRedis:
        #     def __init__(self,host,port):
        #         self._redis=redis.StrictRedis(host,port)
        #     def set(self,key,value):
        #         self._redis.set(key,value)
        #     def get(self,key):
        #         return self._redis.get(key)
        # myr=myRedis("127.0.0.1",6379)
        # print(myr.get("py5").decode("utf-8"))

    转载于:https://www.cnblogs.com/big-handsome-guy/p/8600788.html

    展开全文
  • 文章目录前言模块划分存储部分程序实例 前言 小伙伴在面试的时候,有没有被问道过:如何设计一个关系数据库?...存储管理:将数据的逻辑关系转换为物理存储关系 缓存机制:主要是优化执行效率 SQL解析:

    前言

    小伙伴在面试的时候,有没有被问道过:如何设计一个关系型数据库?如果你没有看过本文,又不谙此道,那肯定会慌张不易,答不到点子上。别慌,接下来我们一起来简单了解一下吧。

    模块划分

    如何设计一个关系型数据库?其实只需要划分为两个部分,如下图所示:
    在这里插入图片描述

    存储部分

    该部分类似于一个文件系统,将数据持久化到存储设备当中

    程序实例

    程序实例主要是对存储进行逻辑上的管理,划分为8个子模块:

    • 存储管理:将数据的逻辑关系转换为物理存储关系
    • 缓存机制:主要是优化执行效率
    • SQL解析:将SQL语句进行解析
    • 日志管理:记录操作
    • 权限划分:进行多用户管理
    • 容错机制:灾难恢复
    • 索引管理:优化数据查询效率
    • 锁管理:支持并发操作

    看完过后是不是觉得很简单呢,当然这属于看着简单,实现复杂系列。

    展开全文
  • 在Oracle数据库的存储结构包括物理存储结构和逻辑存储结构。...逻辑存储结构主要描述Oracle数据库内部数据的组织和管理方式,与操作系统没有关系。最大的逻辑分组是数据库,即数据文件、控制文件、联机日志文件的
  •  ORACEL数据库中的数据逻辑存储在TABLESPACE中,同时物理存储在数据文件中。要了解数据库存储结构,就要先了解数据库中的数据是存放在哪里,以及存放数据库的逻辑空间名。  ORACLE中对数据的存储分了四层,...
  • SQL Server 2008数据库设计与实现(关系数据库实现的通关宝典) 基本信息 原书名: Pro SQL Server 2008 Relational Database Design and Implementation 原出版社: Apress 作者: (美)Louis Davidson Kevin Kline ...
  • SQL Server 2008数据库设计与实现(关系数据库实现的通关宝典) 基本信息 原书名: Pro SQL Server 2008 Relational Database Design and Implementation 原出版社: Apress 作者: (美)Louis Davidson Kevin Kline ...
  •  ORACEL数据库中的数据逻辑存储在TABLESPACE中,同时物理存储在数据文件中。要了解数据库存储结构,就要先了解数据库中的数据是存放在哪里,以及存放数据库的逻辑空间名。 ORACLE中对数据的存储分了四层,根据...
  • 我们都知道Greenplum架构中的每一个segment都是postgresql的实例,而vacuum是postgresql中常用的数据库维护的命令,所以Greenplum数据库也使用vacuum来定期...因为MVCC机制,delete和update的元组是没有从表中物理删掉
  • 用户和表空间没有隶属关系,表空是一个用来管理数据存储逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。 用户属于数据库实例的,...
  • 在Oracle中,结合逻辑存储与物理存储的概念,我们可以这样来理解数据库、表空间、SCHEMA、数据文件这些概念:  数据库是一个大圈,里面圈着的是表空间,表空间里面是数据文件,那么schema是什么呢?schema是一个...
  • 分布式数据库HBASE快速入门 1 什么是HBASE 1.1. 概念特性 HBASE是一个数据库----可以提供数据的实时随机读写 HBASE与mysql、oralce、db2等关系型...e Hbase的表在物理存储上,是按照列族来分割的,不同列族的数据一
  • 数据库性能优化技术

    2018-03-22 21:37:20
    概述 优化数据库性能,可从开发工具、数据库设计、应用程序结构、查询设计、数据库访问接口等方面选择。...改善物理数据库存储 与每个表的列相关的数据类型应反映数据所需最小空间。 把文本或图...
  • 数据库是一个大圈,里面圈的是表...数据文件是一个物理概念,是具体存储数据的物理文件。一个数据文件只能属于一个表空间,一个表空间可以包含一个或多个数据文件,一个数据库由多个表空间组成,但是一个表空间只能属
  • 一、HBASE基础概念 1.HBASE概念 HBASE是一个数据库----可以提供数据的实时随机读写。HBASE与mysql、oralce、db2、sqlserver等关系数据库不同,它是一个NoSQL数据库(非关系数据库) ...- HBase的表在物理存储上,是
  • 是不是经常会听到有人吐槽查询有多慢,娃都...数据存储结构不合理一般关系数据库物理存储分为堆和B+树,一般索引的存储结构为B+树,而数据表如果没有建立聚集索引的话,数据就是堆存储。这两种存储结构会很大程...
  • 深入了解-数据库建索引

    万次阅读 2018-05-01 11:03:02
    我们先看看索引的定义:[在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。...
  • 1.ORACLE数据库与实例的区别 1.1数据库(DATABASE):物理操作系统文件或磁盘的集合。...就算没有磁盘存储数据库实例也能存在。 1.3实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实...
  • 其实,数据的加密与否只是数据的一个属性,数据的加密存储是数据的一种保存方式,关乎数据的物理存储,这些都是DBMS现有功能的一部分。另外从数据和应用程序的分离、数据的维护和安全来看,数据库加密都应当在DBMS内...
  • 初学数据库视频中的索引,了解到在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑...
  • 2. 对数据库物理存储方式的描述称为( 内模式 ) 3. 在数据库三级模式间引入二级映象的主要作用是( 提高数据与程序的独立性  ) 4. 视图是一个“虚表”,视图的构造基于( 基本表或视图 ) 5. 如何构造出一个...
  • 对数据库中数据加密是为增强普通关系数据库管理系统的安全性,提供一个安全适用的数据库加密平台,对数据库存储的内容实施有效保护。它通过数据库存储加密等安全方法实现了数据库数据存储保密和完整性要求,使得...
  • 数据库是长期存储在计算机内,有有组织的,可共享的数据集合。 关系代数中专门的关系运算包括选择,投影, 连接等。 说明视图与基本表的区别和联系。 区别: 视图没有实际的物理记录;而表有。 视图是窗口;...
  •  数据库系统(DBS):即是采用了数据库技术的计算机系统,是实现有组织地、动态存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源而组成的系统。  数据库技术:研究数据库的结构、存储、设计、管理和...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    17. 从存储结构的角度来说,Oracle数据库可分为物理结构和逻辑结构。 18. 表空间是Oracle数据库中数据的逻辑组织,每个数据库至少有一个SYSTEM系统表空间。 19.视图是一个表示表的数据的数据库对象,它允许用户从...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 202
精华内容 80
关键字:

关系数据库没有物理存储