Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
性能-表服务,SQLAzure-插入。对大量数据的查询速度_Azure_Azure Sql Database_Azure Storage - Fatal编程技术网

性能-表服务,SQLAzure-插入。对大量数据的查询速度

性能-表服务,SQLAzure-插入。对大量数据的查询速度,azure,azure-sql-database,azure-storage,Azure,Azure Sql Database,Azure Storage,我读过很多关于比较SQLAzure和表服务的帖子和文章,其中大多数都告诉我表服务比SQLAzure更具可伸缩性 对不起http,我是新用户>_< 但基准显示了不同的情况 我的案子。使用SQLAzure:一个表包含许多插入,大约17200000/天,每秒2000次。当我在一个表中有200万条记录或9999…90亿条记录时,插入和选择是否可以获得良好的性能 使用表服务:一个具有一定数量分区的表。分区的数量可以很大,非常大 问题1:对于在一个表中创建多个分区,表服务是否有一些限制或最佳实践 问题2:在

我读过很多关于比较SQLAzure和表服务的帖子和文章,其中大多数都告诉我表服务比SQLAzure更具可伸缩性

对不起http,我是新用户>_< 但基准显示了不同的情况

我的案子。使用SQLAzure:一个表包含许多插入,大约17200000/天,每秒2000次。当我在一个表中有200万条记录或9999…90亿条记录时,插入和选择是否可以获得良好的性能

使用表服务:一个具有一定数量分区的表。分区的数量可以很大,非常大

问题1:对于在一个表中创建多个分区,表服务是否有一些限制或最佳实践

问题2:在单个分区中,我有大量的小实体,如上面的SQLAzure示例中所示。当我在一个分区中有200万条记录或99990亿个实体时,插入和选择是否可以获得良好的性能

我知道切分或分区解决方案,但它是一种云服务,云不是功能强大,并且在没有代码技能的情况下完成所有工作

问题3:有人能告诉我查询SQLAzure和表服务的大量数据的基准吗

问题4:也许你能为我的情况提出更好的解决方案。

简短回答

我没有看到很多分区会导致Azure表AZT问题,但我没有这么多的数据。 分区中的项目越多,该分区中的查询速度越慢 对不起,没有,我没有基准 见下文 长话短说

在您的情况下,我怀疑SQL Azure不适合您,这仅仅是因为SQL Azure数据库的大小受到限制。如果您插入的每一行都有1K的索引,那么您将在大约300天内达到50GB的限制。的确,微软正在谈论大于50GB的数据库,但他们没有给出时间框架。SQLAzure还有一个吞吐量限制,我目前无法找到,但我很确定它比您需要的要少。您可以通过跨多个SQLAzure数据库对数据进行分区来解决这个问题

SQLAzure的优势在于能够运行聚合查询。在AZT中,如果不加载每个客户,您甚至无法从客户处写入select count*

AZT还限制每个分区每秒500个事务,限制为

我发现,选择分区键PK和行键RK的用途取决于如何查询数据。如果您想单独访问这些项中的每一项,只需给每一行它自己的分区键和一个常量行键。这意味着您有很多分区

例如,如果您插入的这些行是订单,并且订单属于客户。如果按客户列出订单更为常见,则PK=CustomerId,RK=OrderId。这意味着要为客户查找订单,只需查询分区键即可。要获得特定订单,您需要知道CustomerId和OrderId。客户的订单越多,找到特定订单的速度就越慢

如果只需要通过OrderId访问订单,那么可以使用PK=OrderId,RK=string.Empty并将CustomerId放在另一个属性中。尽管您仍然可以编写一个查询,为客户返回所有订单,因为如果您的查询不使用PartitionKey,AZT不支持除on PartitionKey和RowKey之外的索引,有时即使使用PartitionKey,也会导致表扫描,具体取决于您编写它们的方式。你所说的唱片数量太多了,那就太糟糕了

在我遇到的所有场景中,拥有大量分区似乎并不太让AZT担心


另一种在AZT中对数据进行分区的方法是将数据放在不同的表中,这种方法不常被提及。例如,您可能希望每天创建一个表。如果要运行上周的查询,请对7个不同的表运行相同的查询。如果您准备在客户端上做一些工作,您甚至可以并行运行它们。

Azure SQL可以更轻松地接收这么多数据。下面是我几个月前录制的一段视频,其中显示了GitHub上的一个示例,它展示了一种实现这一点的方法

这是全部回购协议


抱歉我的沉默,我已经深入到云计算,并做了一些小的研究。这是简单的压力测试。现在需要时间来收集统计数据,有朝一日我会分享我的结果,我想:我会把这条信息交叉发布到msdn论坛。如果你感兴趣,请阅读答案