sql >> データベース >  >> NoSQL >> MongoDB

MongoDBのテストデータの作成

    はじめに:この例は、古い方法を示しています IRI RowGenを使用して、フラットファイルを使用したテストまたはシステム容量用の大規模または複雑なコレクションプロトタイプを生成および設定します。後で説明するように、RowGenは必要なテストデータを作成し、Mongoインポートユーティリティを使用してMongoDBにロードされるCSVファイルを作成します。

    2019アップデート:IRIも提供するようになりました JSONとダイレクトドライバーのサポートにより、MongoDBコレクションとRowGenやFieldShieldなどのSortCL互換のIRIソフトウェア製品間でデータを移動します。つまり、RowGenを使用してMongoDBにインポートするためのテストJSONファイルを生成するか(この記事で以下に示す方法とは異なります)、FieldShieldを使用してMongoテーブルのデータをテストターゲットにマスクできます。

    FieldShieldとRowGenの両方がIRIVoracityデータ管理プラットフォームに含まれていることに注意してください。このプラットフォームは、テストデータを作成する4つの方法を提供します。

    MongoDBは優れたクロスプラットフォームのドキュメント指向のNoSQLデータベースですが、クエリのテストや容量の計画に使用できる大規模または複雑なコレクションのプロトタイプを生成して入力する便利な方法はありません。この記事では、MongoDBがIRI RowGenを介して使用できるテストデータを作成する方法について説明し、MongoDBが機能テストとパフォーマンステストのためにインポートできる、合成でありながら現実的なCSVファイルのパラメーターを指定します。

    まず、コレクション(MongoDBテーブル)のニーズに対応するテストデータの構造と内容を検討する必要があります。一般的な計画の考慮事項については、この記事をご覧ください。

    この例では、コレクションはすべてユーザー名を持つ顧客で構成されていることがわかっています。 、名前と名前メールアドレス 、およびクレジットカード番号

    テストデータを作成するには、最初にいくつかのセットファイルを生成する必要があります。セットファイルは、すでに存在する可能性がある、またはIRIRowGenの[新しいセットファイルの生成]ウィザードを使用してデータベース列から手動または自動で生成する必要がある1つ以上のタブ区切り値のリストです。

    名前の生成

    1)RowGenが実行してセットファイルを生成できる「CreateNamesSet.rcl」という名前の複合データ値(名前と名前を組み合わせたもの)のジョブスクリプトを作成します。これらの名前はユーザー名の基礎としても使用されるため、出力を「User.set」と呼びます。

    2)Names.setに生成される3つのフィールド(姓、タブ区切り文字、名)を作成します。最初のフィールドに「LastName」という名前を付け、「names_last.set」というIRI提供のセットファイルから値を選択する方法を選択します。リテラル値「\t」を追加してタブ区切り文字を追加し、names_first.setを使用してLastName値とFirstName値に使用されるプロセスを繰り返します。

    3)コマンドラインまたはIRI Workbench GUIからRowGenを使用してCreateNamesSet.rclを実行し、タブで区切られた姓名のUser.setファイルを生成します。このファイルはで使用されます。ユーザー名の生成と、プロトタイプコレクションに入力する最終的なテストファイルビルドの両方。

    ユーザー名の生成

    ユーザー名については、上記で生成されたUsers.setファイルを利用するセットファイルを作成します。この例のユーザー名は、姓、イニシャル、ランダムに生成された100〜999の数字を組み合わせたものです。

    1)複合データウィザードを使用して新しいRowGenジョブスクリプトを作成し、「CreateUsernamesSet.rcl」という名前を付けて、出力セットファイルに「Usernames.set」という名前を付けます。

    2)Part1、Part2、Part3という名前の3つのコンポーネントを使用して複合ユーザー名値を作成します。

    3)Part1では、以前に生成されたUser.setファイルから値を選択する(参照する)方法を選択し、選択タイプに「ALL」を指定して、ユーザー間の関連付けを維持します。ユーザー名、および電子メールアドレス。サイズを5に設定します。

    4)Part2の場合、Part1で使用したプロセスを繰り返します。ただし、選択タイプを除き、[行]を選択し、[列インデックス]を2に設定します。サイズを1に設定します。これにより、すべての姓が使用されることが保証されます。世代内で、同じ行の名の最初の文字がユーザー名に追加されます。

    5)Part3では、100〜999の数値の生成を指定して、各ユーザー名にランダムな整数の接尾辞を付けます。

    CreateUsernamesSet.rclを実行すると、各ユーザー名に名前の最初の5文字、最初のイニシャル、ランダムな3桁の数字が含まれていることがわかります。

    メールの生成

    次に、ランダムに選択されたドメイン名でユーザー名の値を追加するメールセットファイルを作成します。一部のメールサービスは他のサービスよりも人気があるため、yahooドメインとGmailドメインの頻度が高いことを反映する重み付けシステムも作成します。

    1)RowGenの「新しいカスタムテストデータ」ジョブウィザードを実行して、「Emails.set」というセットファイルを生成する「CreateEmailsS​​et」というジョブを作成します。

    2)メールのユーザー名部分を作成します。 [データ定義のテスト]ダイアログで、[新しいフィールド]をクリックし、最初のフィールドの名前を[ユーザー名]に変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをUsernames.setとして「定義…」します。サイズを9に設定し、[OK]をクリックします。

    3)電子メールのドメイン部分(@記号を含む)を作成します。 [レイアウトフィールド]ダイアログで、[新しいフィールド]をクリックし、名前を「アドレス」に変更してダブルクリックします。 [生成フィールド]ダイアログで、位置が10、サイズが20の「」を指定します。下の「データ生成/データ配布」セクションで、「定義…」をクリックして、アイテムの新しいデータ配布に「WeightedEmails」という名前を付けます。

    4)新しい配布ウィザードで、[アイテムの加重配布]を選択し、これらのアイテムをそれぞれ比率とリテラルのテキストボックスに入力してから、それぞれをリストに追加します。

    (32 | @gmail.com), (32 | @yahoo.com), (2 | @ibm.com), (4 | @msn.com), (2 | @ymail.com), (2 | @inmail.com), (2 | @cnet.net), (2 | @chase.org), (1 | @iri.com), (1 | @gdic.com), (1 | @aci.com), (2 | @oracle.net), (1 | @gmx.org), (4 | @aol.com), (2 | @inbox.com), (2 | @hushmail.com), (2 | @outlook.com), (2 | @zoho.com), (2 | @yandex.net), (2 | @mail.com)

    これらの値を入力したら、元のウィザードで[次へ]をクリックして、[データターゲット]ダイアログに移動します。 「データターゲットの追加…」を使用して、出力ファイル「Email.set」を指定します。これは、コレクションのビルド時にも使用されます。

    (gmailとyahoo)に最も高い重みを設定したメールが最も頻繁に表示され、他のメールは定期的に表示されます。

    クレジットカード番号の生成

    最後に、計算上有効なカード番号をXXXX-XXXX-XXXX-XXXXの形式で作成します。最初の4桁は、さまざまなクレジットカード会社の実際の発行ID番号(IIN)を反映しており、最後の桁は、カードの信頼性を確認します。

    これを行うには、新しい(空の)ジョブを作成して実行します。これを「CreateCCNSet.rcl」(または.scl)と呼び、以下のスクリプトを入力して「CCN.set」を作成します。 RowGenスクリプトの/INCOLLECT値は、生成される行数を決定します。

    RowGenの専用CCN生成関数であるccn_gen( "ANY、"-")が呼び出され、このフィールドに入力されます。米国と韓国の社会保障番号、およびイタリアとオランダの国民IDにも同様の機能が存在することに注意してください。

    最終テストファイルの作成

    すべての設定ファイルが作成されたら、作成してMongoDBコレクションにエクスポートするテストCSVファイルでそれらを使用します。

    1)RowGenの「新しいカスタムテストデータ」ジョブウィザードを実行して、Customers.csvファイルを生成する「CreateMongoUserData.rcl」というジョブを作成します。このファイルは、MongoDBにエクスポートされます。

    2)[レイアウトフィールド…]をクリックして、[レイアウトフィールド]ダイアログに入ります。 [新しいフィールド]をクリックして、最初のフィールドの名前を[ユーザー名]に変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをUsernames.setとして「定義…」します。次に、選択タイプとして[すべて]を選択します。

    3)[新しいフィールド]をクリックし、2番目のフィールドの名前をLastNamesに変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをUsers.setとして「定義…」します。次に、選択タイプとして[すべて]を選択します。

    4)[新しいフィールド]をクリックして、3番目のフィールドの名前をFirstNamesに変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをUsers.setとして「定義…」します。次に、選択タイプとして[行]を選択し、列インデックスを2に設定します。

    5)[新しいフィールド]をクリックし、4番目のフィールドの名前を[メール]に変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをEmails.setとして「定義…」します。次に、選択タイプとして[すべて]を選択します。

    6)[新しいフィールド]をクリックし、5番目のフィールドの名前をCreditCardNumbersに変更します。それをダブルクリックして[生成フィールド]ダイアログを起動し、そのセットファイルをCCN.setとして「定義…」します。次に、選択タイプとして[すべて]を選択します。

    7)これらの値を入力したら、元のウィザードで[次へ]をクリックして[データターゲット]ダイアログに移動します。 「データターゲットの追加…」を使用して、出力ファイルCustomers.csvを指定します。次に、Workbenchまたはコマンドラインでスクリプトを実行して、そのファイルを生成します。

    rowgen /spec=CreateMongoUserData.rcl

    RowGenは、実行時にこのCSVファイルを生成するだけでなく、複数の他のファイル、データベース、フォーマットされたレポート、名前付きパイプ、手続き型、さらにはリアルタイムのBIRT表示も生成する可能性があることに注意してください、生成されたテストデータのフィールドをすべて同時に使用します。

    MongoDBへのインポート

    CSVファイルをMongoデータベースにインポートするには、「mongoimportユーティリティ」を呼び出して、次のコマンドを実行します。

    --db <Database Name> --collection <Collection Name> --type csv --fields <fieldname1,fieldname2,...> --file <File path to the CSV file to import>

    テストコレクション(MongoVUEで表示)のレコードは次のとおりです。MongoDBは、エントリごとに生成されたID値で自動的にインデックスを作成します。

    MongoDBは、各コレクションエントリに一意のID値を割り当てます。

    また、ProgressSoftwareのMongoDB用DataDirectODBCドライバーを使用して、テストデータをMongoデータベースに直接ロードすることもできます。 WorkbenchでRowGenジョブを実行する前に、データを受信するためにMYDBにCUSTOMERS_CNNという空のコレクションがありました。

    最初にstdoutを使用してジョブを実行し、コンソールウィンドウでテストデータをプレビューしました:

    ワークベンチでスクリプトを実行した後、データソースエクスプローラーとDataDirectJDBCドライバーを使用してデータを表示できるようになりました。

    使用可能な生成オプションの詳細については、テストファイルターゲットをご覧ください。 セクション:http://www.iri.com/products/rowgen/technical-details。


    1. キューサービスとしてのMongoDB?

    2. Mongoでnullではないことをどのようにクエリしますか?

    3. Ruby-有効期限が実装されたRedisベースのミューテックス

    4. sidekiqワーカーがperform_asyncで実行されているかどうかを確認する方法を説明します