使用 Amazon SimpleDB






4.43/5 (6投票s)
本文介绍了如何使用 C# 在 Amazon SimpleDB 中开发应用程序。
引言
Amazon SimpleDB 是亚马逊提供的一项 Web 服务,允许您像在数据库中一样在其服务器上存储数据。欲了解更多详情,请访问 这里。
Amazon SimpleDB 是一个简化的数据库系统,它具有数据库的结构,但更简单,类似于电子表格。首先,您需要了解一些关于将 SimpleDB 映射到普通数据库系统的概念
Amazon Simple DB | 普通数据库系统 |
定义域 | 表格 |
Attribute | Column |
项目 | 行 |
然而,在 Amazon SimpleDB 中,没有关系,也没有数据类型。这意味着对数据库的查询只能访问一个域,并且所有返回的值都是文本类型。域的结构非常自由。它由许多项目组成(您可以将其视为工作表中的行)。每个项目都有许多属性(您可以将其视为列)。对于每一行是否具有相同的一组属性,没有要求 - 用关系数据库术语来说,它高度非规范化。要使用 C# 开发使用 Amazon SimpleDB 的应用程序,您需要 Amazon Web Service SDK。要管理 Amazon SimpleDB,您可以使用 Mindscape SimpleDB 管理工具。
服务
创建 Amazon SimpleDB 对象
现在让我们从 Amazon SimpleDB 开始。使用 Amazon SimpleDB 帐户、访问密钥和私钥,我们可以创建一个 AmazonSimpleDB
对象。此对象控制与 Amazon SimpleDB 服务器交互的所有操作。
public static String TableName = "DemoTable";
public static String Column1 = "Column 1";
public static String Column2 = "Column 2";
public static String Column3 = "Column 3";
const string AWS_ACCESS_KEY = "put_your_AWS_access_key_here";
const string AWS_SECRET_KEY = "put_your_AWS_secret_key _here";
AmazonSimpleDB client =
new AmazonSimpleDB(AWS_ACCESS_KEY, AWS_SECRET_KEY)
通常,两个密钥存储在应用程序配置中
// In application config
<appSettings>
<add key="AWSAccessKey" value="put_your_AWS_access_key_here"/>
<add key="AWSSecretKey" value="put_your_AWS_secret_key _here"/>
<appSettings>
我们从代码中获取它,如下所示
public static AmazonSimpleDB GetSimpleDBClient()
{
NameValueCollection appConfig = ConfigurationManager.AppSettings;
AmazonSimpleDB simpleDBClient = AWSClientFactory.CreateAmazonSimpleDBClient(
appConfig["AWSAccessKey"],
appConfig["AWSSecretKey"]
);
return simpleDBClient;
}
创建域
如上所述,在 Amazon SimpleDB 中,我们使用域作为表。 您可以这样创建域
boolean found = false;
String TableName = "DemoTable";
ListDomainsResponse response =
simpleDBClient.ListDomains(new ListDomainsRequest());
foreach (string domain in response.ListDomainsResult.DomainName)
{
if(domain == TableName) found = true;
}
if(!found)
{
simpleDBClient.CreateDomain(
new CreateDomainRequest() { DomainName = TableName });
}
创建后,您将在管理工具中看到它
创建域后,它没有任何属性或项目。 当我们使用管理工具打开一个域时,我们将只看到一列 ID。 此列不是属性,它是 Amazon SimpleDB 中的默认值,用于存储域中每个项目的名称。
之后,我们将为该域添加一个新的属性和新的项目。 请记住,在 SimpleDB 中,域的结构非常自由。 它由许多项目组成(您可以将其视为工作表中的行)。 每个项目都有许多属性(您可以将其视为列)。 对于每一行是否具有相同的一组属性,没有要求 - 用关系数据库术语来说。 因此,您不能在没有任何数据的情况下添加属性。 当您想添加一个新的属性时,您可以通过添加一个在新列中具有数据的项目来添加它
String Column1 = "Column 1";
String Column2 = "Column 2";
String Column3 = "Column 3";
ReplaceableAttribute replaceAttribute1 =
new ReplaceableAttribute() { Name = Column1, Replace= true, Value = "Value 1"};
ReplaceableAttribute replaceAttribute3 =
new ReplaceableAttribute() { Name = Column2, Replace = true, Value = "Value 2" };
ReplaceableAttribute replaceAttribute2 =
new ReplaceableAttribute() { Name = Column3, Replace = true, Value = "Value 3" };
List<ReplaceableAttribute> listReplaceAttribute =
new List<ReplaceableAttribute>() { replaceAttribute1,
replaceAttribute2, replaceAttribute3 };
simpleDBClient.PutAttributes(new PutAttributesRequest() {
Attribute = listReplaceAttribute, DomainName = TableName, ItemName = "DemoItem" });
从 SimpleDB 获取数据
要从 Amazon Simple DB 获取数据,有两种方法
- 按项目名称获取:项目名称(存储在域的 ID 列中的数据)是我们创建项目时设置的唯一键,因此我们可以使用它来获取项目。
- 按查询获取
GetAttributesResponse response = simpleDBClient.GetAttributes(
new GetAttributesRequest() { DomainName = TableName, ItemName = "DemoItem" });
String res = "Item: DemoItem has: ";
foreach (Amazon.SimpleDB.Model.Attribute attribute
in response.GetAttributesResult.Attribute)
{
res += "{" + attribute.Name + ", " + attribute.Value + "}, ";
}
res = res.Remove(res.Length - 2);
Console.Out.WriteLine(res);
Amazon SimpleDB 支持使用查询来获取数据。 查询结构与其他数据库查询类似,并且易于构建和理解。 这是获取数据的最常用方法,因为它非常灵活。
SelectResponse response = simpleDBClient.Select(new SelectRequest() {
SelectExpression = "Select * from " + TableName
});
String res = TableName + " has: ";
Console.Out.WriteLine(res);
foreach (Item item in response.SelectResult.Item)
{
res = item.Name + ": ";
foreach (Amazon.SimpleDB.Model.Attribute attribute in item.Attribute)
{
res += "{" + attribute.Name + ", " + attribute.Value + "}, ";
}
res = res.Remove(res.Length - 2);
Console.Out.WriteLine(res);
}
从 SimpleDB 获取数据时,我们需要记住四件事
- Amazon SimpleDB 没有任何关系,因此查询只能访问一个域,并且不能进行连接。
- 所有属性值返回都具有字符串类型。
- 在 SimpleDB 中,对于每一行是否具有相同的一组属性,没有要求。 因此,当您获取一个没有属性值的项目时,您可能会认为在结果项目中,该属性将具有一个空白值或 null,但这是错误的。 结果项目将没有该属性,我们无法获取该值。
- 当您使用“按查询获取数据”时,ID 列不能用于过滤、排序...因为 ID 列是一个唯一列,它指的是项目的名称,并且它不存在于项目的属性中。
删除域中的项目
当您想删除一个项目时,您需要该项目的确切名称。
simpleDBClient.DeleteAttributes(new DeleteAttributesRequest() {
DomainName = TableName,
ItemName = "DemoItem"
});
结论
Amazon SimpleDB 服务是存储简单数据库的好服务。 尽管它很简单,但提供的功能足以满足小型数据库的需求,并且在许多情况下,它将是存储在线数据库的最佳选择。 尝试理解它并使用它,您会发现一些非常棒的东西。
历史
- 2011 年 4 月 24 日:初始发布。