「データ指向アプリケーションデザイン」第2部 用語集

## 第5章 レプリケーション

### レプリケーション(Replication)

> Replication is the continuous copying of data changes from one database (publisher) to another database (subscriber). The two databases are generally located on a different physical servers, resulting in a load balancing framework by distributing assorted database queries and providing failover capability. The server for the subscriber database may be configured as a backup in the event of failure of the server for the publisher database.

レプリケーションとは、あるデータベース（パブリッシャー）から別のデータベース（サブスクライバー）にデータの変更を継続的にコピーすることです。2つのデータベースは一般的に異なる物理サーバ上に配置されており、その結果、各種のデータベースクエリを分散し、フェイルオーバー機能を提供することで負荷分散のフレームワークを実現している。サブスクライバデータベース用のサーバは、パブリッシャデータベース用のサーバが故障した場合のバックアップとして構成されてもよい。

https://www.techopedia.com/definition/1236/replication

### パーティショニング(Partitioning)

> Partitioning is the database process where very large tables are divided into multiple smaller parts. By splitting a large table into smaller, individual tables, queries that access only a fraction of the data can run faster because there is less data to scan. The main of goal of partitioning is to aid in maintenance of large tables and to reduce the overall response time to read and load data for particular SQL operations.

パーティショニングとは、非常に大きなテーブルを複数の小さな部分に分割するデータベースプロセスです。大規模なテーブルを小さな個々のテーブルに分割することで、スキャンするデータが少なくて済むため、データの一部にしかアクセスできないクエリを高速に実行することができます。パーティショニングの主な目的は、大規模なテーブルのメンテナンスを支援し、特定のSQL操作のためのデータを読み込んでロードするための全体的な応答時間を短縮することです。

https://www.sqlshack.com/database-table-partitioning-sql-server/

### シャーディング(Sharding)

> Sharding is a very important concept which helps the system to keep data into different resources according to the sharding process.

> The word “Shard” means “a small part of a whole“. Hence Sharding means dividing a larger part into smaller parts.

> In DBMS, Sharding is a type of DataBase partitioning in which a large DataBase is divided or partitioned into smaller data, also known as shards. These shards are not only smaller, but also faster and hence easily manageable.

シャーディングは非常に重要な概念であり、システムがデータをシャーディングプロセスに従って異なるリソースに保存するのに役立ちます。

シャードという言葉は「全体の小さな部分」を意味します。したがって、シャーディングは大きな部分を小さな部分に分割することを意味します。

DBMSでは、シャーディングとはDataBase Partitioningの一種で、大きなDataBaseをより小さなデータに分割したり、分割したりすることです。これらのシャードは小さいだけでなく、高速で管理が容易です。

https://www.geeksforgeeks.org/what-is-sharding/

### 結果整合性(Eventual Consistency)

> In a replicated database, the consistency level defines whether and how the values of the replicas of a logical object may diverge in the presence of updates. Eventual consistency is the weakest consistency level that guarantees useful properties. Informally, it requires that all replicas of an object will eventually reach the same, correct, final value, assuming that no new updates are submitted to the object.

レプリケートされたデータベースでは、整合性レベルは、更新の存在下で論理オブジェクトのレプリカの値がどのように分岐するかを定義します。 結果整合性は、有用なプロパティを保証する最も弱い整合性レベルです。 非公式には、新しい更新がオブジェクトに送信されないと仮定すると、オブジェクトのすべてのレプリカが最終的に同じ正しい最終値に到達する必要があります。

https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-39940-9_1366

https://qiita.com/kumagi/items/3867862c6be65328f89c

https://levelup.gitconnected.com/eventual-consistency-what-how-and-why-50c942472a0c


### フェイルオーバー(Failover)

> Failover is the consistent capability to seamlessly and automatically transfer the operations of your organization’s important business technology systems (database, server, network, applications, etc.) to a highly reliable backup. These transfers occur if all, or any part of, your primary systems fail or are temporarily shut down. The failover system can be operated as a total redundancy that runs simultaneously with your primary system. All data that is imputed into and processed by your primary system will also be registered in your failover system.

> The purpose of a failover system is to eliminate, or at least greatly mitigate, the impact on end-users when a primary system is subjected to a disruption. The end-user should be none the wiser to the fact that a failure has occurred as their requests will be redirected to the failover system that completely mimics the operations of the primary system.

フェイルオーバーは、組織の重要なビジネステクノロジーシステム（データベース、サーバー、ネットワーク、アプリケーションなど）のオペレーションを信頼性の高いバックアップにシームレスかつ自動的に転送する一貫した機能です。 これらの転送は、プライマリシステムのすべてまたは一部が故障したり、一時的にシャットダウンしたりした場合に発生します。 フェイルオーバーシステムは、プライマリシステムと同時に実行される完全な冗長性として運用できます。 プライマリシステムに入力されて処理されるすべてのデータは、フェイルオーバーシステムにも登録されます。

フェイルオーバーシステムの目的は、プライマリシステムが混乱した場合のエンドユーザーへの影響を排除するか、少なくとも大幅に軽減することです。 エンドユーザーは、要求がプライマリシステムの動作を完全に模倣するフェールオーバーシステムにリダイレクトされるため、障害が発生したという事実よりも賢明であってはなりません。

https://www.datto.com/library/what-is-failover

単一のリーダーを持つシステムの場合、フェイルオーバーはリーダーシップの役割をあるノードから他のノードへ移すプロセス。

P.613


### log-structuredストレージエンジン


### write ahead log(WAL)

> Write-Ahead Logging (WAL) is a standard method for ensuring data integrity. A detailed description can be found in most (if not all) books about transaction processing. Briefly, WAL's central concept is that changes to data files (where tables and indexes reside) must be written only after those changes have been logged, that is, after log records describing the changes have been flushed to permanent storage. If we follow this procedure, we do not need to flush data pages to disk on every transaction commit, because we know that in the event of a crash we will be able to recover the database using the log: any changes that have not been applied to the data pages can be redone from the log records. (This is roll-forward recovery, also known as REDO.)

先行書き込みロギング（WAL）は、データの整合性を保証するための標準的な方法です。詳細な説明は、トランザクション処理に関するほとんど（すべてではない）の本に記載されています。簡単に言うと、WALの中心的な概念は、データファイル（テーブルとインデックスが存在する場所）への変更は、それらの変更がログに記録された後、つまり変更を説明するログレコードが永続ストレージにフラッシュされた後にのみ書き込まれるということです。この手順に従う場合、トランザクションコミットごとにデータページをディスクにフラッシュする必要はありません。クラッシュが発生した場合、ログを使用してデータベースを回復できることがわかっているためです：適用されていないすべての変更データページへのログレコードからやり直すことができます。 （これはREDOとも呼ばれるロールフォワードリカバリーです。）

https://www.postgresql.org/docs/9.1/wal-intro.html


### 論理ログ(Logical log)

> To keep a history of transactions and database server changes since the time of the last storage-space backup, the database server generates log records. The database server stores the log records in the logical log, a circular file that is composed of three or more logical-log files. The log is called logical because the log records represent logical operations of the database server, as opposed to physical operations. At any time, the combination of a storage-space backup plus logical-log backup contains a complete copy of your database server data.

最後の格納領域のバックアップ以降のトランザクションおよびデータベースサーバーの変更履歴を保持するために、データベースサーバーはログレコードを生成します。データベースサーバーは、3つ以上の論理ログファイルで構成される循環ファイルである論理ログにログレコードを格納します。ログレコードは、物理的な操作ではなく、データベースサーバーの論理的な操作を表すため、論理と呼ばれます。いつでも、記憶域バックアップと論理ログバックアップの組み合わせには、データベースサーバーデータの完全なコピーが含まれます。

https://www.ibm.com/support/knowledgecenter/SSGU8G_11.50.0/com.ibm.admin.doc/ids_admin_0688.htm

### RDBのトリガ

> データベーストリガは、表に対するイベントに反応して自動的に実行される操作を意味する。トリガはデータ操作言語によるデータ状態の管理を自動化するために用いられる。トリガを利用することで、データ操作の限定、操作の記録、変更操作の監査などを行うことができる。

https://ja.wikipedia.org/wiki/データベーストリガ

### ストアドプロシージャ(Stored Procedure)

> ストアドプロシージャ (stored procedure) とは、データベースに対する一連の処理をまとめた手続きにして、関係データベース管理システム (RDBMS) に保存（永続化）したもの。永続格納モジュール (Persistent Storage Module) とも呼ばれる。ストアドプロシージャの格納先はRDBMSの実装により異なり、RDBMSのデータ辞書や専用の格納スペースが用いられている。

https://ja.wikipedia.org/wiki/ストアドプロシージャ

### ハンドラ(Handler)

> ハンドラとは、扱う人、調教師、訓練士などの意味を持つ英単語。ITの分野では、コンピュータプログラムやその一部分で、何らかの処理要求が発生したときに起動されるものを指すことが多い。対応付けられた事象の種類により「例外ハンドラ」「イベントハンドラ」「割り込みハンドラ」のように呼ぶ。

http://e-words.jp/w/ハンドラ.html

### トポロジー(Topology)



## 第6章 パーティショニング

### シーケンシャル(Sequential)

> シーケンシャルとは、順次的な、逐次的な、連続的な、一連の、などの意味を持つ英単語。ITの分野では、対象が複数ある場合に、並んでいる順番に処理することや、連続して立て続けに処理することを意味する。

http://e-words.jp/w/シーケンシャル.html



### ワークロード(Workload)

> Amount of work or number of work units assigned to a particular resource over a given period.

指定された期間に特定のリソースに割り当てられた作業量または作業単位の数。

http://www.businessdictionary.com/definition/workload.html

### テイルレイテンシ(Tail Latency)

> Tail latency is the small percentage of response times from a system, out of all of responses to the input/output (I/O) requests it serves, that take the longest in comparison to the bulk of its response times.

> They are, quite literally, the tail end of a system’s response time spectrum, and are often expressed as the 98th or 99th percentile response times.

テールレイテンシは、システムが処理する入出力（I / O）要求へのすべての応答のうち、応答時間の大部分と比較して最も長くかかる、システムからの応答時間の小さな割合です。

それらは、文字通り、システムの応答時間スペクトルの末尾であり、多くの場合98または99パーセンタイル応答時間として表されます。

https://www.computerweekly.com/opinion/Storage-How-tail-latency-impacts-customer-facing-applications

### カスケード障害(Cascading failure)

> Cascading failure is a where the failure of one part of an interconnected system results in the failure of more parts, and eventually the whole system. The concept is comparable to a set of falling dominoes.

https://capital.com/cascading-failure-definition

## 第7章 トランザクション

### race condition(レース条件)

https://stackoverflow.com/questions/34510/what-is-a-race-condition

### read committed



### snapshot isolation(スナップショット分離)


### serializability(直列化可能性)


### IBM System R

> System Rは、1970年代にIBM San Jose Research（現在の IBM Almaden Research Center）での研究プロジェクトで開発されたデータベースシステム。
> System R は独創的なプロジェクトであった。後に関係データベースのクエリ言語として標準となったSQL言語を初めて実装したシステムである。また、RDBMSの高いトランザクション処理性能を世に示した初めてのシステムでもある。System R の設計や基本的アルゴリズムの選択（例えばクエリ最適化で使われる動的計画法アルゴリズム）は、後の様々なRDBMSに影響を与えた。

https://ja.wikipedia.org/wiki/System_R


### ACIDとBASE

- ACID
    - -
    - 原子性(Atomicity)
    - 一貫性(Consistency)
    - 分離性(Isolation)
    - 永続性(Durability)
- BASE
    - -
    - 基本的に利用可能(Basically Available)
    - 厳密ではない状態遷移(Soft state)
    - 結果整合性(Eventual consistency)


### 非正規化


### SSD fsync


### マルチオブジェクトトランザクション


### ダーティリード、ダーティライト


### read-modify-write


### compare-and-set


### 指数的バックオフ(Exponential Backoff)

https://note.com/artrigger_jp/n/n0795148b062d

### リピータブルリード

https://qiita.com/PruneMazui/items/4135fcf7621869726b4b

### OLTP(Online transaction processing)とOLAP(Online analytic processing)

| 特性             | トランザクション処理システム(OLTP) |  分散処理システム(OLAP) |
|:-----------------|----------------------------:|:--------------------:|
|主な読み取りパターン |クエリごtに少数のレコードをキーに基づいてフェッチ|大量のレコードを集計|
|主な書き込みパターン |ユーザの入力によるランダムアクセスと低レイテンシの書き込み|バルクインポート(ETL)あるいはイベントストリーム|
|主な利用者        |Webアプリを利用するエンドユーザ、顧客|経営判断を支援する組織内のアナリスト|
|データの内容       |データの最新の状態(現時点)|時間の経過とともに生じた出来事の履歴|
|データセットのサイズ  |ギガバイトからテラバイト|テラバイトからペタバイト|

P.97 表3-1

### ハードリミット


### 相互排他

> 排他制御（はいたせいぎょ）とは、コンピュータ・プログラムの実行において、複数のプロセスが利用出来る共有資源に対し、複数のプロセスからの同時アクセスにより競合が発生する場合に、あるプロセスに資源を独占的に利用させている間は、他のプロセスが利用できないようにする事で整合性を保つ処理の事をいう。相互排除または相互排他（mutual exclusion）ともいう。最大k個のプロセスが共有資源にアクセスして良い場合を k-相互排除という。

https://ja.wikipedia.org/wiki/排他制御

## 第8章 分散システムの問題

### エッジケース

> An edge case is a problem or situation that occurs only at an extreme (maximum or minimum) operating parameter. For example, a stereo speaker might noticeably distort audio when played at maximum volume, even in the absence of any other extreme setting or condition.

エッジケースは、極端な（最大または最小の）動作パラメーターでのみ発生する問題または状況です。 たとえば、ステレオスピーカーは、他の極端な設定や条件がない場合でも、最大音量で再生するとオーディオを著しく歪ませる可能性があります。

https://en.wikipedia.org/wiki/Edge_case


### RDMA(リモートダイレクトメモリアクセス)


### パケットに関して、スロット、スイッチとは


### 送信レート


### アイドル(Idle)

> A computer processor is described as idle when it is not being used by any program.

コンピュータプロセッサは、どのプログラムでも使用されていない場合、アイドル状態と呼ばれます。

https://en.wikipedia.org/wiki/Idle_(CPU)

### キープアライブ(Keepalive)

> キープアライブ (keepalive) とは、コンピュータネットワークにおいて、2つの装置間の接続が有効であることを確認し、また、接続が切断されるのを防止するために、装置間で定期的に送信される通信のことである。

https://ja.wikipedia.org/wiki/キープアライブ

### エミュレート(Emulate)

> エミュレート（emulate）とは、ある装置がそれとは異なる別のハードウェアやソフトウェアの環境を真似することをいう。
> エミュレートは、模倣することである。つまり、何かを真似することを意味する。エミュレーションともいう。また、エミュレートするためのソフトウェアがエミュレータである。

https://garop.com/226/

### マルチテナンシー(Multi-tenancy)

> マルチテナントとは、SaaSやASPサービスなどで、機材やソフトウェア、データベースなどを複数の顧客企業で共有する事業モデル。また、システムやソフトウェアが複数の利用者で共有できるような設計・構造になっていること。

http://e-words.jp/w/マルチテナント.html

### Spanner TrueTime API

https://qiita.com/kumagi/items/7dbb0e2a76484f6c522b

### ランタイム(Runtime)

https://wa3.i-3-i.info/word13464.html

### コンテキストスイッチ

> コンテキストスイッチ (context switch) とは、複数のプロセスが1つのCPUを共有できるように、CPUの状態(コンテキスト (情報工学))を保存したり復元したりする過程のことである。コンテキストスイッチはマルチタスクオペレーティングシステムに不可欠な機能である。通常コンテキストスイッチは多くの計算機処理を必要とするため、オペレーティングシステムの設計においてはコンテキストスイッチを最適化することが重要である。

https://ja.wikipedia.org/wiki/コンテキストスイッチ

### スワッピング、ページング


### ページフォールト


### スワップアウト


### スレッドセーフ


### RTOS(リアルタイムオペレーティングシステム)

> リアルタイムオペレーティングシステム（英: Real-time operating system;RTOS）は、リアルタイムシステムのためのオペレーティングシステム (OS) である。組み込みオペレーティングシステムに多い。OSの主要な機能である資源管理において、時間資源の優先度に基づく配分と実行時間の予測可能性を提供することに特化している、ないし、そういった機能に力を入れている。

https://ja.wikipedia.org/wiki/リアルタイムオペレーティングシステム


### stop-the-worldガベージコレクション

> 多くの実装では、入れ違いにより誤って到達可能なメモリが不可能と判断されないように、ガベージコレクトが開始されると他の処理を止め、本処理が中断される（Stop-the-world ガベージコレクタ）。CPUを長時間（数百ミリ秒から数十秒）占有することもある。ガベージコレクションの動作タイミングの予測やCPUの占有時間の事前予測などが困難なことから、デッドラインが決められているリアルタイムシステムに使用することは難しい。リアルタイム性を改善したGCとして、インクリメンタルGCやコンカレントGCがある。

https://ja.wikipedia.org/wiki/ガベージコレクション

### プリエンプション

> プリエンプション（英: preemption）は、マルチタスクのコンピュータシステムが実行中のタスクを一時的に中断する動作であり、基本的にそのタスク自体の協力は不要で、後でそのタスクを再実行するという意味も含む。このような動作をコンテキストスイッチと呼ぶ。通常、保護されたタスクか、システムの一部であるプリエンプティブスケジューラが行う。それらは、システム内の他のタスクに割り込み、後でそれらタスクを再開させることができる。「プリエンプト」とは「先取りする、差し替える」の意。

https://ja.wikipedia.org/wiki/プリエンプション

### サスペンド、リジューム、レジューム



### チェックサム(checksum)

> A checksum is the outcome of running an algorithm, called a cryptographic hash function, on a piece of data, usually a single file. Comparing the checksum that you generate from your version of the file, with the one provided by the source of the file, helps ensure that your copy of the file is genuine and error free.
> A checksum is also sometimes called a hash sum and less often a hash value, hash code, or simply a hash.

https://www.lifewire.com/what-does-checksum-mean-2625825

### サニタイズ(sanitize)

> サニタイジングとは、利用者が入力した文字データを受け取る際に、プログラムにとって特別な意味を持つ可能性のある文字や文字列を検知して、一定の規則に従って別の表記に置き換えること。「無害化」とも呼ばれ、攻撃者が入力データ中にコード断片などを混入させて誤作動を誘発する攻撃などを防ぐために行われる。

http://e-words.jp/w/サニタイジング.html

### ロールアウト



## 第9章 一貫性と合意

### クラスタインターコネクトネットワーク


### クオラム(Quorum)

操作が成功したと見なされるために、投票する必要があるノードの最小数(通常、全体のノードの過半数)

P.608

### ロックとリース


### リバランス

負荷を公平に分散させるために、データあるいはサービスをあるノードから別のノードへ移動させること

P.614

### etcd, RAFT