我们一直在 Windows Azure 上使用混合架构,将大多数实体存储在 SQL Azure 数据库中,但将可能需要大量存储空间的任何东西都扔到 Azure 表存储中。
然而,在这种架构下,我们遇到了 Azure 表存储的各种问题,在我看来,它充其量是一个不成熟和不完整的产品。最大的限制是,出于所有实际目的,它是一个只写数据存储。共识是它的写入能力非常非常好,但它的查询和索引能力非常有限(尽管多年来用户抱怨和微软承诺) 我得出的结论是,您基本上应该只在紧急情况下尝试从 ATS 中检索数据。为一个复杂的、实时的、事务性的生产应用程序从中获取数据比它应该做的要困难得多。当然,有一些变通方法,比如维护多个数据副本,为每个副本使用不同的索引策略,或者拆分查询并并行运行它们,但是当云服务的全部目的是最小化它时,这就增加了复杂性。
也就是说,我们目前致力于 Azure,我想对替代方案和陷阱有一个很好的了解,最好是从那些实际上已经在这条生产道路上走下去的人那里。
我很清楚那里有很多 NoSQL 选项(例如,这个问题中列出的所有选项:What NoSQL solutions are out there for .NET?),我可以在 VM 或其他云中运行. 但我特别想知道是否有任何适合 Azure 的 PAAS 模型。换句话说,如果我在 Azure 上,并且不想管理我自己的 VM,并且想要尽可能接近 ATS 承诺的几乎自动和几乎无限的可扩展性(尽管从未完全交付),那么有哪些选择人们发现有价值的东西?MongoDB/Azure 包装器是一个简单可行的替代方案吗?还是我应该硬着头皮启动自己的虚拟机?还是切换到 AWS?还是坚持使用 Azure SQL?
(为了让您了解我们的大小要求:我们认为我们将需要存储超过 10 亿行。不是很大,但也不能忽略不计。)