【福田学习记录】阅读数据库工程师培训读本第四部【第四天】

福田学习记录是什么?

福田的学习备忘录。
这是一种个人策略,通过以可见形式留下来激发动力。
我写这个不是为了让别人看的,所以非常难读。

阅读《数据库工程师培训读本》。

阻抗不匹配是什么意思?

源于数据模型的差异,用于描述编程工作量增加和效率下降等情况的术语。
从语境上看,通常用于指示面向对象语言和关系型数据库之间的差距。

如果你认真思考一下,关于阻抗不匹配的问题更透彻的话,看一下”酔いどれ設計ナイト2019″会很容易理解。

“集合論是什麼?”可以這樣表達:「集合論是什麼概念?」

在数据库领域中,涉及到关系型数据库的“数据结构”和“数据操作”两个方面的思想。

↓这个让我非常容易理解!IT工程师的数学知识

我大致上了解了,但我想通過閱讀這本書來進行仔細的復習。

述語是什么?谓词逻辑又是什么?

SQL 中的谓词指的是函数。
此外,在函数中,还有一类特殊函数,对于输入项产生命题的真值(真、假、未知)的输出。
虽然很难简明地解释谓词逻辑,但下面的网站非常易懂。太神奇了。

在SQL中的谓词逻辑

什么是层次模型和网络模型?

数据模型的类型。关系型、层次型和网络型是数据模型中的主要三种类型。(目前关系型较为常见。)

    • 階層型

 

    • 木構造でデータを管理する。そのため「多対一」や「多対多」な関係性を示すとき、冗長になってしまう。

 

    • ネットワーク型

 

    それぞれのデータが網目のようにつながりあうような形でデータを管理する。そのためデータ構造を理解していないとデータにアクセスできないという、データ構造への強い依存性が発生してしまう。

说到数据库,可以说涉及各种类型的数据库吗?

为什么NoSQL正在普及

由于互联网的普及和CPU等硬件的进步以及系统的复杂化,导致了对数据处理和管理性能的要求不断提高,传统的关系型数据库管理系统(RDBMS)已经无法满足需求。

3V是什么意思?

    • Volume(データの量)

 

    • Variety(データの種類)

 

    Velocity(データ発生/処理の頻度/速度)

近年这些术语变得越来越受欢迎,因此NoSQL成为了一个流行趋势。

关系数据库管理系统是否会变得不再必要?

下面是三点原因,答案是「不」。

    • そもそもの話、依然としてほとんどの領域の問題はRDBMSで対応可能な場合の方が多い。そのため現在使われているNoSQLは特定の問題に特化している場合が多く、汎用的に使えるものはまだあまりない

 

    • NoSQLでは、RDBMSで対応できない問題を解決するために、RDBMSでは使える機能を犠牲にしている場合が多い

 

    まだ技術的に枯れていない場合が多いので、学習コストおよび管理コストが高い。

因此,重要的是采用“RDBMS & NoSQL”而不是“RDBMS vs NoSQL”的思维方式来推进。请注意,这些观点仅适用于2013年,现在的观点可能有所不同。

NoSQL的分类

虽然都被称为NoSQL,但有各种各样的数据库。
NoSQL有很多种类,但可以在一定程度上进行分类。

根据数据的排列进行分类 jù de

以“存储数据的物理布局方式”为视角进行分类。

スタンドアロン型

所有数据都被集中存储在一个节点中的方式。如果要复制数据,则所有节点都包含相同的数据。(不会进行数据分割)

分散マスタ型

数据被分割并分配到多个节点上。有一特殊节点来管理哪些节点上放置了什么样的数据。

分散P2P型

数据被分割并放置在多个节点上。每个节点都负责管理它所配置的数据。

基本上,我們通常會認為以分散式為主。原因是,這樣一來就能夠簡單地通過添加節點來應對V3卷問題。

根据数据的表示进行分类

用户从自己的角度出发,关注数据储存和提取的方式,这是一种分类方法。

    • KVS(キーバリュー型)

 

    • ドキュメント型

 

    • カラムファミリー型

 

    グラフ型

有四个主要的部分。

KVS类型

KVS型是以“键”和“值”形式存储数据的一种方式。在搜索时,通过键进行搜索并取出相应的值。

由于其简单的设计,通常情况下从查询数据到获取数据(这种等待时间被称为延迟)的过程非常快。

一些代表性的数据库如下:

    memecached

有着悠久历史的KVS。
将所有数据加载到内存中,并通过哈希表进行检索,只能进行简单的键访问,无法进行数据存储,但速度非常快。
主要的使用方法是将其作为其他数据库的后端,作为缓存层使用。

    TokyoTyrant/KyotoTycoon

林平开发的KVS。与memcached一样,它是一个简单的键值对模型。最大的特点是不需要将数据全部存储在内存中,可以在磁盘上进行操作。虽然速度等方面跟memcached相比稍逊,但可以实现数据的持久化。

    Redis

在内存中运行的键值存储系统(KVS)。
不仅支持简单的值,还支持结构化数据,如列表、哈希表、集合等,并提供操作这些数据的API。
这使得一些memcached无法实现的用法变得可能。

    Riak

Basho Technologies公司正在开发的键值存储(KVS)。
与其他流行的键值存储不同,它支持数据的分布式配置。
它使用了亚马逊开发的Dynamo中使用的“一致性哈希”技术作为分布式架构。
通过使用这种技术,当节点被添加/删除时,Riak会自动重新配置数据,使得容易进行横向扩展。
由于分布也是以点对点(P2P)方式进行的,所以没有单点故障,可用性很高。(不是由主节点管理,所以很有抗故障能力)

文件型数据库

在数据库中,文档是以文档为单位进行数据管理的。文档相当于关系型数据库管理系统(RDBMS)中的记录,是一系列结构化数据的集合。与RDBMS中的记录相比,文档的不同之处在于不需要预先定义文档的结构。

一种代表性的数据库是

    MongoDB

数据的布局采用分布式主从模式。

    CouchDB

数据的部署方式是独立的,分布式中间件另外存在。

    ArangoDB

数据的部署采用独立型,分散式实施包括在路线图中。

看看各个比较可以简单了解CouchDB和MongoDB之间的区别,但如果不想纠结细节的话,就感觉”先用MongoDB吧!”好像也不错。(因为它很流行)

列式数据库(也称为列数据库)

这个数据库是基于Google公布的BigTable开发的。它的设计特点是考虑到将数据分布在很多服务器上。

作为数据模型,它以表为基础进行管理,但还引入了由多个列组成的列族的概念。
实际数据以行/列族/列作为键,并以类似于按字典顺序排序的键值对形式保存。对于列而言,不需要事先定义。

根据上述特性,列式存储具有以下特点:
①能处理大量列数据
②能高效处理大量列中可能为空的非结构化数据。

虽然经常会将列式数据库管理系统与关系型数据库管理系统混淆,但列式数据库管理系统在按行进行高速搜索(OLTP)方面有其专长,而关系型数据库管理系统擅长储存数据的聚合和复杂计算(OLAP)处理。

中国では代表的なデータベースとしては、

    HBase

分散主控式。

    Cassandra

去中心化的P2P类型。

应该参考比较Cassandra和HBase的入门NoSQL教程,以了解它们各自的差异和使用方法。这个教程非常易懂易学,简直神一般。

图形数据库

这是一个具有图形结构的数据库。当数据的结构不是传统的关系型数据库而是以网络形式存在时,它在存储和检索方面具有强大功能。

什么是图数据库?–解释了一种从网络状数据结构中即时检索信息的数据库。

顺便说一下,有一个名为Blueprints的库,使用它可以使用共同的代码操作实际运行的图形数据库,而不管它是什么。

其他数据库

分析数据库

数据操作可以分为两个主要领域:OLTP(联机事务处理),重点是记录级别的输入/搜索;OLAP(联机分析处理),主要用于执行复杂的全局或大部分存储数据的查询。

这个操作本身可以在MySQL和PostgreSQL中执行,但速度不太快。
因此,专门为OLAP操作开发的关系型数据库被称为分析数据库。

新SQL

与分析型数据库相反,还开发了面向事务处理(OLTP)专用关系型数据库管理系统(RDBMS)。
这些数据库也被称为NewSQL。

Hadoop:哈多普

在Hadoop环境中运行SQL执行引擎的趋势变得更加活跃。
这个很难理解…有人能简单解释一下吗?(哭)

下面的文章很有趣。我的理解大概是50%…
如果在Hadoop上使用SQL,不是在数据仓库里很合适吗?

MySQL的存储引擎。

通常情况下,我们会使用InnoDB。根据情况(根据表格)也可以使用其他引擎,如MyISAM。
以下是存储引擎的类型。

    InnoDB

具有事务安全、行级锁定、外键支持等特征的标准存储引擎。

    MyISAM

在旧版本的MySQL中,它是标准的存储引擎。

    Memory(HEAP)

将数据存储在内存中。

    Archive

适合在无索引情况下存储大量数据。

    NDB

在MySQL Cluster中使用的存储引擎。
我第一次看到MySQL Cluster时觉得它作为内存数据库并且可以进行事务处理真是太强大了!但是它的使用方式取决于个人的需求。还需要好好学习一下。
MySQL Cluster Casual Talks 笔记

“Mutext是什么?”

用于进行互斥处理的机制。
表示目标对象是”未使用(可使用)”还是”使用中(不可使用)”。
虽然类似的机制还有信号量等,但下面的网站能更清楚地解释它们的区别。

让我们整理一下Mutex、Semaphore和条件变量之间的区别。

什么是优化器?

自动调整SQL的功能。

什么是嵌套循环连接?

从一个表中逐行提取数据,然后与另一个表的每一行进行比对,提取符合连接条件的行,这是一种嵌套循环处理的表连接方法。

对于效率低下的嵌套循环连接的应对措施

什么是MySQL Cluster CGE?

MySQL的商业版。(也有非商业版的MySQL Cluster)
在将数据库分成主从数据库时等情况下可能会使用。

MySQL Workbench 是什么?

数据库工程师可以使用一些功能。例如,提供可视化数据监控和用户创建功能等。

TCO是什么意思?

总体拥有成本的缩写。表示从计算机系统建设时的硬件和软件的引入费用,到运营后的维护费用、管理费用、人员成本等所有费用的系统的总拥有成本。

什么是多核CPU?

为了提高CPU的效率。
提高CPU的时钟频率可以改善CPU的效率,但是提高时钟频率存在限制。
因此,通过增加虚拟或者物理核心数来进行分散处理,以提高处理能力的方式成为主流思想。
也就是说,多核CPU指的是具有多个核心的CPU。

“pg_stantsinfo是什么?”

这是PostgreSQL的一个扩展工具,用于监控数据库。
这个工具用于定期收集关于PostgreSQL服务器的统计数据。

儲存程序是什麼?

在数据库上,它可以被命名并像函数一样被调用和使用的一系列处理。它没有返回值等内容。

Hstore是什么?

这是为了在PostgreSQL中以键值对形式处理数据而进行的扩展。

MADlib是什么?

PostgreSQL的扩展,在其内部执行统计和数据挖掘处理。

关系型数据库管理系统(RDBMS)的优势

“事务处理”和”SQL”
数据一致性和通过SQL操作的简易性是最大的优势。

使用MongoDB的分片技术

在使用MongoDB进行分片时,需要选择一个字段作为“分片键”。只有选择的字段的值的数量足够多,才能进行分片的划分。因此,那些值的数量较少的字段就不适合作为分片键。(例如,如果选择“性别”字段作为分片键,因为只有男和女两个值,所以最多只能分成两个分片)

最适合的分片键条件是

    • 値が単調に増加しないこと

 

    • 値のバリエーションが多いこと

 

    ほぼ全てのクエリに利用でき、それらのクエリが適当に分散すること

複合索引是什么?

使用多个排序条件创建索引。
下面的网站非常易懂!

数据库的索引和复合索引

帽子收藏是什么意思?

这是一个集合,首先确定了数据大小和文档数量,如果超过了这个限制,就会删除旧的数据。

Oplog是什么?

保存更新内容的帽子收集是指为复制集保存副本集更新的内容。
为了使次级节点与主节点立即同步,次级节点会以非常短的间隔参考主节点的Oplog。

使用MongoDB的要点

保证Oplog具备足够的大小。

如果由于故障等原因暂时关闭辅助节点并且长时间未进行同步,则需要根据Oplog执行恢复操作。但是,如果Oplog内容不足够,则无法执行仅更新数据的增量同步,而必须进行整个数据的同步。这样会增加非常大的负载,因此必须确保Oplog具有足够的容量。

不会重新安排文件的布局

在操作MongoDB时,最重要的注意事项是更新文档(扩大)时会执行删除和新的添加操作。换句话说,原始数据区域变为空白,更新后的信息将被添加到末尾。据说这一点决定了整个数据库的性能能够提高4到8倍。

在添加文档时,有一个被用作提前保留额外存储空间的系数,这个系数被称为paddingFactor,然而,我们必须将其始终设为1。
(如果paddingFactor变为2,那么将需要使用数据库的两倍容量来存储数据。)

人为失误的对策 de

在MongoDB中,副本集的冗余性非常強大。但是,当然也有可能会因为人为错误而导致数据完全被删除。在这种情况下,可以进行以下设置来应对副本集:

    隠しメンバー

在配置复制集时,如果指定为「hidden:true」,该节点将无法从客户端可见。因此,可以执行繁重的备份操作,而不影响服务,并能够进行备份处理。

    遅延メンバー

即使经常备份,每天大约2到3次的备份已经是极限。
如果在备份过程中发生人为错误,可能会丢失数小时的数据。
为了应对这种情况,MongoDB可以故意延迟次要节点的同步设置。
例如,如果将同步设置为在5分钟后开始,则即使主服务器发生故障,次要服务器也不会在5分钟内同步(保持数据),使数据损失最多只有5分钟。

检查文件是否存在

如果要检查文档是否存在,请使用`find()`函数而不是`findOne()`函数。
`findOn()`函数会返回数据,而`find()`函数返回的是一个游标,因此可以快速访问数据。
(据说性能相差两个数量级)

“什么是利率互换区域?” (What is a swap region?)

用于暂时存放未被使用的内存内容的地方。

什么是利率掉期市场?

在Redis中持久化数据的方法是什么?

    データベーススナップショット

将内存中的数据库转储保存为文件的功能。
可以通过条件如“如果在N小时内有M次以上的更改”来指定获取快照的时机。

    追記ログ

将对Redis的命令逐个保存到文件中的功能。

由于两种选择都有利有弊,因此应根据具体情况进行选择。

得分集合类型

根据分数进行排序的Set类型。不允许值重复,但允许分数重复。
在下面的网站上写的,看起来很容易创建实时排名功能。

现在才知道Redis的有序集合,实现实时排名超级简单。

在使用Redis作为缓存服务器时需要注意的事项

在Redis中,当简单存储数据时,没有设置有效期限。
因此,如果像缓存一样数据不断增加,没有设置有效期限的话,会导致内存不足。因此必须在数据上明确设置有效期限。

Redis的使用场景

在创建以下类似功能时,表现出色。

实时排名

过去,按照固定的时间间隔使用批处理来更新排名是常见的做法。
然而,通过使用Redis的有序集合(Scored Set),可以非常轻松地创建排名功能。
对于现在才了解到Redis的有序集合并实现实时排名,感觉超级简单。

活跃用户的统计

如果使用Redis的Set类型,这个功能可以很容易地实现。
例如,在登录时,以日期为键,以用户ID为值,将其添加到Set集合中。
这样就可以根据日期获取活跃用户集合,然后利用集合操作函数获取各种数据。

职位队列

使用List类型的“BLPOP”命令进行实现。
详细信息请参考下面的网站。

将Redis用作作业队列

排他处理

使用Redis的setnx函数可以实现互斥处理。

使用Redis的setnx方法,在多服务器环境下实现Web API的锁机制。

Fluentd是什么?

管理数据交流的软件

“什么是Quorum?”

过半节点进行多数投票。这是一种用于确保数据复制具有一致性的概念。以下网站提供了更详细的解释(尽管有大量的公式需要花时间来理解,所以下次再好好去阅读)。

最近经常听到的Quorum是一个比多数决定更为常见和有力的概念。

向量时间戳是什么?

为了实现整合性保证的想法(可能与向量时钟等意义相同)。
下面的网站非常易懂!太神了!(还有可视化相当厉害)

在分散数据库中确保因果一致性的机制「矢量时间戳」非常酷

DHT是什么?

分布式哈希表(Distributed Hash Table,DHT)是一种将哈希表分散在多个对等节点(可能指节点)上进行管理的技术。
这里有一个易于理解的哈希表解释。

让我们轻松理解哈希表(Hash Table)。

Riak的特点

Riak与其他NoSQL数据库的区别在于

    高可用性

无论硬件或网络故障多少,都能实时进行读写操作。

    高信頼性

无论发生多少不可预测的情况,系统都能提供稳定的响应和吞吐量。

    拡張性

根据数据量和负载的大小,系统可以无间断地进行水平扩展。

    低遅延

无论何时,都能随时得到用户的快速响应,不会让用户等待。

    予測可能性

具有可靠的性能预测能力。稳定的可扩展性。

当以这样的方式描述特征时,就会自然而然地想到亚马逊创建的数据库的形象。

今天的一句话

贝罗奇黑糖咖啡美味!此外,我对数据库专家的要求感到相当严格。
虽然我不是专家,但至少应该学习到关于选择何种数据库的判断标准的最基本知识吧?(从个人职业发展和价值的角度来考虑的话)

广告
将在 10 秒后关闭
bannerAds