xDB Collectionデータベース シャードの分割またはマージ

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore 9.3以降では、Microsoftの分割/マージ サービスを使用して、シャード間でデータを再分散できます。

制限

Sitecore 9.3では、分割/マージ サービスには次の制限があります。

  • SQL Azureでのみ使用できます。

  • Always Encryptedと組み合わせて使用することはできません。分割操作またはマージ操作を実行する前に、データを復号化する必要があります。

  • xDB CollectionデータベースのShardKeyフィールドには値が必要です。Sitecore 9.3より前に収集されたデータを更新するには、xDBコレクション更新ツールを使用する必要があります。

シャードの分割

分割操作では、指定されたシャードキー範囲を持つレコードがシャードAからシャードBに移動します。分割操作は、次の処理を行います。

  • 一度に分割できるシャードは1つだけです。

  • 一度に分割できるシャード マップは1つだけです。シャード マップには3つあります。

    • DeviceProfileIdShardMap

    • ContactIdShardMap

    • ContactIdentifiersIndexShardMap

    メモ

    すべてのシャード マップを分割する必要はありません。分割ContactIdShardMapのみを選択できます。

すべてのシャード マップを含む3つのシャードを分割するには、12の操作 (3つのシャードを追加し、各シャード マップごとに1回) 各シャードを3回分割する必要があります。

分割操作を実行するには:

  1. Azure分割/マージ サービスをデプロイします。分割/マージ サービスには、2つのWebアプリ、ストレージ アカウント、データベース (Sitecoreロールとは無関係) が含まれます。

    シャードを分割またはマージする際の自己署名証明書の作成については、ナレッジベースを参照してください。

  2. xConnectを無効にして、データの損失や破損を防ぎます。xConnectを無効にするには:

    • Content DeliveryとContent Managementの役割をCMS専用モードにします。

    • xConnectに書き込むすべてのWebアプリを停止します。

    • xConnect CollectionとxConnect Collection Search serviceのWebアプリを停止します。

  3. xConnect WebアプリケーションのKuduサービスURLにアクセスします。例えば: https://mysite.scm.azurewebsites.net/

  4. SQL Sharding Deployment Toolが含まれているフォルダーを参照します。 <xconnect-root>\App_Data\collectiondeployment

    手記

    次のSQL Sharding Deployment ToolスクリプトのいずれかがKuduで動作しない場合は、フォルダー全体をローカルにダウンロードし、adminアクセス許可を持つローカルPowershellからSQL Sharding Deployment Toolスクリプトを実行します。Azureファイアウォールが正しく設定され、フォルダがダウンロードされたクライアントからAzure SQLインスタンスへのアクセスを許可し、スクリプトが実行される場所であることを確認します。

  5. SQLユーザーを、すべてのSQL Sharding Deployment Toolスクリプトに対する完全な Administrator権限を持つsa userと同等に設定します。

  6. SQLシャーディング デプロイメント ツールを使用して、空のシャードをシャード クラスターに追加します。例えば:

    .\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation “addShard” /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb" /shardConnectionString "user id=sa;password=12345;data source=.\SQL2017;" /shardnameprefix "Sitecore.Xdb.Collection.Database.Sql" /shardnamesuffix "-db" /dacpac ".\Sitecore.Xdb.Collection.Database.Sql.dacpac" 
  7. 作成したシャードで次のSQLスクリプトを使用して、xcsmmuser  ユーザーとそのアクセス許可を追加します。

    DROP USER IF EXISTS xcsmmuser
    GO
    CREATE USER xcsmmuser WITH PASSWORD = 'PasswordHere';
    GO
    EXEC sp_addrolemember 'db_datareader',xcsmmuser;
    EXEC sp_addrolemember 'db_datawriter',xcsmmuser;
    GO
    GRANT EXECUTE TO xcsmmuser;
    GO 

    xcsmmuserのパスワードは、接続文字列(パス:<xconnect-root>\App_Config\ConnectionStrings.config).

  8. 必要に応じて、分割/マージ操作のパフォーマンスを向上させるために、各シャードの次のテーブルのShardKey列にインデックスを作成します

    • Contacts

    • ContactIdentifiers

    • ContactFacets

    • Interactions

    • InteractionFacets

    • DeviceProfiles

    • DeviceProfileFacets

    • ContactIdentifierIndex

  9. 分割するシャードを選択し、分割する場所を決定します (たとえば、シャード キー範囲に関して50/50分割または75/25分割を選択できます)。これを行うには、SQL Sharding DeploymentツールのprintMapping操作を使用して、すべてのシャード マップのシャード キー範囲を取得します。

    .\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation printMapping /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb"	

    printMappingコマンドは、シャード マップとそのキー範囲の一覧を生成します。

    Current Shard Map ContactIdShardMap state:
        Demo_Xdb.Collection.Shard0 contains key range [0x:0x80)
        Demo_Xdb.Collection.Shard1 contains key range [0x80:+inf)
    Current Shard Map DeviceProfileIdShardMap state:
        Demo_Xdb.Collection.Shard0 contains key range [0x:0x80)
        Demo_Xdb.Collection.Shard1 contains key range [0x80:+inf)
    Current Shard Map ContactIdentifiersIndexShardMap state:
        Demo_Xdb.Collection.Shard0 contains key range [0x:0x80)
        Demo_Xdb.Collection.Shard1 contains key range [0x80:+inf)                            
    手記

    +inf0xFF (最高キー)を意味します。

    この例では、Demo_Xdb.Collection.Shard0シャード内のContactIdShardMapシャード マップのシャード キー範囲は0x:0x80です。ContactIdShardMapshardを50/50で分割するには、0x40キーでシャードを分割します。シャードを25/75分割するには、シャードを0x20または0x60の範囲で分割します。

    手記

    50/50の分割は、シャード キーの範囲が50/50の分割を意味します。シャード間でのデータの分布は、完全に均一ではない場合があります。

  10. 分割/マージ サービスのWebページを参照し 、分割/マージ操作を実行します。フィールドに正しい値を入力し、次の図に示すようにShard Key Typeをバイナリとして設定します。

    The split/merge web page settings for the Split operation

    フォームに入力するとき:

    • Split at Keyは、ステップ7で選択したキーです。たとえば、キー範囲が0x:0x80の場合、シャードを25/75に分割するには0x20を指定します。

      手記

      シャードは、名前ではなくキー範囲で選択します。このツールは、分割することを選択したキー値に基づいて、どのシャードをターゲットにするかを決定します。

    • Split Behaviorオプションは、新しいシャードに移動するキー範囲を決定します。たとえば、0x20で分割してMove range from low key (incl.) to split key (excl.)を選択した場合、新しいシャードの範囲は0x:0x19になります。

  11. Submitをクリックしてツールを実行します。

  12. 分割が完了したら、ShardKey列のインデックスを削除します (手順6で作成した列の場合)。

大事な

分割操作の実行後にxDBインデックスを再構築します。

シャードのマージ

マージ操作を実行するには:

  1. Azure分割/マージ サービスをデプロイします。分割/マージ サービスには、2つのWebアプリ、ストレージ アカウント、データベース (Sitecoreロールとは無関係) が含まれます。

  2. xConnectを無効にして、データの損失や破損を防ぎます。xConnectを無効にするには:

    • Content DeliveryとContent Managementの役割をCMS専用モードにします。

    • xConnectに書き込むすべてのWebアプリを停止します。

    • Connect CollectionとxConnect Collection SearchサービスのWebアプリを停止します。

  3. xConnect WebアプリケーションのKuduサービスURLにアクセスします。例えば: https://mysite.scm.azurewebsites.net/

  4. SQL Sharding Deployment Toolが含まれているフォルダーを参照します。 <xconnect-root>\App_Data\collectiondeployment

    手記

    次のSQL Sharding Deployment ToolスクリプトのいずれかがKuduで動作しない場合は、フォルダー全体をローカルにダウンロードし、adminアクセス許可を持つローカルPowershellからSQL Sharding Deployment Toolスクリプトを実行します。Azureファイアウォールが正しく設定され、フォルダがダウンロードされたクライアントからAzure SQLインスタンスへのアクセスを許可し、スクリプトが実行される場所であることを確認します。

  5. SQLユーザーを、すべてのSQL Sharding Deployment Toolスクリプトに対する完全なAdministrator権限を持つsa userと同等に設定します。

  6. 必要に応じて、マージ操作のパフォーマンスを向上させるために、各シャードの次のテーブルのShardKey列にインデックスを作成します

    • Contacts

    • ContactIdentifiers

    • ContactFacets

    • Interactions

    • InteractionFacets

    • DeviceProfiles

    • DeviceProfileFacets

    • ContactIdentifierIndex

  7. マージするシャードを選択します。これを行うには、SQL Sharding DeploymentツールのprintMapping操作を使用して、すべてのシャード マップのシャード キー範囲を取得します。例えば:

    .\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation printMapping /connectionstring "user id=sa;password=12345;data source=(server);" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb"	

    次の例は、printMapping操作の出力を示しています。

            Current Shard Map ContactIdShardMap state:
                    Demo_Xdb.Collection.Shard0 contains key range [0x:0x40)
                    Demo_Xdb.Collection.Shard1 contains key range [0x40:0x80)
                    Demo_Xdb.Collection.Shard2 contains key range [0x80:+inf)
            
    手記

    +inf0xFF (最高キー)を意味します。

    この例では、シャード キー範囲0x:0x40 (Demo_Xdb.Collection.Shard0) をシャード キー範囲0x40:0x80 (Demo_Xdb.Collection.Shard1) にマージします。

  8. 分割/マージ サービスのWebページを参照し 、分割/マージ操作を実行します。フィールドに正しい値を入力し、次の図に示すようにShard Key Typeをバイナリとして設定します。

    Split/merge service web page showing the settings for the Merge operaton

    シャード範囲0x:0x40をシャード範囲0x40:0x80にマージする場合:

    • Source Range Low Keyは0xです。

    • Source Range High Key 0x40またはHigh is max keyを選択します。高い最大キーはinfと見なされます。

    • Target Range Low Key 0x40。

    • Target Range High Keyは0x80またはダニHigh is max keyです。高い最大キーはinfと見なされます。

    マージが完了すると、Demo_Xdb.Collection.Shard1にはキー範囲0x:0x80が含まれます。

  9. SQLシャーディング デプロイメント ツールを使用して、空のソース シャードを削除します。例えば:

    .\Sitecore.Xdb.Collection.Database.SqlShardingDeploymentTool.exe /operation deleteShard /connectionstring "user id=sa;password=12345;data source=.\SQL2017;" /shardMapManagerDatabaseName "Sitecore.Xdb.Collection.Database.Sql.ShardMapManagerDb" /shardConnectionString "user id=sa;password=12345;data source=.\SQL2017;" /shardDatabaseName "Sitecore.Xdb.Collection.Database.Sql2_"
  10. ShardKey列のインデックスを削除します (手順6で作成した場合)。

大事な

マージ操作の実行後にxDBインデックスを再構築します。

この記事を改善するための提案がある場合は、 お知らせください!