2013-04-27 59 views
1

我有一个WCF以一种在表中插入的方法在工作者角色中运行。如何在工作者角色中使用WCF进行批量插入

我有很多客户端会访问这个方法来在表中插入数据,但我真的需要在这方面的性能。

在我的插入方法中,我一个接一个地插入,所以我想在我的WCF收到100条记录之后将其更改为执行批量插入。我该怎么做,我可以在哪里存储一个带有这些记录列表的变量,以便稍后进行批量插入?

回答

3

你真的需要考虑你的数据的耐久性(或缺乏)。如果您等待100次上传,您将在哪里临时存储数据?唯一的安全地方是在斑点,表或队列(或SQL数据库服务)。

如果您存储在RAM中,它会变得不稳定,并且您可能会丢失数据(另外,您的数据将分散到多个服务器实例中,因此在刷新其中一个服务器实例之前,实际上最终可能会缓冲超过100个数据项)。

如果您存储在队列中,则会像写入表一样达到相同的性能曲线。与blob一样。

这可能是一个不成熟的优化。表存储为您提供每分区每秒2,000个事务(存储帐户中每秒最多20,000个事务)。你可以有多个存储帐户。

假设你仔细划分您的数据(与不同分区键,对存储在一个分区中的所有内容),你应该看到每秒超过2,000个事务为您的存储吞吐量。

您还可以将最高10Gbps的入站内容移动到您的存储帐户。考虑到我们新的8核56GB机器的最大网卡带宽为2Gbps,您需要同时运行5个才能达到此限制。使用单核虚拟机(每核心速率为100Mbps),您需要100个实例来饱和存储帐户的入口带宽潜力。

有关存储帐户带宽的所有详细信息均在this article之内。

+0

那么我怎么能在WorkerRole中每秒获得这2000个插入? – Greg 2013-04-27 16:44:44

+0

辅助角色等同于Windows Server虚拟机。只需设计您的WCF服务即可同时处理多个传入请求。你的WCF服务可以每秒处理2000次上传吗?如果是这样,为什么你不能每秒写入2000次存储?这也引出了一个问题:您是否尝试过做任何基准测试?如果你甚至没有基线,有点难以优化。 – 2013-04-27 16:53:59

+0

谢谢你,我想我发现了我的问题。 – Greg 2013-04-27 21:49:18