精华内容
下载资源
问答
  • 一. Redis数据存储位置 ...RDB持久化():RDB持久化是指指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为

    一. Redis数据存储位置

    • redis是一个内存数据库, 因此数据基本上都存在于内存当中
    • 但是Redis会定时以追加或者快照的方式刷新到硬盘中.
    • 由于redis是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。

    二. Redis如何保证数据持久性

    • Redis保证数据持久性的方式有两种:
    • RDB持久化():RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
    • AOF持久化():一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。然后在服务重启以后,会执行这些命令来恢复数据。

    2.1 RDB持久化

    • RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

    RDB的优势:

    • RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
    • 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作
    • RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

    RDB的劣势:

    • RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。
    • 当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

    RDB的触发机制:

    • RDB持久化的触发机制有三种:save、bgsave、自动化

    2.1 save

    • 该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
    • 执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。

    在这里插入图片描述

    2.2 bgsave

    • 执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
    • 具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令。
      在这里插入图片描述

    2.3 自动触发

    • 在配置中集中配置 save m n 的方式,表示 m秒内数据集存在n次修改时,系统自动触发bgsave 操作。

    2.2 AOF持久化

    • 全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
    • 然后在服务重启以后,会执行这些命令来恢复数据。

    AOF文件重写:

    • AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。为了压缩aof的持久化文件。redis提供了bgrewriteaof命令。将内存中的数据以命令的方式保存到临时文件中,同时会fork出一条新进程来将文件重写。。
    • AOF 文件重写就是把 Redis 进程内的数据转化为写命令,然后同步到新的 AOF 文件中。在重写的过程中,Redis 服务器会创建一个新的 AOF 文件来替代现有的 AOF 文件,新、旧两个 AOF 文件所保存的数据库状态相同,但是新的 AOF 文件不会包含冗余命令。

    AOF触发机制:

    • appendfsync always:每次收到写命令就立即强制写入磁盘
    • appendfsync everysec:每秒钟强制写入磁盘一次,在性能和持久化方面做平衡,推荐该方式。
    • appendfsync no:完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不推荐。
    展开全文
  • 数据库索引 - 数据存储 数据存储 数据存放在哪里 当然是存放在硬盘了; 但是, 我们怎么找到具体数据库文件物理地址呢? 首先, 我们要先查找到表oid, 然后再去数据库存储数据目录; select oid,relfilenode from...

    数据库索引 - 数据存储

    数据存储

    数据存放在哪里

    当然是存放在硬盘中了;
    但是, 我们怎么找到具体数据库文件的物理地址呢?

    首先, 我们要先查找到表的oid, 然后再去数据库存储数据的目录;

    select oid,relfilenode from pg_class where relname='product';
    

    在这里插入图片描述

    安装pg的时候, 会让你指定数据存放的地址;
    我的是 D:\env\pg\data;

    所以, 我需要找的地址是:
    D:\env\pg\data\base\16394\16502

    如何存储数据

    我们找到了具体的位置.
    那么, 数据库是如何储存这些数据的呢?

    我们知道计算机中的最小单位是bit;
    而操作系统管理计算机硬件的最小单位是 一页 (4KB);
    所以文件大小和文件所占磁盘空间大小是不一样的;
    可能文件只有1kb, 但是却占了磁盘空间的4kb;

    同样, 数据库管理文件也有一个最小单位: block_size 或者 page_size

    SELECT current_setting('block_size');
    

    通过sql 我们可以得知:
    pg 数据库默认的page大小是 8KB;

    我们可以在 D:\env\pg\data\base\16394 这个目录下, 查看文件:
    会发现很多文件都是 8kb的倍数;

    推荐阅读:

    linux空白文件大小为4kb简单解释

    InnoDB一棵B+树可以存放多少行数据?

    为什么block_size设置成8kb

    是为了性能!

    但是, 为什么8kb是相对较好的选择呢?

    我找到了一些有趣问题与回答

    推荐阅读

    Should the database block size always be 8K?

    Re: Performance block size.

    storage-page-layout

    如何查看表所占空间

    通过pg提供的语句, 可以很方便地查看到表 所占空间的大小

    -- 表大小 (包括 索引)
    select pg_size_pretty(pg_total_relation_size('product'));
    -- 主键id 索引大小
    select pg_size_pretty(pg_relation_size('product_pkey'));
    

    查看product表占用的空间 大概 1256 MB
    主键id 索引占用的空间 大概 214 MB

    create extension pgstattuple;
    SELECT * FROM pgstatindex('product_pkey');
    

    查看索引详情

    pg 分析语句

    row是怎么存储的

    下面的大部分内容翻译自 introduction-to-postgres-physical-storage

    我们知道数据库 表是以 page 为最小的存储单元的 (pg 默认是8KB);
    所有的page是逻辑相等的, 因此 row (行) 可以被存储到表中的任何一页.

    存储表的结构是一个 堆文件 (heap file).
    堆文件包含了很多的无序记录;

    pg 是堆表; mysql 是索引表;

    一个数据 page 的结构大致是 (图是抄的)

    在这里插入图片描述

    它包含了很多的 header, 提供一些校验和(checksum), 可用空间的起始位置, 终点位置等等
    header 后面是 items ;
    items 是一个标识符的数组, 它指向了实际的数据行.

    由于item标识符在释放之前不会移动,所以可以长期使用它的索引来引用项目,甚至当项目本身在页面上移动以压缩空闲空间时也是如此。
    item的指针叫做 CTID (ItemPointer), 是由pg创建的;
    它包含了 页号 (page number) 和 item 标识符的索引;

    SELECT ctid, * from product
    limit 200
    

    总之, 在page中 指向row的指针储存在开始位置,
    而实际的数据行 (row / tuples) 存储在 page的后面;

    推荐阅读

    Database Cluster, Databases, and Tables

    表中最多能有多少列

    答: 取决于不同的列的类型, 最大列数在 250 到 1600 之间;
    列的类型会影响, 是因为在pg中数据行需要在8kb以内 (也就是1 page), 不能够跨页存储;

    列中的数据不能超过8kb吗

    答: 列中的数据可以超过8kb;

    pg有一个机制叫做 TOAST, 它可以处理列中的 大值;
    但是, 这里仍然会对表的列的数量有一个限制;
    因为存储列的指针也是要空间的;

    TOAST 是干什么的

    TOAST 是 过大属性存储技术(The Oversized-Attribute Storage Technique)
    至于为啥缩写是TOAST … 我也不清楚…

    pg 使用固定的大小的page (默认是8kb), 并且不允许数据行跨页.
    因此, 在数据page 中必然无法直接存储非常大的字段值;

    当一个行中数据超过了页的大小, TOAST 基本上会把数据拆分成更小的 pieces, 把它们存储到 TOAST table
    每个表都有自己唯一的 TOAST table, 它们是对用户透明的;

    该机制是通过将大型列条目分割为2KB并将它们作为块存储在TOAST table 中来实现的。

    TOAST 与直接跨页存储值相比, 拥有许多有优势;

    • TOAST过的列, 只有在返回给客户端时才会去读取
    • 数据表会变得更小, 使得更多的数据行存储在 shared buffer
    • 变得更小, 意味着排序可以在内存中进行
    展开全文
  • lnmp 环境,用户的数据大都放在 mysql , postgresql 数据库中,那像 bitcoin , openbaazar,alexadria library(decentralized) 这类区块链的网站和应用,用户的交易记录和商品的图片,用户的视频,文字都放在哪里?...
  • redis的数据存储在哪里

    千次阅读 2020-06-09 15:38:30
    首先要明白redis是一个数据库 redis是一个内存数据库, 所有数据基本上都存在于内存当中, 会定时以追加或者快照方式刷新到硬盘. 由于redis是一个内存数据库, 所以读取写入速度是非常快, 所以经常被用来做数据...

    首先要明白redis是一个数据库 redis是一个内存数据库, 所有数据基本上都存在于内存当中, 会定时以追加或者快照的方式刷新到硬盘中. 由于redis是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。

    来源:https://zhidao.baidu.com/question/1514820040586721660.html

    展开全文
  • 数据库的数据独立性体现在哪里

    万次阅读 2017-09-25 09:43:02
     答:数据独立性表示应用程序与数据库中存储的数据不存在依赖关系,包括逻辑数据独立性和物理数据独立性。  逻辑数据独立性是指局部逻辑数据结构(外视图即用户的逻辑文件)与全局逻辑数据结构(概念视图)之间的独立...

    1、转自:http://blog.csdn.net/hfmbook/article/details/7591250


    什么是数据库的数据独立性?
        答:数据独立性表示应用程序与数据库中存储的数据不存在依赖关系,包括逻辑数据独立性和物理数据独立性。
        逻辑数据独立性是指局部逻辑数据结构(外视图即用户的逻辑文件)与全局逻辑数据结构(概念视图)之间的独立性。当数据库的全局逻辑数据结构(概念视图)发生变化(数据定义的修改、数据之间联系的变更或增加新的数据类型等)时,它不影响某些局部的逻辑结构的性质,应用程序不必修改。
        物理数据独立性是指数据的存储结构与存取方法(内视图)改变时,对数据库的全局逻辑结构(概念视图)和应用程序不必作修改的一种特性,也就是说,数据库数据的存储结构与存取方法独立。
    数据独立性的好处是,数据的物理存储设备更新了,物理表示及存取方法改变了,但数据的逻辑模式可以不改变。数据的逻辑模式改变了,但用户的模式可以不改变,因此应用程序也可以不变。这将使程序维护容易,另外,对同一数据库的逻辑模式,可以建立不同的用户模式,从而提高数据共享性,使数据库系统有较好的可扩充性,给DBA维护、改变数据库的物理存储提供了方便。


    2、牛客网习题:


    展开全文
  • 数据库是数据的集合,数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是怎样的,存储这些用户的数据的路径在哪里,这些信息不属于用户的信息,却是数据库维护和管理用户数据的核心,这些...
  • 远程数据库服务器感觉不稳定,导致事物还未提交,出现网络断开现象,有几次还导致事物回滚失败,把数据都丢失了,我想知道,hibernate 事物提交之前数据是缓存到了数据库所在服务器,还是java运行服务器上?...
  • 问题二:mysql5.5版本后默认数据库引擎InnoDB 索引文件在哪里 学索引时候5.5版本之前默认引擎为MyISAM,在data目录下每个数据库可有三个文件 .frm--存储数据表定义,此文件非MyISAM引擎一部分。 .MYD--存放真
  • 数据库的本地存储

    千次阅读 2016-08-24 11:19:00
    一、前言 ...二、商城应用购物车数据存储 ... 商城APP,我们需要把用户... 购物车数据存储在哪里?对于这个问题,解答有两个: 1、保存在云端(服务器)。如果我们客户端有Android版本,IOS版本,Web
  • redis存储关系性数据库数据

    千次阅读 2017-04-24 10:19:40
     最后决定先给数据库中常用一些静态表先加一层缓存。抛开数据库优化配置不说,数据库访问量下来了,内存肯定也不会高到哪里去。  因为这里缓存以后会存储更多需要精细化控制表信息,而且结合分布式场景...
  • 在这里,我提供了一个简单用户指南,以查找MySQL数据库在Windows和Linux中在哪里数据存储在我们硬盘。 视窗 1)找到my.ini ,该文件存储在MySQL安装文件夹。 例如, C:\Program Files\MySQL\MySQL...
  •  ORACEL数据库中的数据逻辑存储在TABLESPACE中,同时物理地存储在数据文件中。要了解数据库的存储结构,就要先了解数据库中的数据是存放在哪里,以及存放数据库的逻辑空间名。  ORACLE中对数据的存储分了四层,...
  • 我正在开发一个将数据存储在SQLite数据库中的Android应用程序。 我的问题是,当您使用模拟器时,此数据库文件存储在文件系统中的哪个位置?我已经看到它存储在/data/data/package_name/databases但我需要知道实际...
  • 使用SQLite API函数如有疑问,可以参考官方函数文档:http://www.sqlite.org/c3ref/funclist.html操作SQLite数据库SQLite数据库是文件数据库,是保存文件系统中的。因此需要知道文件保存到哪里,下面的代码中,...
  • 1. 什么是etcd? etcd是一个分布式一致性键值存储系统,用于共享配置和服务发现, etcd基于raft协议实现数据... 每次写入都是一个事务(tx)完成。 一个事务(tx)可以包含若干put(写入k-v键值对)操作...
  • 数据库的创建,获取,执行sql...5.如何修改数据库中的的数据? 框架思想 思考:如何使得编程更加简单? 一个sql语言,容易写错; 1.使用占位符; 2.框架解析重建法:搭建框架,对增删改查功能进行单独...
  • 100 行代码),它将 CRUD 功能注入到普通旧 Ruby 对象,并使用将数据存储在 YAML 文件。 非常适合创建小型应用程序(用于演示/原型设计) ,您只需要一个 YAML 文件即可存储所有内容并消除设置数据库的限制...
  • 现在有各种各样的数据管理系统来存储与管理数据:关系型数据库、NoSQL数据库,文档数据库、Key-value数据库,对象存储系统等等。形态多样的数据管理系统为企业组织管理数据上带来便利的同时,随之而来的是管理与...
  •  ORACEL数据库中的数据逻辑存储在TABLESPACE中,同时物理地存储在数据文件中。要了解数据库的存储结构,就要先了解数据库中的数据是存放在哪里,以及存放数据库的逻辑空间名。 ORACLE中对数据的存储分了四层,根据...
  • 8 数据库存储

    2012-08-28 17:34:00
    由于存储是在手机上,所以理解你所有选择是非常重要,这样你可以做出正确决定,在哪里存储信息以及采取最少系统资源来完成这件事。在这一章你将学习如何做这些决定以及如何实现它们。 存储数据 ...
  • 采访李飞飞表示,随着计算和数据上云趋势快速发展,传统数据库步履蹒跚,云原生数据库数据仓库利用云原生技术最大化发挥池化计算和存储资源弹性将是未来。同时随着AI技术不断深入使用,数据库也将会...
  • 最后,这些属性中的每一个包含什么类型的数据? SQL语句执行顺序 FROM :从逻辑上讲,这实际上是第一件事。 首先,我们要加载所有表中的所有行并将其联接。 尖叫和生气之前:同样,这是逻辑上首先发生的事情,而...
  • 如果没经验话遇到这个问题很难找到问题错在哪里。 处理方案: 只需要把bean里类型改为BigDecimal类型就可以。jsp和数据库不需要做改动,因为在查询时回显值是以bean类型为主。 顺便提下另外一个问题,
  • 给我们提供了5种数据存储方式1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据不同业务逻辑,或者需求,用不同实现方式以下是这几中数据存储...
  • 数据库的介绍

    2021-04-08 15:12:59
    数据存储在哪里:硬盘和内存 我们平时说的数据库数据库管理系统(软件)(Databases Manager System:DBS) 数据库软件(电脑Excel软件)可以创建多个文件夹(数据库(逻辑)) 一个数据库(一个Excel文件):...
  • Unity数据存储Sqlite的使用 是什么 Sqlite是一个SQL数据库引擎。 为什么 之前的项目基本都是使用PlayerPrefs来存储数据,但是由于后期...由于服务器的数据存储都是使用数据库SQL,因此打算前端也使用数据库存储...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 423
精华内容 169
关键字:

数据库中的数据存储在哪里