步骤 3:将样本数据加载到 DynamoDB 表中 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 3:将样本数据加载到 DynamoDB 表中

Microsoft .NET 和 DynamoDB 教程的本步骤中,您将在 Amazon DynamoDB 中使用来自 Internet Movie Database (IMDb) 的样本数据填充新 Movies 表。此数据以 JSON 格式存储在名为 moviedata.json 的本地文本文件中。

对于每部电影,moviedata.json 将定义一个 year 名称-值对、一个 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_intro 中的 Main 函数将检查确定 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 DdbIntro { public static async Task<bool> LoadingData_async(Table table, string filePath) { var movieArray = await ReadJsonMovieFile_async(filePath); if (movieArray != null) await LoadJsonMovieData_async(table, movieArray); return true; } 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..."); try { sr = new StreamReader(jsonMovieFilePath); jtr = new JsonTextReader(sr); movieArray = (JArray)await JToken.ReadFromAsync(jtr); } catch (Exception ex) { Console.WriteLine(" ERROR: could not read the file!\n Reason: {0}.", ex.Message); } finally { jtr?.Close(); sr?.Close(); } return movieArray; } public static async Task<bool> LoadJsonMovieData_async(Table moviesTable, JArray moviesArray) { 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) { return false; } } return true; } }

LoadingData_async 先等待 ReadJsonMovieFile_async。 此函数使用开源 moviedata.jsonNewtonsoft Json.NET 库读取 文件,该库已在 MIT 许可证下获得许可。

成功读取数据后,LoadingData_async 将等待 LoadJsonMovieData_async 使用 DynamoDB 文档模型 Table.PutItemAsync API 将电影记录加载到 Movies 表。有关文档模型 API 的信息,请参阅 .NET:文档模型

下一步

步骤 4:将电影添加到 DynamoDB 表