标签: azure-table-storage

痛苦地减慢Azure表插入和删除批处理操作

使用Azure表存储时,我遇到了巨大的性能瓶颈.我的愿望是使用表作为一种缓存,因此一个漫长的过程可能会导致数百到数千行的数据.然后可以通过分区和行键快速查询数据.

查询工作速度非常快(仅使用分区和行键时速度极快,速度稍慢,但在搜索特定匹配项的属性时仍然可以接受).

但是,插入和删除行都非常慢.

澄清

我想澄清一下,即使插入一批100件物品也需要几秒钟.这不仅仅是数千行总吞吐量的问题.当我只插入100时,它正在影响我.

以下是我的代码批量插入到我的表中的示例:

static async Task BatchInsert( CloudTable table, List<ITableEntity> entities )
    {
        int rowOffset = 0;

        while ( rowOffset < entities.Count )
        {
            Stopwatch sw = Stopwatch.StartNew();

            var batch = new TableBatchOperation();

            // next batch
            var rows = entities.Skip( rowOffset ).Take( 100 ).ToList();

            foreach ( var row in rows )
                batch.Insert( row );

            // submit
            await table.ExecuteBatchAsync( batch );

            rowOffset += rows.Count;

            Trace.TraceInformation( "Elapsed time to batch insert " + rows.Count + " rows: " + …
Run Code Online (Sandbox Code Playgroud)

c# performance azure azure-table-storage

38
推荐指数
4
解决办法
2万
查看次数

我在哪里可以按类获得Unicode字符列表?

我是学习Unicode的新手,不知道我需要根据我的ASCII背景学到多少东西,但是我正在阅读C#规范中的标识符规则,以确定Azure表中允许使用哪些字符(这是直接基于C#规范).

我在哪里可以找到属于这些类别的Unicode字符列表:

  • letter-character:类Lu,Ll,Lt,Lm,Lo或Nl的Unicode字符
  • combining-character:Mn或Mc类的Unicode字符
  • decimal-digit-character:类Nd的Unicode字符
  • connecting-character:类Pc的Unicode字符
  • formatting-character:Cf类的Unicode字符

c# unicode azure azure-table-storage

37
推荐指数
3
解决办法
1万
查看次数

无法使用表存储在Azure Cloud Worker角色中加载文件或程序集Microsoft.Data.OData Version = 5.2.0.0错误

我使用Azure表存储有一个非常奇怪的问题.我在Visual Studio 2012中有一个.NET 4.5项目,我处理所有Azure表存储功能.这个项目/ dll由另外两个项目引用,我的MVC网站和我的Azure工作者角色.(我在我的机器上的Azure Emulators下运行,但是当我将它部署到云时也会发生这种情况)

我保存或检索记录时调用以下函数:

internal static CloudTable GetTable(CloudStorageAccount storageAccount, string tableReference)
{
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

    CloudTable table = tableClient.GetTableReference(tableReference);
    table.CreateIfNotExists();

    return tableClient.GetTableReference(table.Name);
}
Run Code Online (Sandbox Code Playgroud)

在我的MVC网站中,我有一个将记录保存到Azure存储表的功能,然后在我的Azure工作者角色中有一个将读取记录的服务.

因此,两者都使用相同的dll进行存储和检索,但是我的MVC项目在保存记录时没有问题,但是当我尝试检索记录时,我的Azure Worker角色服务在尝试执行"table.CreateIfNotExists()时抛出异常;".

无法加载文件或程序集"Microsoft.Data.OData,Version = 5.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我已经做了以下事情:

  1. 更新了从解决方案级别到最新版本的所有NuGet软件包
  2. 我浏览了每个项目参考,以确保没有旧的dll或以前的版本,特别是System.Spatial,Microsoft.WindowsAzure.Configuration,Microsoft.WindowsAzure.ServiceRuntime和Microsoft.ServiceBus,Microsoft.WindowsAzure.Storage, Microsoft.Data.Edm和Microsoft.Data.OData
  3. 我甚至从头开始创建了一个新的Cloud Service和WorkerRole项目,以确保它不会在当前的WorkerRole项目中被破坏.

我还没有将dll推回到5.2,因为我在其他项目中遇到太多问题,我使用的功能从5.3开始具体.

我目前正在5.5上运行所有的dll.

当我运行此处找到的AsmSpy.exe实用程序时,我得到以下输出,我不是100%确定如何解释.

> Reference: Microsoft.Data.Edm
>         5.5.0.0 by Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client
>         5.5.0.0 by Microsoft.WindowsAzure.ActiveDirectory.GraphHelper.2013_04_05
> Reference: System.Spatial
>         5.5.0.0 by Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client Reference: Microsoft.Data.OData
>         5.5.0.0 by Microsoft.Data.Services.Client …
Run Code Online (Sandbox Code Playgroud)

c azure azure-storage azure-table-storage

37
推荐指数
3
解决办法
6万
查看次数

插入或合并实体与插入或替换实体之间的区别

我正在使用Azure表存储来存储数据.我对何时使用insert-or-replace和insert-or-merge感到困惑.我正在使用Azure SDK 1.7.

我对插入或替换的理解是,如果实体存在,则用新实体替换先前实体的整个属性.如果新实体未定义属性或属性值为null,则在更新时将删除该属性.

在插入或合并中,即使新实体未在新实体中定义新属性,也将保留旧属性.我的理解是否正确?

Mahender

azure-table-storage

32
推荐指数
1
解决办法
1万
查看次数

Azure表存储RowKey限制字符模式?

Azure TableStorage RowKeys中是否存在受限制的字符模式?我无法通过大量搜索找到任何记录.但是,我在一些性能测试中得到了这样的行为.

我有一些奇怪的行为,RowKeys包含随机字符(测试驱动程序确实阻止了受限字符(/ \#?)并阻止在RowKey中发生单引号).结果是我有一个RowKey,可以很好地插入到表中,但无法查询(结果是InvalidInput).例如:

RowKey: 9}5O0J=5Z,4,D,{!IKPE,~M]%54+9G0ZQ&G34!G+
Run Code Online (Sandbox Code Playgroud)

尝试通过此RowKwy(相等)进行查询将导致错误(在我们的应用程序中,使用Azure存储资源管理器和Cloud Storage Studio 2).我看了一下通过Fiddler发送的请求:

GET /foo()?$filter=RowKey%20eq%20'9%7D5O0J=5Z,4,D,%7B!IKPE,~M%5D%54+9G0ZQ&G34!G+' HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

看起来RowKey中的%54未在过滤器中转义.有趣的是,对于包含此RowKey的批处理XML中包含URI的表存储的批处理请求,我得到了类似的行为.我也看到RowKeys使用嵌入式双引号的类似行为,但我尚未分离出该模式.

有没有人陪我这个行为?我可以很容易地限制RowKeys中出现的其他字符,但是我们真的想知道"规则".

azure azure-table-storage

31
推荐指数
4
解决办法
2万
查看次数

Microsoft.WindowsAzure.Storage与Microsoft.WindowsAzure.StorageClient

这两个组件之间有什么区别,我应该何时使用它们?我发现它们之间存在类名冲突,所以我想我应该只使用一个.

例子
Microsoft.WindowsAzure.StorageMicrosoft.WindowsAzure.Storage.Table.CloudTableClient

Microsoft.WindowsAzure.StorageClient 具有 Microsoft.WindowsAzure.StorageClient.CloudTableClient

这看起来很混乱.我无法想象微软打算将它们都用在同一个项目中.

azure azure-storage azure-table-storage azure-sdk-.net

30
推荐指数
1
解决办法
8386
查看次数

Azure存储入门:Blobs vs Tables vs SQL Azure

这是一个相当大的话题,blobs vs tables vs SQL,尽管我到目前为止所阅读的内容还是找不到适当的推理.

我们有一个多租户SaaS Web应用程序,我们即将迁移到Azure.我们使用SQL Server 2008数据库.我们存储属于文档的文档和日志信息.有点像Dropbox.

论坛声明,在考虑"大型"对象时,最好使用Azure表.我们通常每个用户存储数百个文档,文档大小从5kb到30mb不等,绝大多数都在1MB左右?

什么时候去Blob,Tables,Sql有什么基本规则?我已经知道我不应该将文档存储在SQL中,因为它太贵了.但是什么时候将文件存储在Blob中变得"有益",何时我会更好地使用表格?是否有某种公式如:

if (objects * MB/object * objectrequested > y) then blobs, else tables

azure azure-storage-blobs azure-table-storage azure-sql-database

28
推荐指数
2
解决办法
2万
查看次数

多个过滤条件Azure表存储

如何在Azure表存储上设置多个过滤器?

这就是我尝试过的:

string partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "partition1");
string date1 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.GreaterThanOrEqual, "31-8-2013T14:15:14Z");
string date2 = TableQuery.GenerateFilterCondition("Date", QueryComparisons.LessThanOrEqual, "31-8-2013T14:15:14Z");
string finalFilter = TableQuery.CombineFilters(partitionFilter, TableOperators.And, date1);
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为TableQuery.CombineFilters()只需要3个参数.我需要第二个日期的额外参数.

我的第二次尝试:

string filter = "PartitionKey eq 'partition1' and Date ge datetime'31-8-2013T14:15:14Z' and Date lt datetime'31-8-2013T14:19:10Z'";
TableQuery<CustomEntity> query = new TableQuery<CustomEntity>().Where(filter).Take(5);
Run Code Online (Sandbox Code Playgroud)

这回来了400 bad request.但是如果我删除了'datetime'它会运行但是返回没有结果,而它应该返回几个100条记录.

根据msdn的这个文档,这就是应该如何格式化日期时间.

我的结果应该是两个日期之间的所有记录.

我怎样才能做到这一点?

c# azure azure-table-storage

28
推荐指数
4
解决办法
4万
查看次数

Azure Web /辅助角色读取配置设置

从worker/web角色读取设置的最佳方式/推荐方法是什么?

是吗:

CloudConfigurationManager.GetSetting("ConnectionString") (我正在使用)

要么

RoleEnvironment.GetConfigurationSettingValue("ConnectionString")

虽然两者都很好......

在此输入图像描述

azure azure-storage azure-table-storage

26
推荐指数
1
解决办法
1万
查看次数

Azure DocumentDB和Azure表存储之间的主要区别

我正在为我的新项目选择数据库技术.我想知道Azure DocumentDB和Azure表存储之间的主要区别是什么?

似乎DocumentDB的主要优点是全文搜索和丰富的查询功能.如果我理解正确,我就不需要单独的搜索引擎库,如Lucene/Elasticsearch.

另一方面,Table Storage便宜得多.

可能影响我决定的其他差异是什么?

azure azure-table-storage azure-cosmosdb

25
推荐指数
1
解决办法
8537
查看次数