アパッチイグナイト

アパッチイグナイト
原作者グリッドゲインシステムズ
開発者Apacheソフトウェア財団
初回リリース2015年3月24日 (2015年3月24日
安定版リリース
2.17.0 / 2025年2月13日[ 1 ] (2025年2月13日
プレビューリリース
3.0.0 / 2025年2月5日[ 1 ] (2025年2月5日
書かれたJavaC#C++SQL
オペレーティング·システムクロスプラットフォーム
プラットフォームIA-32x86-64PowerPCSPARCJava プラットフォーム.NET Framework
タイプデータベースコンピューティングプラットフォーム
ライセンスApacheライセンス2.0
Webサイトイグナイト.apache.org
リポジトリIgniteリポジトリ

Apache Ignite は、高性能コンピューティングのための分散データベース管理システムです。

Apache Igniteのデータベースは、デフォルトのストレージおよび処理層としてRAMを使用しているため、インメモリコンピューティングプラットフォームのクラスに属します。[ 2 ]ディスク層はオプションですが、有効にすると完全なデータセットが保持されます。一方、メモリ層[ 3 ]は、容量に応じて完全または一部のデータセットをキャッシュします。

Ignite のデータはキーと値のペアの形式で保存されます。データベースコンポーネントは、各ノードがデータセット全体の一部を所有するように、キーと値のペアをクラスター全体に分散します。クラスターにノードが追加または削除されるたびに、データは自動的に再調整されます。

Apache Igniteクラスタは、オンプレミスのコモディティハードウェア、クラウド(Microsoft AzureAWSGoogle Compute Engineなど)、またはKubernetesDockerApache MesosVMwareなどのコンテナ化されたプロビジョニング環境に導入できます。[ 4 ] [ 5 ]

歴史

Apache Ignite は GridGain Systems, Inc. によって開発され、2014 年にオープン ソースになりました。GridGain は引き続きソース コードの主要な提供者であり、Apache Ignite の商用バージョンとプロフェッショナル サービスの両方を提供しています。

Igniteはオープンソースとして寄贈された後、2014年10月にApacheインキュベータプログラムに受け入れられました。[ 6 ] [ 7 ] Igniteプロジェクトは2015年9月18日にインキュベータプログラムを卒業し、Apacheのトップレベルプロジェクトになりました。[ 7 ]

近年、Apache Igniteは、ユーザーベースのアクティビティやリポジトリのサイズなど、いくつかの指標で、 最もアクティブなプロジェクトのトップ5の1つになりました[ 8 ] 。

GridGainは、2010年にニキータ・イワノフとドミトリー・セトラキアンによってカリフォルニア州プレザントンで設立されました。2011年11月には200万ドルから300万ドルの資金調達ラウンドが発表されました。[ 9 ] 2013年にはカリフォルニア州フォスターシティ に拠点を移し、1000万ドルの資金調達を発表しました。[ 10 ]

クラスタリング

Apache Igniteのクラスタリングコンポーネントは、シェアードナッシングアーキテクチャを採用しています。サーバーノードは、データとインデックスを保持し、受信したリクエストと計算を処理する、クラスターのストレージおよび計算ユニットです。サーバーノードはデータノードとも呼ばれます。[ 11 ]

クライアントノードは、アプリケーションやサービスからサーバーノードのクラスター上の分散データベースへの接続ポイントです。クライアントノードは通常、専用ライブラリが開発されたJavaC#C++で書かれたアプリケーションコードに埋め込まれています。分散基盤の上に、Apache IgniteはJCache準拠のキー値API、 結合を含むANSI-99 SQL 、 ACIDトランザクション、 MapReduceのような計算などのインターフェースをサポートしています。Igniteは、他のプログラミング言語やツールからデータベースを操作する方法として、 ODBC[ 12 ] 、 JDBC [ 13 ]、およびRESTドライバーを提供しています。ドライバーはクラスターと通信するために、内部でクライアントノードまたは低レベルのソケット接続を使用します。

パーティショニングとレプリケーション

Igniteデータベースは、分散「キャッシュ」内のキーと値のペアの形式でデータを整理します(キャッシュという概念は、データベースが当初メモリ層をサポートしていたという歴史的な理由から使用されています)。通常、各キャッシュは従業員や組織などの1つのエンティティタイプを表します。

すべてのキャッシュは、ランデブーハッシュアルゴリズムを用いてクラスタノード間で均等に分散される固定の「パーティション」セットに分割されます。パーティションには常に1つのプライマリコピーと0個以上のバックアップコピーが存在します。コピーの数は、レプリケーションファクタパラメータで設定されます。[ 14 ]フルレプリケーションモードが設定されている場合、すべてのクラスタノードはパーティションのコピーを保存します。クラスタにノードが追加または削除されると、パーティションは自動的に再調整されます[ 15 ]。これにより、データの均等な分散とワークロードの分散が実現されます。

キーと値のペアはパーティションに保存されます。Apache Ignite は、キーの値を取得して特別なハッシュ関数に渡すことで、ペアをパーティションにマッピングします。

メモリアーキテクチャ

Apache Igniteのメモリアーキテクチャは2つのストレージ層で構成され、「耐久性メモリ」と呼ばれます。内部的には、メモリ空間の管理とデータ参照にページングを使用します。これは、 Unixなどのシステムの仮想メモリに似ています。 [ 16 ]しかし、耐久性メモリアーキテクチャと仮想メモリアーキテクチャの大きな違いは、耐久性メモリアーキテクチャでは、インデックス付きのデータセット全体が常にディスク上に保持される(ディスク層が有効になっている場合)のに対し、仮想メモリではRAMが不足した場合にのみディスクが使用され、スワップ処理のみに使用されることです。

メモリアーキテクチャの最初の層であるメモリ層は、データとインデックスをJavaヒープ外のRAM、いわゆる「オフヒープ領域」に保持します。これらの領域はデータベース自身によって事前に割り当てられ、管理されるため、ストレージニーズのためにJavaヒープが使用されることがなくなり、結果としてガベージコレクションによる長時間の停止を回避できます。これらの領域は固定サイズのページに分割され、データ、インデックス、およびシステムメタデータが格納されます。[ 17 ]

Apache Igniteはメモリ層から完全に動作しますが、耐久性を確保するために、第2層であるディスク層も常に使用できます。データベースには独自のネイティブ永続性機能が備わっており、さらにRDBMSNoSQLHadoopデータベースをディスク層として 使用できます。

ネイティブ永続性

Apache Ignite ネイティブパーシスタンスは、分散型で強力な一貫性を備えたディスクストアであり、常にデータとインデックスのスーパーセットをディスク上に保持します。メモリ層[ 3 ]は、その容量に応じて、可能な限り多くのデータのみをキャッシュします。例えば、エントリが1000個あり、メモリ層にそのうち300個しか保存できない場合、1000個すべてがディスクに保存され、300個のみがRAMにキャッシュされます。

永続性は、データ変更をディスク上に即時保存するために、先行書き込みログ(WAL)技術を使用します。[ 18 ]バックグラウンドでは、ストアは「チェックポイント処理」を実行します。これは、メモリ層からパーティションファイルにダーティページをコピーすることを目的としています。ダーティページとは、メモリ内で変更され、その変更がWALに記録されているものの、対応するパーティションファイルには書き込まれていないページです。チェックポイント処理により、時間の経過とともに古くなったWALセグメントを削除し、パーティションファイルに適用されていないWAL部分のみを再生することで、クラスタの再起動時間を短縮できます。[ 19 ]

サードパーティの永続性

ネイティブ永続性はバージョン2.1から利用可能になりました。[ 20 ]それ以前は、Apache Igniteはディスク層としてサードパーティのデータベースのみをサポートしていました。

Apache Igniteは、 RDBMSNoSQL、またはHadoopデータベース上のインメモリ層として構成することができ、 Hadoopデータベースの高速化に役立ちます。[ 21 ]しかし、ネイティブの永続性と比較するといくつかの制限があります。例えば、SQLクエリはRAM上のデータに対してのみ実行されるため、事前にすべてのデータセットをディスクからメモリにプリロードする必要があります。

スワップスペース

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

一貫性

Apache Igniteは、2相コミットプロトコルを実装した、強力な一貫性を備えたプラットフォームです。[ 22 ]メモリ層とディスク層の両方で一貫性が保証されます。Apache IgniteのトランザクションはACID準拠であり、複数のクラスタノードとキャッシュにまたがることができます。データベースは、悲観的および楽観的同時実行モード、デッドロックフリートランザクション、デッドロック検出技術をサポートしています。

トランザクションの保証がオプションであるシナリオでは、Apache Ignite を使用すると、パフォーマンスが向上するアトミック モードでクエリを実行できます。

分散SQL

Apache Ignite には、JDBC および ODBC ドライバー経由で公開される SQL API、およびJavaC#C++プログラミング言語向けに開発されたネイティブライブラリを使用してアクセスできます。データ操作言語とデータ定義言語の構文はどちらもANSI-99仕様に準拠しています。

Apache Igniteは分散データベースであるため、分散コロケーション結合と非コロケーション結合の両方をサポートしています。[ 23 ]データがコロケーションされている場合、結合はクラスターノードのローカルデータに対して実行されるため、ネットワークを介したデータの移動は回避されます。非コロケーション結合では、一貫性のある結果セットを作成するために、データセットがネットワーク上で移動する可能性があります。

機械学習

Apache Igniteは、機械学習のトレーニングと推論機能に加え、データの前処理とモデル品質の推定機能も提供します。[ 24 ]線形回帰決定木ランダムフォレスト勾配ブースティングSVMK-Meansなどの古典的なトレーニングアルゴリズムをネイティブにサポートしています。さらに、Apache IgniteはTensorFlowと緊密に統合されています。[ 25 ]この統合により、Apache Igniteに保存されたデータを用いて、単一ノードまたは分散方式でニューラルネットワークをトレーニングすることができます。

Apache Ignite機械学習ツールキットの核となるアイデアは、大量のデータ転送なしに分散学習と推論を瞬時に実行できることです。MapReduceアプローチに基づいておりノード障害やデータの再バランス調整に対する耐性を備え、データ転送を回避できるため、前処理とモデル学習を高速化できます。[ 26 ]

参考文献

  1. ^ a b「ダウンロード - Apache Ignite」 . ignite.apache.org . 2025年8月5日閲覧
  2. ^ 「Nikita Ivanov氏によるApache Igniteインメモリコンピューティングプラットフォームについて」 InfoQ 2017年10月11日閲覧
  3. ^ a b「Apache Ignite Native Persistence、概要 - DZone Big Data」dzone.com . 2017年10月11日閲覧
  4. ^ 「Microsoft Azure上のKubernetesでApache Igniteをデプロイする - DZone Cloud」 dzone.com 2017年10月11日閲覧
  5. ^ 「AWS 上の Apache Ignite によるリアルタイムのインメモリ OLTP と分析 | Amazon Web Services」 Amazon Web Services 2016年5月14日 2017年10月11日閲覧
  6. ^ 「Nikita Ivanov氏によるApache Igniteインメモリコンピューティングプラットフォームについて」 InfoQ 2017年11月2日閲覧
  7. ^ a b「Ignite Status - Apache Incubator」 . incubator.apache.org . 2017年11月2日閲覧
  8. ^ 「Apache Ignite Momentum: Highlights from 2020-2021 : Apache Ignite」 . blogs.apache.org . 2021年9月14日. 2022年6月13日閲覧
  9. ^ 「Form D - 証券の免除提供通知」米国証券取引委員会、2011年11月8日。 2022年2月16日閲覧
  10. ^ 「Form D - 証券の免除募集通知」米国証券取引委員会、2013年5月7日。 2022年2月16日閲覧
  11. ^ 「クライアントとサーバー」 . apacheignite.readme.io . 2017年10月11日閲覧
  12. ^ 「ODBCドライバー」 . apacheignite.readme.io . 2017年10月11日閲覧
  13. ^ 「JDBC ドライバー」 . apacheignite.readme.io . 2017年10月11日閲覧
  14. ^ 「プライマリコピーとバックアップコピー」apacheignite.readme.io . 2017年10月11日閲覧
  15. ^ 「データの再バランス」apacheignite.readme.io . 2017年10月11日閲覧
  16. ^ 「Apache Ignite 2.0: オフヒープメモリ、DDL、機械学習の再設計 : Apache Ignite」 . blogs.apache.org . 2017年5月5日. 2017年10月11日閲覧
  17. ^ 「メモリアーキテクチャ」 . apacheignite.readme.io . 2017年10月11日閲覧
  18. ^ 「Ignite Persistence」 . apacheignite.readme.io . 2017年10月11日閲覧。
  19. ^ 「Ignite Persistence」 . apacheignite.readme.io . 2017年10月11日閲覧。
  20. ^ 「Apache Ignite 2.1 - インメモリからメモリ中心のアーキテクチャへの飛躍:Apache Ignite」。blogs.apache.org2017年7月27日。 2017年10月11日閲覧
  21. ^ 「Apache Ignite for Database Caching - DZone Database」 dzone.com 2017年10月11日閲覧
  22. ^ 「Distributed Thoughts」 . 2017年10月11日閲覧
  23. ^ 「Apache Ignite 1.7: 非コロケート分散結合を歓迎! - DZoneデータベース」 dzone.com 2017年10月11日閲覧
  24. ^ 「機械学習」 . apacheignite.readme.io . 2018年12月27日閲覧
  25. ^ 「TensorFlow: Apache Ignite 統合」 . github.com . 2018年12月27日閲覧
  26. ^ 「パーティションベースのデータセット」apacheignite.readme.io . 2018年12月27日閲覧