我得到了一个超出SQL Azure的应用程序 - 无论如何我愿意付出代价 - 而且我对调查Azure DocumentDB感兴趣。预览显然具有明显的可扩展性限制(例如,如here所述),但我认为如果我正确使用它,我可能可以在预览期内使用它们。
所以这就是我所得到的问题。如何设计我的应用程序以利用Azure DocumentDB的内置可伸缩性?例如,我知道使用Azure表存储 - 这种便宜但糟糕非常有限的替代方案 - 您需要以两步层次结构构建所有数据:PartitionKey和RowKey。如果你这样做(在现实世界的应用程序中几乎不可能),ATS(据我所知)在幕后移动分区,从机器到机器,这样你就可以获得接近无限的可扩展性。太棒了,你永远不必考虑它。
使用SQL Server进行扩展显然要复杂得多 - 您需要设计自己的分片系统,处理找出有问题的分片所在的服务器,等等。可能,并且完全可扩展,但复杂而痛苦。
那么可伸缩性如何与DocumentDB一起使用?它承诺任意可扩展性,但存储引擎如何在幕后工作?我看到它有"数据库",每个数据库可以有一些"集合"等等。但是它的任意可伸缩性如何映射到这些其他概念?如果我有一个包含数亿行的SQL表,如果我将所有这些数据放入一个集合中,我是否会获得所需的可伸缩性?或者我是否需要手动将其分布在多个集合中,以某种方式进行分片?或者跨多个DB?或者DocumentDB是否足够聪明,能够以多种方式从多台计算机中合并查询,而不必考虑任何问题?还是...?
我一直在四处寻找,但尚未找到任何关于如何处理此问题的指导。对其他人找到的或MS建议的内容非常感兴趣。
答案 0 :(得分:13)
更新:截至2016年4月,DocumentDB引入了partitioned collection概念,允许您向外扩展并利用服务器端分区。
单个DocumentDB数据库实际上可以扩展到由集合划分的无限量的文档存储(换句话说,您可以通过添加更多集合来扩展)。
每个集合提供10 GB的存储空间和可变的吞吐量(基于性能级别)。集合还提供文档存储和查询执行的范围;并且也是其中包含的所有文档的交易域。
来源:http://azure.microsoft.com/en-us/documentation/articles/documentdb-manage/
这是我在DocumentDB上为多租户应用程序扩展和分区数据写的link to a blog post。
答案 1 :(得分:3)
使用最新版本的DocumentDB,情况发生了变化。每个集合仍然有10GB的限制,但在过去,您需要弄清楚如何将数据分成多个集合以避免达到10 GB的限制。
相反,您现在可以指定分区键,DocumentDB现在可以为您处理分区,例如如果您有日志数据,则可能需要在JSON文档中对日期值进行分区,以便每天创建一个新分区。
答案 2 :(得分:0)