Windows Azure的数据存储和性能比较(二)

2、 Table存储:它是以Key-Value的形式存储数据,每条记录允许的最大大小为4MB,记录的行数没有限制。

(1) Entity操作。Entity的操作是在从CloudTableClient得到的TableServiceContext(继承自DataServiceContext)上进行的。添加、更新和删除分别调用AddObject()、UpdateOjbect()和DeleteObject()方法,其中只有AddObject方法需要指定操作的表名称,调用这些方法进行Entity操作后,都需要调用SaveChanage()方法保存操作结果。

新增Entity的示例:

CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; CloudTableClient tableclient = storageAccount.CreateCloudTableClient(); tableclient.CreateTableIfNotExist("tabletest"); TableServiceContext context = tableclient.GetDataServiceContext(); context.AddObject("tabletest", new PersonInfo() { PersonID = "0", Name = "Tom", Age = 20 }); context.AddObject("tabletest", new PersonInfo() { PersonID = "1", Name = "Jerry", Age = 25 }); context.SaveChanges();

(2) Table记录查询。Table查询是调用TableServiceContext的CreateQuery()方法,使用LINQ语句执行的查询。

Table查询示例:

CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; CloudTableClient tableclient = storageAccount.CreateCloudTableClient(); tableclient.CreateTableIfNotExist("tabletest"); TableServiceContext context = tableclient.GetDataServiceContext(); var query = context.CreateQuery<PersonInfo>("tabletest").Where(c => c.PersonID == "1").ToList(); var info = query.FirstOrDefault();


以上示例代码中用到的PersonInfo类型定义。


public class PersonInfo : TableServiceEntity { public string PersonID { get { return this.RowKey; } set { this.RowKey = value; } } public string Name { get; set; } public int Age { get; set; } public PersonInfo() { this.PartitionKey = "PartKey"; } }


(3) Table操作性能曲线

a.新增、更新和删除记录的性能曲线如下图。从图中可以分析得知操作的记录数和消耗时间是线性关系,但是100条数据就需要将近20秒的时间,有点可怕啊(这可能和操作的记录大小和WebRole部署的云服务器所处位置都有一定关系)。

Windows Azure的数据存储和性能比较(二)

b.查询性能曲线如下图,查询的性能似乎还令人欣慰。

Windows Azure的数据存储和性能比较(二)

Windows Azure的数据存储和性能比较(二)