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部署的云服务器所处位置都有一定关系)。
b.查询性能曲线如下图,查询的性能似乎还令人欣慰。