Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$Increment および $Sequence 関数

配列とグローバルについての学習内容のまとめとして、次の演習では、ユーザが入力したデータを保存するメソッドをデータ入力クラスに追加します。ここでは $Increment 関数を使用します。これは非常にシンプルで、変数とオプションのインクリメントを取得して、変数をインクリメントし、新しい値も返します。インクリメントは正でも負の数でも可能です。この例では、既定で 1 をインクリメントしています。

$Increment は変数と共に使用できますが、その主な目的は、一意の ID 番号を生成するためにグローバル・ノードをすばやくアトミックにインクリメントすることです。この方法は次の演習で使用します。

ターミナル


USER>write a

WRITE a
^
<UNDEFINED> *a
USER>write $increment(a)
1
USER>write $increment(a)
2
USER>write $increment(a, 2)
4
USER>write a
4
USER>

20 人がこの単純なデータ入力アプリケーションを使用して同時にデータベースにレコードを追加しても、$Increment に処理の遅れは発生しません。しかし、取り込み速度がこれよりもずっと大きくなると (例えば、100 個のプロセスが 1 分あたり 10,000 レコードを電子的に受信する場合)、$Increment はボトルネックになり始めます。このような場合のために、ObjectScript には、インクリメント引数を取らない $Sequence が用意されています。以下に、これを使用してグローバル・ノードをインクリメントする場合の処理内容を説明します。

  • あまり使用率の高くないシステムでは、$Sequence は、$Increment と同じようにグローバル・ノードを 1 ずつインクリメントします。

  • 使用率の高いシステムでは、$Sequence は、ノードをインクリメントする数を増やし、1 つではなく一意の ID 番号の範囲を各プロセスに割り当てます。プロセスが次回 $Sequence を使用するときは、単に範囲内の次の ID 番号を返します。この範囲を使い切ると、$Sequence の次の呼び出しによってもう一度グローバル・ノードをインクリメントし、新しい範囲をプロセスに割り当てます。システムの使用率が高くなると $Sequence は割り当てる範囲を広げ、使用率が下がると再度範囲を小さくします。

FeedbackOpens in a new tab