0

我正在尝试使用 MVC4 Azure,并且有我能想到的最简单的数据存储要求。每次我的控制器被击中时,我都想将日期时间和其他一些细节记录到某个位置。每个月最多可能只有几千次点击。然后我想查看一个页面,告诉我有多少点击(附加的行)。

使用 Server.MapPath... 写入文件夹中的文本文件会导致权限错误,并且由于其分布式特性,似乎不可能。获得一个完整的 SQL 实例是每月 10 美元左右。使用 table 或 blob 存储听起来很有希望,但设置服务和学习使用它们似乎远不及基本文件或数据库那么简单。

任何想法将不胜感激。

4

2 回答 2

2

使用TableStorage. 出于所有意图和目的,它是免费的(无论如何,对于您的网络角色的一小部分数量,每月只需几美分)。

至于你觉得有多复杂,其实不然。看看这篇文章开始吧。http://www.windowsazure.com/en-us/develop/net/how-to-guides/table-services/#create-table

//Create a class to hold your data
public class MyLogEntity : TableEntity
{
    public CustomerEntity(int id, DateTime when)
    {
        this.PartitionKey = when;
        this.RowKey = id;
    }

    public MyLogEntity () { }

    public string OtherProperty { get; set; }
}


//Connect to TableStorage
var connstr = CloudConfigurationManager.GetSetting("StorageConnectionString") //Config File
var storageAccount = CloudStorageAccount.Parse(connstr);

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the table if it doesn't exist.
var table = tableClient.GetTableReference("MyLog");
table.CreateIfNotExists();


var e= new MyLogEntity (%SOMEID%, %SOMEDATETIME%);
e.OtherValue = "Some Other Value";

// Create the TableOperation that inserts the customer entity.
var insertOperation = TableOperation.Insert(customer1);

// Execute the insert operation.
table.Execute(insertOperation);
于 2013-06-27T13:07:58.270 回答
2

稍微扩充@Eoin 的答案:使用表存储时,表会根据您指定的分区键分成多个分区。在分区内,您可以搜索特定行(通过行键),也可以扫描分区以查找一组行。精确匹配搜索非常非常快。分区扫描(或表扫描)可能需要一段时间,尤其是在处理大量数据的情况下。

在您的情况下,您需要行数(实体)。存储你的行看起来很简单,但你将如何计算?白天?按月?按年?可能值得将您的分区对齐到一天或一个月以加快计数(没有返回表或分区中的行数的函数 - 您最终会查询它们)。

一个技巧是每次编写特定实体时将累积值保存在另一个表中。这将非常快:

  • 写实体(类似于 Eoin 说明的)
  • 从表中读取Counts与您编写的行类型相对应的行
  • 递增并写回值

现在,您可以在任何给定时间以非常快速的方式检索计数。无论您选择什么,您都可以计算个别日子、特定月份。为此,您可以将特定日期作为分区键,让您可以非常快速地访问保存累积计数的正确实体。

于 2013-06-27T14:06:14.100 回答