初期コンテナの作成

データ生成クライアントのデータフロー

データ生成クライアントは、以下の5つのCプログラムによって作成された実行ファイルを利用します。

  • registerCoffeeChain.c
  • insertCoffeeStores.c
  • insertCoffeeMachines.c
  • preloadRecords.c
  • generateEspressoRecords.c

これらのアプリケーションの多くは、このCファイルに記載されているメソッドも使用します。
gridstorefunctions.h

gridstorefunctions.h

クライアントスクリプトで使用される5つの実行可能ファイルはすべて、gridstorefunctons.cで定義されたメソッド呼び出しおよび参照を行います。 これらのメソッドの多くは、ランダムなデータの作成やコンテナの作成、GridDBの更新に関連しています。 gridstorefunctions.hには、HOST, PORT, CLUSTER_NAME, USER, PASSWORDの5つの定数があります。 別のGridDBクラスタに接続する場合は、希望の値に設定してください。

// Change to the cluster configuration you wish to connect to, this is the default
#define HOST "239.0.0.1"
#define PORT "31999"
#define CLUSTER_NAME "defaultCluster"
#define USER "admin"
#define PASSWORD "admin"

registerCoffeeChain

このプログラムは、コーヒーチェーンコンテナの名前である単一のコマンドライン引数をとり、それをGridDBに挿入します。
GSGridStore* gridstore = makeGridStore(HOST,PORT,CLUSTER_NAME,USER,PASSWORD);
これは、gridstorefunctions.hにある単純にGridDBへの接続を確立するメソッドを使います。

GSCollection* collection = makeCoffeeStoreCollection(gridstore,argv[1]);
これにより、Coffee Chainコンテナが作成されてGridDBに挿入されます。 このアプリケーションでは、コンテナはstructではなくcontainerInfoオブジェクトでより一般的にまたは動的に作成されました。

GSCollection* coffeeChain;
GSColumnInfo columnInfo = GS_COLUMN_INFO_INITIALIZER;
….
// Create Column Schema
columnInfo.name = "store_id"; // Primary key of coffee stores is a 'store_id'
columnInfo.type = GS_TYPE_STRING;
….
// Address Column
columnInfo.name = "address"; // All stores have an 'address' location
columnInfo.type = GS_TYPE_STRING;
….
// Latitude Column
columnInfo.name = "latitude"; // Stores also can be identified as 
(latitude and longitude)
columnInfo.type = GS_TYPE_FLOAT;
….
// Longitude Column
columnInfo.name = "longitude";
columnInfo.type = GS_TYPE_FLOAT;

上記のように、作成されたスキーマは上記のスキーマの図と似ています。 緯度と経度は精度のためにfloat にキャストされます。 構造体を持たない列スキーマを作成するには、containerInfo オブジェクトcolumnInfo 配列 が必要です。 配列内の各columnInfoには、列の名前と型があります。containerInfoには、すべての列スキーマ、コンテナ名、その行キー、およびそのコンテナのタイプが保持されます。 これらのオブジェクトとそのプロパティがすべて設定されると、コンテナを作成してgsPutCollectionGeneralメソッドを使用してGridDBに挿入できます。
このコンテナが作成されると、そのコンテナ名を使用して後でコーヒーストアを挿入できます。

insertCoffeeStores.c

このプログラムは、次のコマンドライン引数をとります。

  1. The name of the coffee chain it belongs to
  2. The store id of the coffee store
  3. The address of the coffee store
  4. The latitude of the coffee store
  5. The longitude of the coffee store

プログラムは、コーヒーストアが所属するコーヒーチェーンコンテナを取得することから始まります
gsGetCollectionGeneral(gridstore,argv[1],&coffeeStore);
次に、プログラムは、コーヒーチェーンにコーヒーストアを表す行を挿入するために、これらの引数を受け取り、解析します。
insertCoffeeStore(coffeeChain,argv[2],reformatAddress(argv[3]),latitude,longitude);

gsSetRowFieldByString(storeEntry,0,store_id); // Set store's id
gsSetRowFieldByString(storeEntry,1,address); // Set store's addresss
gsSetRowFieldByFloat(storeEntry,2,latitude); // Set store's latitude
gsSetRowFieldByFloat(storeEntry,3,longitude)
gsPutRow(coffeeChain,NULL,storeEntry,NULL); 

ここで、行フィールドが関数に渡されたコマンドライン引数によって設定され、行はコーヒーチェーンに挿入されます。 コーヒーストアはコーヒーチェーンに属しているだけでなく、コーヒーマシン用のコンテナでもあります。 そのため、機械(machines) を保管するためのコーヒーストアコンテナも必要です。
makeMachineCollection(gridstore,argv[2]);

コンテナを作成する方法は、makeCoffeeStoreCollection関数に似ています。 このコレクションには、マシンのインストール日を保持するtimestamp列があります。 マシンがインストールされてからのサイクル数を保持するinteger列もあります。 最後のクリーンサイクル以降のサイクルを保持する列もあります。 マシンのクリーンサイクルが開始されると、その列の値はゼロにリセットされます。

insertCoffeeMachines.c

このプログラムは、これらのコマンドライン引数を取り、コーヒーマシンコンテナを作成します。

  1. The store id of the coffee store the machine belongs to
  2. The serial number of the coffee machine
  3. The model number of the coffee machine
  4. The installation date of the coffee machine as a timestamp string

新しいコーヒーマシンの場合、machine がレコードの生成を開始していないため、cycle_newおよびcycles_cleanの値として0が設定され、最初に列としてコーヒーマシン(cofee machine) に挿入されます。
まず、コーヒーマシンが属するコーヒーストアコンテナを入手します。
gsGetCollectionGeneral(gridstore,argv[1],&coffeeStore);
これでコーヒーマシンは、gridstorefunctions.cファイルのinsertCoffeeMachines関数の行としてコーヒーストアに挿入できます。
insertCoffeeMachines(coffeeStore,argv[2],argv[3],timestamp,0,0);

gsSetRowFieldByString(coffeeMachine,0,serial_number);
gsSetRowFieldByString(coffeeMachine,1,model_number);
gsSetRowFieldByTimestamp(coffeeMachine,2,installation_date); 
gsSetRowFieldByInteger(coffeeMachine,3,cycles_new); 
gsSetRowFieldByInteger(coffeeMachine,4,cycles_clean);

gsPutRow(coffeeStore,NULL,coffeeMachine,NULL); 

コーヒーマシンがすでに存在する場合、プログラムは直ちに終了します。

Source Code

以下のリンクから、データ生成クライアントおよびデータ視覚化コンポーネントのアプリケーションおよびそのソースコードをダウンロードできます。

Download: datavisualisation_application.tar.gz