マイクロバッチ処理

マイクロバッチ処理は、サーバーに対する 1 回のリクエストに複数のレコードを含める手法です。各レコードを個別にリクエストする代わりに、リクエストの中に複数のレコードを含めることにより、サービスによってレコードの大規模コレクションを処理する場合のパフォーマンスを大幅に向上させることができます。Spectrum™ Technology Platform では、REST および SOAP Web サービスと、Client SDK に対するマイクロバッチ処理がサポートされています。

マイクロバッチ サイズ

1 回のリクエストに含めることのできるレコード数に制限はありませんが、一般的に 1 回のマイクロバッチで送信するレコード数を 50 ~ 100 にすると最良のパフォーマンスが得られます。さまざまなサイズのマイクロバッチをテストして、お使いの環境における最適なマイクロバッチ サイズを確認することをお勧めします。各入力レコードのレスポンスで、複数のレコードが得られる場合もあることに注意してください。例えば、マイクロバッチに 10 件の住所を含めて住所検証を実行する場合、各住所が 2 件の検証済み住所候補に一致したとすると、レスポンスでは 10 件ではなく 20 件のレコードが得られます。

Spectrum™ Technology Platform に対するリクエストで、マイクロバッチと複数スレッドの両方を使用する場合は注意が必要です。各スレッドのマイクロバッチ サイズが大きすぎると、システムは複数スレッドに対応できない可能性があります。

レコード ID の使用

マイクロバッチの各レコードに ID を割り当てると、リクエスト内のレコードとレスポンスで返されるレコードを対応付けることができて便利かもしれません。これを行うには、ユーザ フィールドを使用します。

Client API におけるマイクロバッチ処理

サービスに対する API リクエストでマイクロバッチ処理を実行するには、複数のデータ行をリクエストで送信します。例えば、次の .NET クラスは 2 つの行をリクエストで送信します。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using ConsoleApplication1.ValidateAddress_Reference;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var validateClient = new ValidateAddress {Credentials = new NetworkCredential("admin", "admin")};

            var address1 = new input_portAddress
            {
                AddressLine1 = "1825B Kramer Lane",
                AddressLine2 = "Suite 100",
                PostalCode = "78758",
                City = "Austin",
                StateProvince = "Texas"
            };

            var address2 = new input_portAddress
            {
                AddressLine1 = "100 Congress", 
                PostalCode = "78701", 
                City = "Austin", 
                StateProvince = "Texas"
            };

            var addresses = new input_portAddress[2];
            addresses[0] = address1;
            addresses[1] = address2;

            var options = new options {OutputCasing = OutputCasing.M};
            output_portAddress[] results = validateClient.CallValidateAddress(options, addresses);

            for (int i = 0; i < results.Length; i++)
            {
                System.Console.WriteLine("Record " + (i+1) + ":");
                System.Console.WriteLine("AddressLine1=" + results[i].AddressLine1);
                System.Console.WriteLine("City=" + results[i].City);
                System.Console.WriteLine("StateProvince=" + results[i].StateProvince);
                System.Console.WriteLine("PostalCode=" + results[i].PostalCode + "\n");
            }
            
            System.Console.Write("Press any key to continue...");
            System.Console.ReadKey();
        }
    }
}
ヒント: リクエストとリクエストの間で切断してはいけません。切断と接続を繰り返すと、パフォーマンスが低下する恐れがあります。