記事
· 2022年8月30日 4m read

各アクセス方法(ダイレクト/SQL/オブジェクトアクセス)による速度の違いについて

これは InterSystems FAQ サイトの記事です。

InterSystems IRIS Data Platform(以下IRISと表記)ではマルチモデルのサポートにより、データに対して様々なアクセス手法を使用することができます。

主だったアクセス手法としてダイレクトアクセスSQLアクセスオブジェクトアクセスがあります。
 

ダイレクトアクセス は、IRISのネイティブ構造であるグローバルと呼ばれるキーバリュー型のデータに直接アクセスする方法です。

SQLアクセス は、リレーショナルデータベースシステムにアクセスするための標準言語であるSQLを使用してデータにアクセスする方法です。

オブジェクトアクセス は、オブジェクト指向言語でオブジェクトを操作するための表記法として幅広く利用されるドット記法を使用してデータにアクセスする方法です。


ダイレクトアクセスとSQLアクセスおよびオブジェクトアクセスでは、処理の抽象度が異なります。

抽象度が高くなるに伴い、内部的な処理のオーバヘッドが増加するため、単純な1スレッド単位でのアクセススピードの速さについては、ダイレクトアクセスが、SQLアクセスとオブジェクトアクセスに比較して速い場合が多いです。

しかしながら、今後SQLアクセスに関してより高速に処理できるよう様々な開発が進行中です。

その点を考慮すると段々とその性能差が縮小していくことが期待できます。

一方で、IRISではマルチコア、マルチCPU環境またはシャーディング機能を利用することでSQLクエリーを並列実行する機能があるので、並列実行が効力を発揮するケースでは、ダイレクトアクセスで処理するより、圧倒的に高速に処理できる(集計処理など)場合があります。

オブジェクトアクセスとSQLアクセスでは、条件次第で、どちらが速いとは一概に言えませんが、一般的にはSQLで処理するほうが高速です。  

クエリー処理に関しては、オブジェクトアクセスではなくSQLで実装することが一般的です。

またアクセススピードの違いには、使用するプログラミング言語の違いによる影響もあります。

全てのアクセス手法においてネイティブなプログラム言語であるObjectScriptでコードを記述するのが最速であるケースが多いです。

JDBCやODBC等を使用したSQL、オブジェクトアクセスの場合には、ObjectScriptでデータベースに直接アクセスするのに比しネットワーク層を介する分オーバーヘッドが大きくなり、大量にデータをアクセスする際には処理時間に大きな差が発生します。

しかしながら他のプログラム言語でのアクセスもObjectScriptでのアクセスに比して遜色のない性能が出るように製品の改良を続けていきますので、その差は少なくなっていくことが期待できます。


速度を比較する際、異なるアクセス手法に対して、条件を同じにすることは、非常に難しいことです。

あるいは、単純な速度比較は無意味なケースもあります。

アクセススピードを考える時には、以下の視点が必要です。

例えば、データの入力処理を考えてみると、データ登録前に入力データの妥当性チェックが必要となります。

オブジェクトアクセスとSQLアクセスでは、データ保存処理時、システムによる型に基づく妥当性チェックを自動的に行います。

一方、ダイレクトアクセスでは、開発者が自分で、その処理用コードを追加する必要があります。

また、オブジェクト間に複雑な関連がある場合、オブジェクトアクセスの場合は、システムがその複雑さを理解しながら、適切に処理してくれるのに対して、SQLアクセスの場合は、処理単位が行単位のため、関連は開発者が自分で処理しなければならないケースもでてきます。

これらの事と、処理スピードとは、基本的に逆の相関関係にあり、何らかのトレードオフがつきものです。

以上のことを踏まえ、どちらを優先するか考えながら適切なアクセス手法を選択することをお勧めします。
(繰り返しになりますが、マルチコア、マルチCPU、シャーディング環境では、クエリー処理に関してSQLで処理することで高速に処理できる可能性が高まります。)

 


さらに、InterSystems製品のメリットは、各種アクセス手法を適宜使い分けることにより、アプリケーション開発を最適化できる点にあることを、ご理解いただけたら幸いです。

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください