Apache Ignite


Apache_Ignite

Apache Igniteは、インメモリ速度を備えたハイパフォーマンスコンピューティング用の分散データベースです。 Apache Ignite 原作者
GridGainシステム
開発者
Apache Software Foundation
初回リリース
2015年3月24日; 6年前 (2015-03-24)
安定リリース
2.10.0 / 2021年3月15日 ; 6か月前  (2021-03-15)
プレビューリリース
3.0.0(アルファ2)/ 2021年6月29日 ; 3か月前  (2021-06-29)
リポジトリ
Igniteリポジトリ
で書かれている
Java、C#、C ++、SQL
オペレーティング・システム
クロスプラットフォーム
プラットホーム
IA-32、x86-64、PowerPC、SPARC、Javaプラットフォーム、.NET Framework
タイプ
データベース、コンピューティングプラットフォーム
ライセンス
Apacheライセンス2.0
Webサイト
発火.apache .ORG
Igniteは、オープンソースでいたGridGainシステムズ2014年後半とで受け入れApacheのインキュベータープログラム同年。 Igniteプロジェクトは2015年9月18日に卒業しました。
Apache Igniteのデータベースは、デフォルトのストレージおよび処理層としてRAMを利用しているため、インメモリコンピューティングプラットフォームのクラスに属しています。ディスク層はオプションですが、有効にすると、完全なデータセットを保持しますが、メモリ層は、その容量に応じて完全または部分的なデータセットをキャッシュします。
使用するAPIに関係なく、Igniteのデータはキーと値のペアの形式で保存されます。データベースコンポーネントは水平方向にスケーリングし、すべてのノードがデータセット全体の一部を所有するように、キーと値のペアをクラスター全体に分散します。ノードがクラスターに追加またはクラスターから削除されるたびに、データは自動的に再調整されます。
分散基盤に加えて、Apache Igniteは、JCache準拠のKey-Value API、結合を備えたANSI-99 SQL、ACIDトランザクション、MapReduceのような計算などのさまざまなAPIをサポートしています。
Apache Igniteクラスターは、コモディティハードウェア、クラウド(Microsoft Azure、AWS、Google Compute Engineなど)、またはKubernetes、Docker、Apache Mesos、VMWareなどのコンテナー化されたプロビジョニング環境にオンプレミスでデプロイできます。

コンテンツ
1 クラスタリング
2 パーティショニングとレプリケーション
3 メモリアーキテクチャ
3.1 ネイティブの永続性 3.2 サードパーティの永続性 3.3 スワップスペース
4 一貫性
5 分散SQL
6 機械学習
7 参考文献

クラスタリング
Apache Igniteクラスタリングコンポーネントは、シェアードナッシングアーキテクチャに基づいています。ノードは、サーバーとクライアントの2つの主要なカテゴリに分けられます。サーバーノードは、データとインデックスの両方を保持し、計算とともに着信要求を処理するクラスターのストレージおよび計算ユニットです。サーバーノードは、データノードとも呼ばれます。
クライアントノードは、アプリケーションとサービスからサーバーノードのクラスターとして表される分散データベースへの接続ポイントです。クライアントノードは通常、特別なライブラリが開発されたJava、C#、またはC ++で記述されたアプリケーションコードに埋め込まれています。
さらに、Apache Igniteは、他のプログラミング言語またはツールからデータベースを操作する方法として、ODBC、 JDBC 、およびRESTドライバーを提供します。ドライバーは、クラスターと通信するために、クライアントノードまたは低レベルのソケット接続のいずれかを内部で利用します。

パーティショニングとレプリケーション
Igniteデータベースは、分散された「キャッシュ」内のキーと値のペアの形式でデータを編成します(当初、データベースはメモリ層をサポートしていたため、キャッシュの概念は歴史的な理由で使用されます)。通常、各キャッシュは、従業員や組織などの1つのエンティティタイプを表します。
すべてのキャッシュは、ランデブーハッシュアルゴリズムを使用してクラスターノード間で均等に分散される「パーティション」の固定セットに分割されます。パーティションには常に1つのプライマリコピーと0個以上のバックアップコピーがコピー数は、レプリケーション係数パラメーターを使用して構成されます。完全レプリケーションモードが構成されている場合、すべてのクラスターノードはパーティションのコピーを保存します。均等なデータ分散を実現し、ワークロードを分散するために、ノードがクラスターに追加またはクラスターから削除されると、パーティションは自動的に再調整されます。
キーと値のペアはパーティションに保持されます。Apache Igniteは、キーの値を取得してそれを特別なハッシュ関数に渡すことにより、ペアをパーティションにマップします。

メモリアーキテクチャ
Apache Igniteのメモリアーキテクチャは2つのストレージ層で構成され、「耐久性のあるメモリ」と呼ばれます。内部的には、Unixなどのシステムの仮想メモリと同様に、メモリ空間の管理とデータ参照にページングを使用します。ただし、耐久性のあるメモリアーキテクチャと仮想メモリアーキテクチャの大きな違いの1つは、前者は常にデータセット全体をインデックス付きのディスクに保持するのに対し(ディスク層が有効になっていると仮定)、仮想メモリはRAMが不足するとディスクを使用することです。交換のみを目的としています。
メモリアーキテクチャの最初の層であるメモリ層は、RAM内のデータとインデックスをいわゆる「オフヒープ領域」のJavaヒープから遠ざけます。リージョンはデータベースによって事前に割り当てられて管理されるため、ストレージのニーズにJavaヒープが使用されるのを防ぎ、その結果、ガベージコレクションの長い一時停止を回避できます。リージョンは、データ、インデックス、およびシステムメタデータを格納する固定サイズのページに分割されます。
Apache Igniteはメモリ層から完全に動作しますが、耐久性のために2番目の層であるディスク層をいつでも使用できます。データベースには独自のネイティブ永続性が付属しており、さらに、RDBMS、NoSQL、またはHadoopデータベースをディスク層として使用できます。

ネイティブの永続性
Apache Igniteネイティブ永続性は、分散型で一貫性の高いディスクストアであり、常にデータとインデックスのスーパーセットをディスク上に保持します。メモリ層は、容量に応じて可能な限り多くのデータのみをキャッシュします。たとえば、1000個のエントリがあり、メモリ層がそれらのうち300個にしか収まらない場合、1000個すべてがディスクに保存され、300個だけがRAMにキャッシュされます。
永続性は、ログ先行書き込み(WAL)技術を使用して、データの変更をディスク上に即座に保持します。バックグラウンドで、ストアは「チェックポインティングプロセス」を実行します。これは、ダーティページをメモリ層からパーティションファイルにコピーすることを目的としています。ダーティページとは、WALに記録された変更でメ​​モリ内で変更されたが、それぞれのパーティションファイルに書き込まれていないページです。チェックポインティングにより、時間の経過とともに古いWALセグメントを削除し、パーティションファイルに適用されていないWALの部分のみを再生するクラスターの再起動時間を短縮できます。

サードパーティの永続性
ネイティブ永続性は、バージョン2.1から利用可能になりました。それ以前は、ApacheIgniteはディスク層としてサードパーティのデータベースのみをサポートしていました。
Apache Igniteは、RDBMS、NoSQL、またはHadoopデータベースの上位にあるインメモリ層として構成でき、後者を高速化します。ただし、ネイティブの永続性と比較していくつかの制限がたとえば、SQLクエリはRAM内のデータに対してのみ実行されるため、事前にすべてのデータセットをディスクからメモリにプリロードする必要が

スワップスペース
純粋なメモリストレージを使用する場合、データサイズが物理RAMサイズを超えて、メモリ不足エラー(OOME)が発生する可能性がこれを回避するための理想的なアプローチは、Igniteネイティブ永続性を有効にするか、サードパーティの永続性を使用することです。ただし、ネイティブまたはサードパーティの永続性を使用したくない場合は、スワッピングを有効にすることができます。その場合、Igniteインメモリデータはディスク上にあるスワップスペースに移動されます。Igniteは、スワップスペースの独自の実装を提供しないことに注意して代わりに、オペレーティングシステム(OS)によって提供されるスワッピング機能を利用します。スワップスペースが有効になっている場合、Ignitesはデータをメモリマップトファイル(MMF)に保存します。このファイルのコンテンツは、現在のRAM消費量に応じてOSによってディスクにスワップされます。

一貫性
Apache Igniteは、2フェーズコミットプロトコルを実装する非常に一貫性のあるプラットフォームです。整合性の保証は、メモリ層とディスク層の両方で満たされています。Apache IgniteのトランザクションはACIDに準拠しており、複数のクラスターノードとキャッシュにまたがることができます。データベースは、悲観的および楽観的同時実行モード、デッドロックのないトランザクション、およびデッドロック検出技術をサポートします。
トランザクション保証がオプションであるシナリオでは、Apache Igniteを使用すると、パフォーマンスを向上させるアトミックモードでクエリを実行できます。

分散SQL
Apache Igniteには、JDBCおよびODBCドライバーを介して公開されたSQL API、およびJava、C#、C ++プログラミング言語用に開発されたネイティブライブラリを使用してアクセスできます。データ操作言語とデータ定義言語の構文はどちらもANSI-99仕様に準拠しています。
分散データベースであるApacheIgniteは、分散コロケーション結合と非コロケーション結合の両方をサポートします。データが併置されると、クラスターノードのローカルデータに対して結合が実行され、ネットワークを介したデータの移動が回避されます。併置されていない結合は、一貫した結果セットを準備するために、ネットワーク内でデータセットを移動する場合が

機械学習
Apache Igniteは、機械学習のトレーニングと推論機能に加えて、データの前処理とモデルの品質推定を提供します。線形回帰、決定木、ランダムフォレスト、勾配ブースティング、SVM、K-Meansなどの古典的なトレーニングアルゴリズムをネイティブにサポートします。それに加えて、ApacheIgniteはTensorFlowと緊密に統合されています。この統合により、単一ノードまたは分散方式でApacheIgniteに保存されたデータでニューラルネットワークをトレーニングできます。
Apache Ignite Machine Learningツールキットの重要なアイデアは、大量のデータを送信することなく、分散トレーニングと推論を即座に実行できることです。これはMapReduceアプローチに基づいており、ノードの障害やデータのリバランスに耐性があり、データ転送を回避できるため、前処理とモデルトレーニングを高速化できます。

参考文献
^ “ダウンロード-ApacheIgnite”。ignite.apache.org 。2021-03-25を取得。
^ 「ApacheIgniteウェブサイト」。ignite.apache.org。
^ 「ApacheIgniteインメモリコンピューティングプラットフォーム上のNikitaIvanov」。InfoQ 。
^ “Ignite Status-ApacheIncubator”。incubator.apache.org 。
^ 「ApacheIgniteインメモリコンピューティングプラットフォーム上のNikitaIvanov」。InfoQ 。
^ “Apache Ignite Native Persistence、簡単な概要-DZoneビッグデータ”。dzone.com 。
^ 「MicrosoftAzure上のKubernetesでのApacheIgniteのデプロイ-DZoneクラウド」。dzone.com 。
^ 「AWS上のApacheIgniteを使用したリアルタイムのインメモリOLTPと分析|アマゾンウェブサービス」。アマゾンウェブサービス。2016-05-14 。
^ 「クライアントとサーバー」。apacheignite.readme.io 。
^ 「ODBCドライバー」。apacheignite.readme.io 。
^ 「JDBCドライバー」。apacheignite.readme.io 。
^ 「プライマリおよびバックアップコピー」。apacheignite.readme.io 。
^ 「データのリバランス」。apacheignite.readme.io 。
^ 「ApacheIgnite2.0:再設計されたオフヒープメモリ、DDL、機械学習:ApacheIgnite」。blogs.apache.org 。
^ 「メモリアーキテクチャ」。apacheignite.readme.io 。
^ 「IgnitePersistence」。apacheignite.readme.io 。
^ 「IgnitePersistence」。apacheignite.readme.io 。
^ 「ApacheIgnite2.1-インメモリからメモリ中心のアーキテクチャへの飛躍:ApacheIgnite」。blogs.apache.org 。
^ 「データベースキャッシング用のApacheIgnite-DZoneデータベース」。dzone.com 。
^ 「分散した考え」。
^ 「ApacheIgnite1.7:併置されていない分散結合を歓迎します!-DZoneデータベース」。dzone.com 。
^ 「機械学習」。apacheignite.readme.io 。
^ 「TensorFlow:ApacheIgnite統合」。github.com 。
^ 「パーティションベースのデータセット」。apacheignite.readme.io 。
 title=