2

我无法决定通过 Azure 存储处理以下场景的最佳方法。

  • ~1500+ CSV 文件在 ~1MB 到 ~500MB 之间 ~20GB 数据
  • 每个文件使用完全相同的模型,每个model.toString()是 ~50 个字符 ~400byte
  • 每个工作日,在 6 小时内,每分钟约 8000 多个新行
  • 根据属性值,每一行都转到正确的文件
  • 只要支持多读,就不需要多实例写入,即使快照周期有几秒钟的延迟也可以。

我想使用Block Blob,但将约 400MB 的单个文件下载到计算机中,只是添加一行并将其上传回来是没有意义的,我找不到其他方法。

不幸的是,有一个使用Page Blob的 Drive 选项不受 SDKv2 支持,这让我担心可能会停止支持

最后一个是Table看起来不错,除了继续读取几十万行之外可能会成为一个问题

基本上,我更喜欢在立即检索数据时写入文件。但是,如果值得放弃,我可以在一天结束时接受一次更新,这意味着每个文件大约 300-1000 行

处理这种情况的最佳方法是什么?

4

1 回答 1

3

根据您的上述要求,Azure 表是最佳选择。使用单个 Azure 存储帐户,您可以获得以下内容:

存储事务– 每秒最多 20,000 个实体/消息/blob

单表分区——表分区是表中具有相同分区键值的所有实体,大多数表都有很多分区。单个分区的吞吐量目标是:

  • 每秒最多 20,000 个实体
  • 请注意,这是针对单个分区,而不是单个表。因此,具有良好分区的表每秒可以处理多达几千个请求(最多存储帐户目标 20,000)。

- 为表使用更细粒度的 PartitionKey,以便我们能够自动将表分区分布在更多服务器上。

关于连续读取“几十万行”,您的主要障碍是存储级别 20,000 个事务/秒,但是如果您将分区设计得如此细化以在数百台服务器上对它们进行分段,您可以在几分钟内读取“数十万行”。

来源:

  1. Windows Azure 存储抽象及其可扩展性目标
  2. Windows Azure 的平面网络存储和 2012 年可扩展性目标
于 2013-03-11T16:46:43.760 回答