数据库
文章平均质量分 51
cwl_java
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据库MySQL-高可用与集群
第 2 章 高可用与集群2.1 MySQL 高可用的几种方案首先我们看看 MySQL 高可用的几种方案:对于数据实时性要求不是特别严格的应用,只需要通过廉价的 pc server 来扩展 Slave 的数量,将读压力分散到多台 Slave 的机器上面,即可通过分散单台数据库服务器的读压力来解决数据库端的读性能瓶颈,毕竟在大多数数据库应用系统中的读压力还是要比写压力大很多。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。MySQL Clu原创 2021-02-22 15:24:27 · 1553 阅读 · 2 评论 -
数据库MySQL-读写分离
第 1 章读写分离1.1 MySQL 主从复制的几种方案数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。从数据库的角度来说,对于大多数应用来说,从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即 SQL 查询的瓶颈,我们知道,正常情况下,Insert SQL 就是几十个毫秒的时间内写入完成,而系统中的大多数 Select SQL 则要几秒到几分钟才能有结果,很多复杂的 SQL,其消耗服务器 CPU 的能力超强,不亚于死循环的威力。在没有读写分离原创 2021-02-22 14:00:50 · 1142 阅读 · 0 评论 -
数据库MongoDB-Spring Data Mongod
MongoDB的集合操作MongoDB中的集合是一组文档的集,相当于关系型数据库中的表。 1. **语法格式**db.changeUserPassword(“用户名”,“新密码”)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52iBA5Y1-1611573489642)(https://uploader.shimo.im/f/63RzzTh3g1eUoVgZ.png!thumbnail?fileGuid=TVXCXINSEMcmZvkf)]如果.原创 2021-02-01 23:07:29 · 496 阅读 · 0 评论 -
数据库MongoDB-索引
MongoDB 索引索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对系统的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构创建索引在MongoDB中会自动为文档中的_Id(文档的主键)键创建索引,与关系型数据的主键索引类似。我们可以使用creat原创 2021-02-01 23:01:04 · 2347 阅读 · 0 评论 -
数据库MongoDB-聚合查询
MongoDB 聚合查询在MongoDB中我们可以通过aggregate()函数来完成一些聚合查询,aggregate()函数主要用于处理诸如统计,平均值,求和等,并返回计算后的数据结果。语法格式:db.COLLECTION_NAME.aggregate([{$group:{_id:"$分组键名","$分组键名",.....,别名:{聚合运算:"$运算列"}}},{条件筛选:{键名:{运算条件:运算值}}}])常见的mongo的聚合操作和mysql的查询做类比求和 - $sum查询dev集合中原创 2021-01-31 23:15:40 · 1792 阅读 · 0 评论 -
数据库MongoDB-排序
MongoDB 排序在 MongoDB 中使用 sort() 函数对查询到的文档进行排序,sort() 函数可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。语法格式:db.COLLECTION_NAME.find().sort({排序键:1})查询结果按照age升序排序。db.c1.find().sort({age:1});也可以对字符串进行排序,排序时按照编码顺序进行排序。支持中文等。虽然支持,但是平时还是多按照数值类型的属性原创 2021-01-31 23:09:52 · 1267 阅读 · 0 评论 -
数据库MongoDB-分页
分页MySQL:select * from table limit 起始索引,每页条数limit(数字)查询结果中前几个skip(数字)跳过结果中前几个跳过签个文档对象db.c1.find().skip(2)只要结果中前两行db.c1.find().limit(2)表示查询前两个文档对象,可用用在分页上,表示第一页数据。db.c1.find().skip(0).limit(2)...原创 2021-01-31 23:09:03 · 625 阅读 · 0 评论 -
数据库MongoDB-删除文档
删除文档remove()函数使用remove()函数可删除集合中的指定文档。语法格式:remove({指定删除条件},删除参数(可选参数))删除age为空的第一条数据。注意参数只能是1,不支持其他数字。db.c1.remove({age:{$exists:false}},1);删除所有age为空的数据。db.c1.remove({age:{$exists:false}});deleteOne()函数deleteOne()函数是官方推荐删除文档的方法。该方法只删除满足条件的第一条文档。原创 2021-01-31 23:08:07 · 646 阅读 · 0 评论 -
数据库MongoDB-类型操作符
类型操作符$type 操作符$type根据类型查询。可取值和JavaScript类型取值相同。number 数值string 字符串,注意s小写object 对象取出所有age里面是数值类型的文档对象db.c1.find({age:{$type:"number"}});可以借助$exists判断为空值的文档对象。db.c1.find({age:{$exists:false}});...原创 2021-01-31 23:06:20 · 476 阅读 · 0 评论 -
数据库MongoDB-逻辑操作符
逻辑操作符$and我们可以使用and操作符来表示多条件间的并且关系。由于and操作符来表示多条件间的并且关系。由于and操作符来表示多条件间的并且关系。由于and有多个条件,所以类型是数组类型[],每个元素都是一个条件{}语法格式为:find({$and:[{条件一},{,条件二},…]})查询所有年龄为18,并且名字为张三的文档对象db.c1.find({$and:[{age:18},{name:“张三”}]})$or我们可以使用$or操作符来表示多条件间的或者关系。语法格式为:find(原创 2021-01-31 23:05:24 · 535 阅读 · 0 评论 -
数据库MongoDB-文档操作
MongoDB的文档操作在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档,其实指的就是数据,也是我们平时操作最多的部分。MongoDB中的文档的数据结构和 JSON 基本一样。所有存储在集合中的数据都是 BSON 格式。BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。插入文档插入单个文档注意:新增时不需要考虑field,如果field已经存在则向指定field中新增。如果field不存在,则在collection中新添加一个fi原创 2021-01-31 23:01:22 · 703 阅读 · 1 评论 -
数据库MongoDB-集合操作
MongoDB的集合操作MongoDB中的集合是一组文档的集,相当于关系型数据库中的表。创建集合MongoDB使用db.createCollection()函数来创建集合。语法格式:db.createCollection(name, options)。name: 要创建的集合名称。options: 可选参数, 指定有关内存大小及索引的选项。options 可以是如下参数。字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的原创 2021-01-31 22:54:28 · 645 阅读 · 0 评论 -
数据库MongoDB-用户使用
MongoDB用户使用创建DB管理用户mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可。另外管理员账户必须在admin数据库下创建。小技巧:由于用户被创建在哪个数据库下,就只能在哪个数据库登录,应该把所有的用户都创建在admin数据库下。先use admin数据库,进行登录,登录后use其他数据库原创 2021-01-25 19:48:09 · 768 阅读 · 0 评论 -
数据库Mongodb-用户权限列表
Mongodb用户权限列表read允许用户读取指定数据库readWrite允许用户读写指定数据库dbAdmin允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限readAnyDatabase只在admin数据库中可用原创 2021-01-25 19:40:29 · 784 阅读 · 0 评论 -
数据库MongoDB-下载与安装
MongoDB的下载与安装下载MongoDB下载地址:https://www.mongodb.com/download-center/community安装MongoDB在Linux平台的MongoDB为解压版。我们只要解压tgz文件就可以使用。安装依赖MongoDB4.2.3需要依赖openssl10相关资源,必须先在Linux中安装openssl10。把compat-openssl10-1.0.2o-3.el8.x86_64.rpm上传到/opt中# yum install -y ma原创 2021-01-25 19:39:41 · 919 阅读 · 0 评论 -
数据库MongoDB-与关系型数据库对比
MongoDB与关系型数据库对比与关系型数据库术语对比[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5QnIbaN-1611573489630)(https://uploader.shimo.im/f/nesH8LTfPR9UV5KY.png!thumbnail?fileGuid=TVXCXINSEMcmZvkf)]存储数据对比[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCeebfw9-1611573489631)(https:/原创 2021-01-25 19:22:22 · 729 阅读 · 0 评论 -
数据库-MongoDB简介
MongoDB简介什么是MongoDBMongoDB是一个基于分布式文件存储的数据库。由C++语言编写。在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索原创 2021-01-25 19:19:52 · 356 阅读 · 0 评论 -
数据库PostrageSQL-测试覆盖检查
33.5. 测试覆盖检查PostgreSQL 源代码可以使用覆盖测试指令编译,因此可以检查哪些部分的代码被回归测试或任何其他测试套件所覆盖。当前使用 GCC 编译时支持该特性,并且需要gcov和lcov程序。一个典型的工作流程看起来是:./configure --enable-coverage ... OTHER OPTIONS ...makemake check # 或其他测试套件make coverage-html然后将你的 HTML 浏览器指向coverage/index.html。ma原创 2021-01-11 21:26:13 · 598 阅读 · 0 评论 -
数据库PostrageSQL-TAP 测试
33.4. TAP 测试很多测试,特别是src/bin下面的客户端程序测试使用 Perl 的 TAP 工具并且用Perl测试程序prove运行。你可以通过 设置make变量PROVE_FLAGS 向prove传递命令行选项,例如:make -C src/bin check PROVE_FLAGS='--timer'详见prove的手册页。make变量PROVE_TESTS可被用来定义一个空格分隔的列表,其中是调用prove来运行的指定测试子集的路径,这些测试子集将取代默认的t/*.pl,并且这些路原创 2021-01-11 21:22:27 · 745 阅读 · 1 评论 -
数据库PostrageSQL-变体比较文件
33.3. 变体比较文件因为某些测试生来就会产生依赖环境的结果,我们提供了方法来指定替代的“预期”结果文件。每一个回归测试可以有多个比较文件来展示在不同平台上的可能结果。有两种独立的机制来决定为每一个测试使用哪个比较文件。第一种机制允许为指定平台选择比较文件。这是一个映射文件src/test/regress/resultmap,它定义了为每一个平台使用哪个比较文件。要为一个特定平台消除虚假的测试“失败”,你可以首先选择或创建一个变体结果文件,然后在resultmap文件中增加一行。在该映射文件中的每一原创 2021-01-11 21:15:26 · 449 阅读 · 0 评论 -
数据库PostrageSQL-测试评估
33.2. 测试评估一些正确安装的并且全功能的PostgreSQL安装可能会在这些回归测试中的某些上“失败”,其原因是平台相关的因素,例如可变浮点表示和 message wording。这些测试目前采用diff命令来比较测试输出和在参考系统上产生的输出,这样测试的结果对小的系统差异也很敏感。当一个测试被报告为“失败”时,请总是检查实际结果和期望结果之间的差异,你可能会发现该差异其实并不明显。不管怎样,我们将努力维护在所有被支持平台上的准确的参考文件,以期待所有的测试都能通过。回归测试的实际输出在src/原创 2021-01-11 09:44:06 · 545 阅读 · 0 评论 -
数据库PostrageSQL-回归测试
Chapter 33. 回归测试回归测试是PostgreSQL中对于 SQL 实现的一组综合测试集。它们测试标准 SQL 操作以及PostgreSQL的扩展能力。33.1. 运行测试回归测试可以在一个已经安装并运行的服务器上运行,或者在编译树中的一个临时安装上运行。此外,还有运行该测试的“并行”和“顺序”模式。顺序方法单独运行每一个测试脚本,而并行方法则开启多个服务器进程来并行地运行多组测试。并行测试能够发现进程间通信和锁定是否工作正确。33.1.1. 在一个临时安装上运行测试要在编译之后且在安装原创 2021-01-11 09:43:44 · 748 阅读 · 0 评论 -
数据库PostrageSQL-可扩展性
32.4. 可扩展性32.4.1. 对扩展的内联支持PostgreSQL的JIT实现可以内联C以及internal类型的函数体,还有基于这类函数的操作符。为了能对扩展中的函数这样做,需要让那些函数的定义可用。在使用PGXS对一个已经编译有LLVM JIT支持的服务器构建一个扩展时,相关的文件将被自动构建并且安装。相关的文件必须被安装在$pkglibdir/bitcode/$extension/中并且对它们的一份概要必须被安装在$pkglibdir/bitcode/$extension.index.b原创 2021-01-11 09:43:23 · 589 阅读 · 0 评论 -
数据库PostrageSQL-配置
32.3. 配置配置变量jit决定启用或者禁用JIT编译。如果它被启用,配置变量jit_above_cost、jit_inline_above_cost以及jit_optimize_above_cost判断是否要为一个查询执行JIT编译以及在执行中花费多大的努力。jit_provider决定使用哪一种JIT实现。很少需要改变这一设置。见Section 32.4.2。 如Section 19.17中所述,对于开发和调试目的,还有一些额外的配置参数存在。...原创 2021-01-11 09:43:10 · 525 阅读 · 0 评论 -
数据库PostrageSQL-什么时候会用JIT?
32.2. 什么时候会用JIT?JIT编译主要可以让长时间运行的CPU密集型的查询受益。对于短查询,执行JIT编译增加的开销常常比它节省的时间还要多。为了判断是否应该使用JIT编译,会用到一个查询的总的估计代价(见Chapter 70和Section 19.7.2)。查询的估计代价将与jit_above_cost的设置进行比较。如果代价更高,JIT编译将被执行。然后需要两个进一步的决定。首先,如果估计代价超过jit_inline_above_cost的设置,该查询中使用的短函数和操作符都将被内联。原创 2021-01-11 09:42:55 · 582 阅读 · 0 评论 -
数据库PostrageSQL-什么是JIT编译?
Chapter 32. 即时编译(JIT)这一章解释什么是即时编译以及如何在PostgreSQL中配置即时编译。32.1. 什么是JIT编译?即时(Just-In-Time,JIT)编译是将某种形式的解释程序计算转变成原生程序的过程,并且这一过程是在运行时完成的。例如,与使用能够计算任意SQL表达式的通用代码来计算一个特定的SQL谓词(如WHERE a.col = 3)不同,可以产生一个专门针对该表达式的函数并且可以由CPU原生执行,从而得到加速。当使用–with-llvm编译PostgreSQL后原创 2021-01-10 01:27:00 · 684 阅读 · 0 评论 -
数据库PostrageSQL-快速设置
31.9. 快速设置首先在postgresql.conf中设置配置选项:wal_level = logical对于一个基础设置来说,其他所需的设置使用默认值就足够了。需要调整pg_hba.conf以允许复制(这里的值取决于实际的网络配置以及用于连接的用户):host all repuser 0.0.0.0/0 md5然后在发布者数据库上:CREATE PUBLICATION mypub FOR TABLE users, departments;并且在订阅者数据库上:CREATE SUBSCR原创 2021-01-10 01:24:56 · 570 阅读 · 0 评论 -
数据库PostrageSQL-配置设置
31.8. 配置设置逻辑复制要求设置一些配置选项。在发布者端,wal_level必须被设置为logical,而max_replication_slots中设置的值必须至少是预期要连接的订阅数加上保留给表同步的连接数。max_wal_senders应该至少被设置为max_replication_slots加上同时连接的物理复制体的数量。订阅者还要求max_replication_slots被设置。在这种情况下,它必须至少被设置为将被加入到该订阅者的订阅数。max_logical_replication_原创 2021-01-10 01:23:05 · 734 阅读 · 0 评论 -
数据库PostrageSQL-安全性
31.7. c用于复制连接的角色必须有REPLICATION属性(或者是一个超级用户)。该角色的访问必须被配置在pg_hba.conf中,并且它必须有LOGIN属性。为了能够拷贝初始表数据,用于复制连接的角色必须在被发布的表上具有SELECT特权(或者是一个超级用户)。要创建publication,用户必须在数据库中有CREATE特权。要把表加入到一个publication,用户必须在该表上有拥有权。要创建一个自动发布所有表的publication,用户必须是一个超级用户。要创建订阅,用户必须是一原创 2021-01-10 01:20:53 · 536 阅读 · 0 评论 -
数据库PostrageSQL-监控
31.6. 监控因为逻辑复制是基于与物理流复制相似的架构的,一个publication节点上的监控也类似于对物理复制主节点(见Section 26.2.5.2)的监控。有关订阅的监控信息在pg_stat_subscription中可以看到。每一个订阅工作者在这个视图都有一行。一个订阅能有零个或者多个活跃订阅工作者取决于它的状态。通常,对于一个已启用的订阅会有单一的应用进程运行。一个被禁用的订阅或者崩溃的订阅在这个视图中不会有行存在。如果有任何表的数据同步正在进行,对正在被同步的表会有额外的工作者。原创 2021-01-10 01:19:29 · 460 阅读 · 0 评论 -
数据库PostrageSQL-架构
31.5. 架构逻辑复制从拷贝发布者数据库上的数据库快照开始。拷贝一旦完成,发布者上的更改会在它们发生时实时传送给订阅者。订阅者按照数据在发布者上被提交的顺序应用数据,这样任意单一订阅中的publication的事务一致性才能得到保证。逻辑复制被构建在一种类似于物理流复制(见Section 26.2.5)的架构上。它由“walsender”和“apply”进程实现。walsender进程开始对WAL的逻辑解码(在Chapter 49中描述)并且载入标准逻辑解码插(pgoutput)。该插件把从WAL原创 2021-01-10 01:12:41 · 830 阅读 · 3 评论 -
数据库PostrageSQL-限制
31.4. 限制逻辑复制当前有下列限制或者缺失的功能。这些可能在未来的发行中解决。数据库模式和DDL命令不会被复制。初始模式可以手工使用pg_dump --schema-only进行拷贝。后续的模式改变需要手工保持同步(不过值得注意的是,模式其实不需要在两端保持绝对相同)。当一个活跃的数据库中模式定义改变时,逻辑复制是鲁棒的:当模式在发布者上发生改变并且被复制的数据开始到达订阅者但却不适合表模式时,复制将报错,直至模式被更新。在很多情况下,可以通过先对订阅者应用额外的模式更改来避免间歇性的错误。序列原创 2021-01-10 01:10:24 · 511 阅读 · 0 评论 -
数据库PostrageSQL-冲突
31.3. 冲突逻辑复制的行为类似于正常的DML操作,即便数据在订阅者节点本地被修改,逻辑复制也会根据收到的更改来更新数据。如果流入的数据违背了任何约束,复制将停止。这种情况被称为一个冲突。在复制UPDATE或DELETE操作时,缺失的数据将不会产生冲突并且这类操作将被简单地跳过。冲突将会产生错误并且停止复制,它必须由用户手工解决。在订阅者的服务器日志中可以找到有关冲突的详细情况。通过更改订阅者上的数据(这样它就不会与到来的数据发生冲突)或者跳过与已有数据冲突的事务可以解决这种冲突。通过调用pg_re原创 2021-01-10 01:08:21 · 608 阅读 · 1 评论 -
数据库PostrageSQL-订阅
31.2. 订阅订阅是逻辑复制的下游端。订阅被定义在其中的节点被称为订阅者。一个订阅会定义到另一个数据库的连接以及它想要订阅的publication集合(一个或者多个)。订阅者数据库的行为与任何其他PostgreSQL实例相同,并且可以被用作其他数据库的发布者,只需要定义它自己的publication。如果需要,一个订阅者节点可以有多个订阅。可以在一对发布者-订阅者之间定义多个订阅,在这种情况下要确保被订阅的publication对象不会重叠。每一个订阅都将通过一个复制槽(见Section 26.原创 2021-01-10 01:06:45 · 703 阅读 · 0 评论 -
数据库PostrageSQL-逻辑复制
Chapter 31. 逻辑复制逻辑复制是一种基于数据对象的复制标识(通常是主键)复制数据对象及其更改的方法。我们使用术语“逻辑”来与物理复制加以区分,后者使用准确的块地址以及逐字节的复制方式。PostgreSQL两种机制都支持,请见Chapter 26。逻辑复制允许在数据复制和安全性上更细粒度的控制。逻辑复制使用一种发布和订阅模型,其中有一个或者更多订阅者订阅一个发布者节点上的一个或者更多publication 。订阅者从它们所订阅的publication拉取数据并且可能后续重新发布这些数据以允许级原创 2021-01-10 01:03:09 · 732 阅读 · 4 评论 -
数据库PostrageSQL-WAL内部
30.5. WAL内部WAL是自动被启用的。除了确保满足WAL日志存放所需要的磁盘空间以及一些必要的调优外(参阅Section 30.4),管理员无需执行任何操作。当每个新记录被写入时,WAL记录被追加到WAL日志中。 插入位置由日志序列号(LSN)描述,该日志序列号是日志中的字节偏移量, 随每个新记录单调递增。LSN值作为数据类型pg_lsn返回。 值可以进行比较以计算分离它们的WAL数据量,因此它们用于衡量复制和恢复的进度。WAL日志被存放在数据目录的pg_wal目录里,它是作为一个文件段的集合存原创 2021-01-08 21:02:49 · 488 阅读 · 0 评论 -
数据库PostrageSQL-WAL配置
30.4. WAL配置有几个WAL相关的配置参数会影响数据库性能。本节将解释它们的使用。关于服务器配置参数的设置的一般信息请参考Chapter 19。检查点是在事务序列中的点,这种点保证被更新的堆和索引数据文件的所有信息在该检查点之前已被写入。在检查点时刻,所有脏数据页被刷写到磁盘,并且一个特殊的检查点记录将被写入到日志文件(修改记录之前已经被刷写到WAL文件)。在崩溃时,崩溃恢复过程检查最新的检查点记录用来决定从日志中的哪一点(称为重做记录)开始REDO操作。在这一点之前对数据文件所做的任何修改都已经原创 2021-01-08 20:58:59 · 584 阅读 · 0 评论 -
数据库PostrageSQL-异步提交
30.3. 异步提交异步提交是一个允许事务能更快完成的选项,代价是在数据库崩溃时最近的事务会丢失。在很多应用中这是一个可接受的交换。如前一节所述,事务提交通常是同步的:服务器等到事务的WAL记录被刷写到持久存储之后才向客户端返回成功指示。因此客户端可以确保那些报告已被提交的事务确会被保存,即便随后马上发生了一次服务器崩溃。但是,对于短事务来说这种延迟是其总执行时间的主要部分。选择异步提交模式意味着服务器将在事务被逻辑上提交后立刻返回成功,而此时由它生成的WAL记录还没有被真正地写到磁盘上。这将为小型事务原创 2021-01-08 20:50:45 · 681 阅读 · 0 评论 -
数据库PostrageSQL-预写式日志(WAL)
30.2. 预写式日志(WAL)预写式日志(WAL)是保证数据完整性的一种标准方法。对其详尽的描述几乎可以在所有(如果不是全部)有关事务处理的书中找到。简单来说,WAL的中心概念是数据文件(存储着表和索引)的修改必须在这些动作被日志记录之后才被写入,即在描述这些改变的日志记录被刷到持久存储以后。如果我们遵循这种过程,我们不需要在每个事务提交时刷写数据页面到磁盘,因为我们知道在发生崩溃时可以使用日志来恢复数据库:任何还没有被应用到数据页面的改变可以根据其日志记录重做(这是前滚恢复,也被称为REDO)。因原创 2021-01-08 20:47:58 · 512 阅读 · 0 评论 -
数据库PostrageSQL-可靠性和预写式日志
Chapter 30. 可靠性和预写式日志本章解释预写式日志如何用于获得有效的、可靠的操作。30.1. 可靠性可靠性是任何严肃的数据库系统的重要属性,PostgreSQL尽一切可能来保证可靠的操作。可靠的操作的一个方面是,被一个提交事务记录的所有数据应该被存储在一个非易失的区域,这样就不会因为失去电力、操作系统失败以及硬件失败(当然,除了非易失区域自身失效之外)等原因导致的数据丢失。 向计算机的永久存储(磁盘驱动器或者等效的设备)成功写入数据通常可以满足这个要求。 实际上,即使计算机受到致命损坏,只要原创 2021-01-08 20:46:14 · 581 阅读 · 0 评论
分享