是否无法重命名Azure存储表?
我似乎无法在网上找到任何东西(甚至不是cmdlet).Visual Studio Server Explorer,Cloud Storage Studio或TableXplorer中没有此选项.
这是我的问题.定义订单的类有一个名为的属性PaymentStatus,其enum定义如下:
public enum PaymentStatuses : int
{
OnDelivery = 1,
Paid = 2,
Processed = 3,
Cleared = 4
}
Run Code Online (Sandbox Code Playgroud)
后来,在类本身中,属性定义非常简单:
public PaymentStatuses? PaymentStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将订单保存到Azure表存储,则会出现以下异常:
System.InvalidOperationException: The type Order+PaymentStatuses' has no settable properties.
Run Code Online (Sandbox Code Playgroud)
在这一点上,我认为使用enum是不可能的,但快速谷歌搜索返回此:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/7eb1a2ca-6c1b-4440-b40e-012db98ccb0a
此页面列出了两个答案,其中一个似乎忽略了这些问题,并建议enum在Azure存储中使用它很好.
现在,我不需要存储enum在Azure表存储中,我也可以存储相应的int,但是,我确实需要在WCF服务中公开此属性.
我已尝试使用属性get并从存储中set返回,并通过使用我的事件从Azure中删除此属性,但我在触发此实体的事件之前得到该异常.enumintegerWritingEntityDataContext
在这一点上,我不知所措,我不知道我还能做些什么才能在WCF中拥有这个属性enum,但是Azure存储只是int.
我在存储或者DateTime值的时候得到一个聚合异常.如何在Azure表存储中存储可接受的默认值?nullDateTime.MinValueDateTime
在做了一些研究之后,我仍然不确定如何最好地保持与Azure Table Storage的"连接".应该CloudTableClient或CloudTable实例跨请求被重用?
我们在公共的高流量API背后使用Table Storage.我们需要高读取可用性和性能.所有查询都是POINT查询(分区键和行键都可用),响应支付的大小很小(小于1千字节).写性能不是一个大问题.API上的每个请求都可以在几个分区中读取最多10个点查询.
从我的阅读中,我了解到以下内容:
CloudTableClient不是线程安全的,应该为每个事务创建.显然,这不应该在连续重建时妨碍性能.
CloudTable因此,还必须为每个事务创建一个实例.
这些是正确的假设吗?
因此CloudTableClient,我正在重新初始化并CloudTable满足每一项要求.这感觉很浪费.
见实施:
public class EntityStorageComponent : IEntityComponent
{
private CloudStorageAccount storageAccount;
public CloudTable Table
{
get
{
var tableClient = storageAccount.CreateCloudTableClient();
ServicePoint tableServicePoint = ServicePointManager.FindServicePoint(storageAccount.TableEndpoint);
tableServicePoint.UseNagleAlgorithm = false;
tableServicePoint.ConnectionLimit = 100;
var context = new OperationContext();
context.Retrying += (sender, args) =>
{
Debug.WriteLine("Retry policy activated");
};
// Attempt delays: ~200ms, ~200ms, ~200ms
var requestOptions = new TableRequestOptions
{
RetryPolicy = …Run Code Online (Sandbox Code Playgroud) 我正在创建一个小型的事件源式函数应用程序,其中每次调用函数都会将事件写入表存储。这种事件的一个例子是:
+------------+---------------+-----------------+
| Event | Timestamp | Destination |
+------------+---------------+-----------------+
| Connect | 7/1/2019 4:52 | sftp.alex.com |
| Disconnect | 7/1/2019 4:53 | sftp.liza.com |
| Connect | 7/1/2019 4:54 | sftp.yomama.com |
| Connect | 7/1/2019 4:54 | sftp.alex.com |
| Connect | 7/1/2019 4:59 | sftp.liza.com |
| Disconnect | 7/1/2019 4:59 | sftp.alex.com |
| Disconnect | 7/1/2019 4:59 | sftp.yomama.com |
| Connect | 7/1/2019 5:03 | sftp.alex.com |
+------------+---------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
如何在此表上创建投影?
我需要回答的主要问题是:
每个目的地目前有多少个连接?
我正在使用 Microsoft 的新 Azure.Data.Tables 库来处理 Azure 表存储。在旧库中,当您有一个实现 ITableEntity 的实体并且您有一个不想保存到存储表的属性时,您将使用 [IgnoreProperty] 注释。然而,这在新库上似乎不可用。
Azure.Data.Tables 包上的等效项是什么,或者现在如何避免将属性保存到表存储?
这是我想要坚持的课程:
public class MySpatialEntity : ITableEntity
{
public int ObjectId { get; set; }
public string Name { get; set; }
public int MonitoringArea { get; set; }
//This is the property I want to ignore because table storage cannot store it
public Point Geometry { get; set; }
//ITableEntity Members
public virtual string PartitionKey { get => MonitoringArea.ToString(); set => MonitoringArea = int.Parse(value); }
public virtual …Run Code Online (Sandbox Code Playgroud) 尝试在azure表存储中插入记录时,获取异常"属性值大于表服务允许的值".
Follwing是我的表结构,字符串PartitionKey,String RowKey,字符串Id,字符串站点,字符串名称,byte []内容,
public DateTime createdtime
我试图在内容字段中保存83755字节数组(82KB),其他字段最多35个字符.
谁能告诉我天蓝色存储表的最大行数是多少?
以下是我提到的网址..其中提到的行最多可以有1MB.但我的不超过100 KB.
谢谢,
纳思
如果我正在尝试序列化正常的CLR对象,并且我不希望序列化特定的成员变量,我可以使用
[NonSerialized]
Run Code Online (Sandbox Code Playgroud)
属性.如果我正在创建一个表服务实体,是否有一个等效属性可以用来告诉Azure表服务忽略这个属性?
我编写简单的WorkerRole,将测试数据添加到表中.插入代码是这样的.
var TableClient = this.StorageAccount.CreateCloudTableClient();
TableClient.CreateTableIfNotExist(TableName);
var Context = TableClient.GetDataServiceContext();
this.Context.AddObject(TableName, obj);
this.Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
此代码针对每个客户端请求运行.我用1-30个客户端线程进行测试.我有很多不同大小的实例.我不知道我做错了什么,但我无法达到每秒10次插入.如果有人知道如何提高速度请告诉我.谢谢
UPDATE
Azure存储表都具有时间戳列.根据此处的文档,列出的从存储表中删除的方法是选择一个实体然后将其删除.
有没有人知道如何使用代码基于时间戳值的日期时间比较从存储表中删除任何实体?
编辑:
基于给出的建议,我写了以下代码.但是,它会在我的table.ExecuteQuery(rangeQuery)调用上抛出Bad Request异常.有什么建议?
StorageCredentials creds = new StorageCredentials(logAccountName, logAccountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
CloudTableClient client = account.CreateCloudTableClient();
CloudTable table = client.GetTableReference(LogTable);
TableQuery<CloudQuerySummary> rangeQuery = new TableQuery<CloudQuerySummary>()
.Where(TableQuery.GenerateFilterCondition("Timestamp", QueryComparisons.LessThan
, DateTime.Now.AddHours(- DateTime.Now.Hour).ToString()));
TableOperation deleteOperation;
// Loop through the results, displaying information about the entity.
foreach (CloudQuerySummary entity in table.ExecuteQuery(rangeQuery))
{
deleteOperation = TableOperation.Delete(entity);
table.Execute(deleteOperation);
}
Run Code Online (Sandbox Code Playgroud)
编辑2
以下是选择复制/引用它的任何人的最终工作代码.
public void DeleteLogsNotFromToday()
{
StorageCredentials creds = new StorageCredentials(logAccountName, logAccountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true); …Run Code Online (Sandbox Code Playgroud)