Amazon DynamoDB
開発者ガイド (API バージョン 2012-08-10)

ステップ 3: 映画テーブルにサンプルデータをロードする

Microsoft .NET と DynamoDB チュートリアル」のこのステップでは、インターネット映画データベース (IMDb) にあるサンプルデータを Amazon DynamoDB の新しい Movies テーブルに入力します。このデータは、moviedata.json という名前のローカルテキストファイルに JSON フォーマットで保存されます。

各映画で、moviedata.jsonyear の名前と値のペア、title の名前と値のペア、および複雑な info オブジェクトを定義します。その例を以下に示します。

{ "year" : 2013, "title" : "Turn It Down, Or Else!", "info" : { "directors" : [ "Alice Smith", "Bob Jones" ], "release_date" : "2013-01-18T00:00:00Z", "rating" : 6.2, "genres" : [ "Comedy", "Drama" ], "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg", "plot" : "A rock band plays their music at high volumes, annoying the neighbors.", "rank" : 11, "running_time_secs" : 5215, "actors" : [ "David Matthewman", "Ann Thomas", "Jonathan G. Neff" ] } }

moviedata.json ファイルをロードする前に、DynamoDB_introMain 関数は Movies テーブルが存在し、依然として空かどうかをチェックして判別します。その場合、03_LoadingData.cs ファイルに実装されている非同期の LoadingData_async 関数を待機します。

using System; using System.IO; using System.Threading.Tasks; using Amazon.DynamoDBv2.DocumentModel; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace DynamoDB_intro { public static partial class Ddb_Intro { /*-------------------------------------------------------------------------- * LoadingData_async *--------------------------------------------------------------------------*/ public static async Task LoadingData_async( Table table, string filePath ) { JArray movieArray; movieArray = await ReadJsonMovieFile_async( filePath ); if( movieArray != null ) await LoadJsonMovieData_async( table, movieArray ); } /*-------------------------------------------------------------------------- * ReadJsonMovieFile_async *--------------------------------------------------------------------------*/ public static async Task<JArray> ReadJsonMovieFile_async( string JsonMovieFilePath ) { StreamReader sr = null; JsonTextReader jtr = null; JArray movieArray = null; Console.WriteLine( " -- Reading the movies data from a JSON file..." ); operationSucceeded = false; operationFailed = false; try { sr = new StreamReader( JsonMovieFilePath ); jtr = new JsonTextReader( sr ); movieArray = (JArray) await JToken.ReadFromAsync( jtr ); operationSucceeded = true; } catch( Exception ex ) { Console.WriteLine( " ERROR: could not read the file!\n Reason: {0}.", ex.Message ); operationFailed = true; } finally { if( jtr != null ) jtr.Close( ); if( sr != null ) sr.Close( ); } if( operationSucceeded ) { Console.WriteLine( " -- Succeeded in reading the JSON file!" ); return ( movieArray ); } return ( null ); } /*-------------------------------------------------------------------------- * LoadJsonMovieData_async *--------------------------------------------------------------------------*/ public static async Task LoadJsonMovieData_async( Table moviesTable, JArray moviesArray ) { operationSucceeded = false; operationFailed = false; int n = moviesArray.Count; Console.Write( " -- Starting to load {0:#,##0} movie records into the Movies table asynchronously...\n" + "" + " Wrote: ", n ); for( int i = 0, j = 99; i < n; i++ ) { try { string itemJson = moviesArray[i].ToString(); Document doc = Document.FromJson(itemJson); Task putItem = moviesTable.PutItemAsync(doc); if( i >= j ) { j++; Console.Write( "{0,5:#,##0}, ", j ); if( j % 1000 == 0 ) Console.Write( "\n " ); j += 99; } await putItem; } catch( Exception ex ) { Console.WriteLine( "\n ERROR: Could not write the movie record #{0:#,##0}, because:\n {1}", i, ex.Message ); operationFailed = true; break; } } if( !operationFailed ) { operationSucceeded = true; Console.WriteLine( "\n -- Finished writing all movie records to DynamoDB!" ); } } } }

LoadingData_asyncReadJsonMovieFile_async を待機することから始まります。この関数は、オープンソースの Newtonsoft Json.NET library を使用して moviedata.json ファイルを読み込みます。これは、MIT ライセンスでライセンス付与されます。

データの読み取りが成功すると、LoadingData_asyncLoadJsonMovieData_async が DynamoDB ドキュメントモデル Table.PutItemAsync API を使用して映画レコードを Movies テーブルにロードするのを待機します。ドキュメントモデル API については、「.NET ドキュメントモデル」を参照してください。

次のステップ

ステップ 4: 映画テーブルに新しい映画を追加する

このページの内容: