我有一个WCF在一个Worker角色中运行,它的方法是在表中插入。
我有很多客户端将访问这个方法在表中插入数据,但我真的需要性能。
在我的插入方法中,我一个接一个地插入,所以我想在我的WCF收到100条记录后将其更改为批量插入。我怎么能做到这一点,我可以存储一个变量与这些记录的列表,以做大容量插入以后?
您确实需要考虑数据的持久性(或缺乏持久性)。如果您等待100次上传,您将把数据临时存储在哪里?唯一安全的位置是在blob、表或队列(或SQL Database Service)中。
如果你存储在RAM中,它是不稳定的,你可能会丢失你的数据(加上你的数据将被分割到你的多个服务器实例,所以你可能会在刷新一个服务器实例之前缓冲远远超过100个数据项)。
如果您存储在队列中,您将达到与写入表相同的性能曲线。与blobs相同。
这可能是一个过早的优化。表存储为每个分区提供每秒2,000个事务(整个存储帐户每秒最多20,000个事务)。您可以拥有多个存储帐户。
假设您仔细地对数据进行分区(使用不同的分区键,而不是将所有内容存储在一个分区中),您应该看到存储吞吐量每秒超过2,000个事务。
您还可以将最多10Gbps的入站流量移动到您的存储帐户。考虑到我们新的8核56GB机器的最大网卡带宽为2Gbps,您需要同时运行5个网卡才能达到该限制。对于单核虚拟机(每个核心100Mbps),您将需要100个实例来饱和存储帐户的入口带宽潜力。
关于存储帐户带宽的所有详细信息都在本文中。