単音の章12概要ストレージシステムと大規模分散ストレージシステム

第1章概要

1.1分散ストレージコンセプト

分散ストレージシステムの特徴:
  • スケーラブル
  • 低コスト
  • 高性能
  • 使いやすいです
 
分散ストレージシステムの課題:
  • データ配信
  • 一貫性
  • フォールトトレランス
  • ロードバランシング
  • トランザクションと同時実行制御
  • 使いやすさ
  • 圧縮/解凍

1.2分散ストレージカテゴリ

  • そのようなオフィス文書、テキスト、グラフィックス、画像、オーディオ、ビデオ、およびその他の情報などの非構造化データ。
  • リレーショナルデータベースなどの構造化データ、
  • そのようなHTML文書として半構造化データ、
 
本が配布されるストレージシステムは4つのカテゴリに分かれています。
  1. 一般的にBLOB(バイナリラージオブジェクト、バイナリラージオブジェクト)と呼ばれる分散ファイルシステム、店舗の写真、ビデオ、およびその他の非構造化データオブジェクト、データ。典型的なシステムのFacebookヘイスタック、淘宝網のファイルシステム(TFS)。全体として、分散ファイルシステムを格納するデータの三種類:Blobオブジェクト固定長ブロックと大きなファイル。
  2. 分散キーシステム、単純な半構造化データ記憶装置との間の関係、および一般的なシステムは、一般に、キャッシュとして使用アマゾンダイナモ淘宝TAIRを有しています。
  3. テーブル・システム、ストレージの関係より複雑な半構造化データを分散、典型的なシステムでは、Google Bigtableのとメガストア、マイクロソフトのAzureテーブルストレージを含んでいます。単一テーブルの操作のための主要な支持体は、このようなマルチ関連リストとしてネストされたサブクエリをサポートしていません。
  4. 分散データベース、店舗構造化データ、マルチテーブル関連、ネストされたサブクエリおよび他の複雑な操作をサポートし、データベーストランザクションと並行性制御を提供するSQLリレーショナルクエリ言語を提供します。典型的なシステムは、(MySQLのシャーディング)クラスター、アマゾンRDSおよびMicrosoft SQL AzureのMySQLデータベースの断片化を含んでいます。

第2章単一のストレージシステム

2.1ハードウェアの基礎

2.1.1 CPUアーキテクチャ
古典的なマルチCPUアーキテクチャは、スケーラビリティを向上させるために、対称型マルチプロセッシングアーキテクチャ(対称型マルチプロセッシング、SMP)であり、現在は主流のサーバ・アーキテクチャは、一般にNUMA(非均一メモリ・アクセス、非一様メモリ・アクセス)アーキテクチャです。
 
2.1.2 IOバス
インテルのX48に、例えば、それは北と南橋建築の典型的なものです。
 
2.1.3ネットワークトポロジ
従来のデータセンターのネットワークトポロジに分け、2008年にGoogleが、それは、3つのCLOSネットワークである、フラットなネットワークトポロジに変換されます。
 
2.1.4パフォーマンスパラメータ
そのディスク・ストレージ・システムのランダムアクセスの主要なパフォーマンスのボトルネック。設計するときは、ストレージエンジンは、キャッシングによって、そのようなシーケンシャル書き込みへのランダム書き込みと、ディスクの特性のために大量の処理を行いますディスクのランダム読み取り操作を低減します。
 
ソリッドステートディスク(SSD)は、ランダムアクセス遅延によって特徴付けられ、高いIOPS(毎秒当たりの入力/出力を書き込む)のパフォーマンスを提供することが可能である、小さいです。その主な問題は、ストレージシステムの一般的な設計は、ミッションクリティカルまたはキャッシュで高いパフォーマンスを得るために使用することができ、容量と価格、ということです。
 
2.1.5ストレージ階層アーキテクチャ
パフォーマンスのストレージシステムは、2つの次元で構成されています。基本的なアクセスのレイテンシ、可能な限り最高のスループットと最低コストのアクセスレイテンシのスループット、設計システムを確保する能力が必要です。SSDディスクと大きな遅延差へのアクセスが、帯域幅にほとんど差なので、より多くの遅延に敏感なまたはクリティカルなシステムのための大きなブロックのシーケンシャルアクセス、ランダムアクセスSSD用のディスク・ストレージ・システム。両方が(アクセス頻度)ディスクに格納されたSSD、コールドデータ(まれなアクセス)に格納されていると共にしばしば蓄熱データを混合しました。
 

2.2スタンドアロンのストレージエンジン

ストレージシステムの基本機能は次のとおり読み出し動作をシーケンシャルおよびランダムアクセス読み出しに分割され、追加、削除、読み取り、修正しました。永続ストレージエンジンが追加支援、ハッシュテーブルを達成することであるハッシュ、削除、変更、およびランダム読み取り操作が、順次走査をサポートしていません、対応するストレージシステムのキー(キー値)、ストレージシステム、Bツリー( Bツリー)永続ストレージエンジンのBツリーの実装で、単一のレコードは、対応するストレージシステムは、リレーショナルデータベースであり、順次走査をサポートし、読み取り、削除、変更操作を追加サポートするだけでなく。もちろん、システムキーはBツリーのストレージエンジンによって達成することができ、LSMツリー(ログ構造マージツリー)とBツリー・ストレージ・エンジンストレージエンジンを、変更、削除、ランダムアクセスとシーケンシャルスキャンを追加支援します。これは、問題を回避するためにバルクダンプランダムディスク技術によって書かれ、インターネットが広く、そのようなGoogleのBigtableのは、Google LevelDBとFacebookのオープンソースカサンドラシステムなどのバックエンド・ストレージ・システムで使用されています。

2.2.1ハッシュストレージエンジン

Bitcaskハッシュテーブル構造に基づいて、キーと値のストレージシステムであり、それだけアドオンを(追加のみ)をサポートしています。
1つのデータ構造
メモリ効果指標データ構造ベースのハッシュテーブルは、ハッシュテーブルを迅速に主キー値によって位置を特定します。
Bitcask主キーインデックス情報が格納され、メモリ、ディスク・ファイル内の値は、実際のコンテンツと、主キーの値を格納します。
2定期的な合併
3高速リカバリ
インデックスファイル(ヒントファイル)を介して再構成ハッシュテーブルの速度を増加させるBitcask。簡単に言えば、インデックスファイルは、結果が生成されたディスクファイルにメモリハッシュインデックステーブルをダンプすることです。

2.2.2 B木ストレージエンジン

1つのデータ構造
ページによってMySQLのInnoDBの(ページ)各ページは、B +ツリーのノードに対応する、データを整理します。このうち、リーフノードは、ライン毎のデータの整合性を維持するために、非リーフは、iノード情報を保存します。対応するページがメモリにない場合、リーフノードデータベースクエリまでルートバイナリ探索から開始する必要がある各ノードを読み取り、各ノードに格納された順序付けられたデータは、ディスクから読み出され、キャッシュされる必要があります。B +ツリーのルートノードは永久的なメモリであり、従って、B +ツリー検索がIOディスクH-1回取り、複雑さはO(H)= O(のlogD ^ N)(Nは素子数であり、それぞれのためにDであります)出席、hはB +ツリーの高さであるノード。操作を変更する最初の必要性は、B +ツリーのメモリを変更するに続いて、レコードをコミットログ。メモリが変更された場合はページが一定の割合を超え、バックグラウンドスレッドは、ディスクの永続性にこれらのページを磨くます。
2バッファ管理
バッファに利用可能なメモリを担うバッファ・マネージャは、ページのバッファ領域は、ディスクブロックの内容がバッファに転送することができ、同じ大きさです。キーは、バッファ・マネージャの置換ポリシーは、つまり、バッファプールうちどのページを選択することです。2つの一般的なアルゴリズムがあります。
(1)LRU、LRUアルゴリズムまたは少なくとも最近書き込まれたブロックを読み出します。
(2)のLIRを、汚染バッファプールの問題を解決するために、テーブル全体をスキャンします。データは、時間以上の短い期間内に2回アクセスされた場合にモダンデータベースのLIR一般的に使用されるアルゴリズムは、バッファを2つのプールに分割され、第一段階に最初のデータは、ホットデータは、第2段階、それぞれの内側となりますまたはLRU置換アルゴリズムを使用します。
 

2.2.3 LSM木ストレージエンジン

LSM树(Log Structured Merge Tree)的思想非常朴素,就是将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存中最近的修改操作。
 
1 存储结构
LevelDB存储引擎主要包括:内存中的MemTable和不可变MemTable(Immutable MemTable, 也称为Frozen MemTable,即冻结MemTable)以及磁盘上的几种主要文件:当前(Current)文件、清单(Manifest)文件、操作日志(Commit Log, 也称为提交日志)文件以及SSTable文件。当应用写入一条记录时,LevelDB会首先将修改操作写入到操作日志文件,成功后再将修改操作应用到MemTable,这样就完成了写入操作。
当MemTable占用的内存达到一个上限值后,需要将内存的数据转储到外存文件中。
SSTable中的文件是按照记录的主键排序的,每个文件有最小 的主键和最大的主键。
2 合并
LevelDB的Compaction操作分为两种:minor compaction和major compaction。minor compaction是内存中的MemTable转储到SSTable。major compaction是合并多个SSTable文件。

2.3 数据模型

2.3.1 文件模型

POSIX(Portable Operation System Interface)是应用程序访问文件系统的API标准,它定义了文件系统存储接口及操作集。

2.3.2 关系模型

每个关系是一个表格,由多个元组(行)构成,而每个元组又包含多个属性(列)。关系名、属性名以及属性类型称作该关系的模式(schema)。
数据库语言SQL用于描述查询以及修改操作。

2.3.3 键值模型

大量的NoSQL系统采用了键值模型(也称为Key-Value模型),每行记录由主键和值两个部分组成,支持基于主键的如下操作:Put, Get, Delete
NoSQL系统中使用比较广泛的模型是表格模型。表格模式弱化了关系模型中的多表关联,支持基于单表的简单操作,典型的系统是Google Bigtable以及其开源Java实现HBase。主要操作如下:Insert, Delete, Update, Get, Scan。

2.3.4 SQL与NoSQL

关系数据库在海量数据场景面临如下挑战:
  • 事务
  • 联表
  • 性能
NoSQL系统面临如下问题:
  • 缺少统一标准
  • 使用以及运维复杂

2.4 事务与并发控制

2.4.1 事务

事务的四个基本属性:
(1)原子性(Atomicity)
(2)一致性(Consistency)
(3)隔离性(Isolation)
(4)持久性(Durability)
 
SQL定义了4种隔离级别:
  • Read Uncommitted(RU):读取未提交的数据
  • Read Committed(RC):读取已提交的数据
  • Repeatable Read(RR):可重复读取
  • Serialization(S):可序列化,即数据库的事务是可串行化执行的。这是最高的隔离级别。
 
隔离级别的降低可能导致读到脏数据或者事务执行异常,例如:
  • Lost Update(LU):丢失更新
  • Dirty Reads(DR):脏读
  • Non-Repeatable Reads(NRR):不可重复读
  • Second Lost Updates problem(SLU): 第二类丢失更新
  • Phantom Reads(PR): 幻读

2.4.2 并发控制

1 数据库锁
事务分为几种类型:读事务,写事务以及读写混合事务。相应地,锁也分为两种类型:读锁以及写锁,允许对同一个元素加多个读锁,但只允许加一个写锁,且写事务将阻塞读事务。
 
2 写时复制(Copy-On-Write,COW)
写时复制读操作不用加钞,极大地提高了读取性能。
图2-10中写时复制B+树执行写操作的步骤如下:
(1)拷贝:将从叶子到根节点路径上的所有节点拷贝出来。
(2)修改:对拷贝的节点执行修改。
(3)提交:原子地切换根节点的指针,使之指向新的根节点。
 
写时复制技术原理简单,问题是每次写操作都需要拷贝从叶子到根节点路径上的所有节点,写操作成本高,另外,多个写操作之间的互斥的,同一时刻只允许一个写操作。
 
3 多版本并发控制(MVCC,Multi-Version Concurrency Control)
也能够实现读事务不加锁。以MySQL InnoDB存储引擎为例,InnoDB对每一行维护了两个隐含的列,其中一列存储行被修改的"时间",另外一列存储行被删除的"时间"。注意,InnoDB存储的并不是绝对时间,而是与时间对应的数据库系统的版本号。
 
MVCC读取数据的时候不用加锁,每个查询都通过版本检查,只获得自己需要的数据版本,从而大大提高了系统的并发度。

2.5 故障恢复

数据库系统以及其他的分布式存储系统一般采用操作日志(有时也称为提交日志,即Commit Log)技术来实现故障恢复。操作日志分为回滚日志(UNDO Log)、重做日志(REDO Log)以及UNDO/REDO日志。
 
2.5.1 操作日志
关系数据库系统一般采用UNDO/REDO日志。
 
2.5.2 重做日志
 
2.5.3 优化手段
1 成组提交(Group Commit)
2 检查点(Checkpoint)
需要将内存中的数据定期转储(Dump)到磁盘,这种技术称为checkpoint(检查点)技术。系统定期将内存中的操作以某种易于加载的形式(checkpoint文件)转储到磁盘中,并记录checkpoint时刻的日志回放点,以后故障恢复只需要回放checkpoint时刻的日志回放点之后的REDO日志。
 

2.6 数据压缩

2.6.1 压缩算法

压缩的本质就是找数据的重复或者规律,用尽量少的字节表示。
 
1 Huffman编码
前缀编码要求一个字符的编码不能是另一个字符的前缀。
 
2 LZ系列压缩算法
LZ系列压缩算法是基于字典的压缩算法。
 
3 BMDiff与Zippy
在Google的Bigtable系统中,设计了BMDiff和Zippy两种压缩算法。
 

2.6.2 列式存储

OLTP(Online Transaction Processing,联机事务处理)应用适合采用行式数据库。OLAP类型的查询可能要访问几百万甚至几十亿数据行,且该查询往往只关心少数几个数据列,列式数据库可以大大提高OLAP大数据量查询的效率。列组(column group)是一种行列混合存储械,这种模式能够同时满足OLTP和OLAP的查询需求。
 
由于同一个数据列的数据重复度很高,因此,列式数据库压缩时有很大的优势,如位图索引等。
 

おすすめ

転載: www.cnblogs.com/sxpujs/p/11442970.html