10

我有一个超出 SQL Azure 的应用程序——无论如何,我愿意付出的代价——我对调查 Azure DocumentDB 很感兴趣。预览版显然具有明显的可扩展性限制(例如,如此处所述,但我认为如果我正确使用它,我可能会在预览期间摆脱这些限制。

所以这是我的问题。如何设计我的应用程序以利用 Azure DocumentDB 的内置可伸缩性?例如,我知道使用 Azure 表存储——这种廉价但非常有限的替代方案——你需要在两步层次结构中构建所有数据:PartitionKey 和 RowKey。如果您这样做(这在现实世界的应用程序中几乎是不可能的),ATS(据我所知)在幕后移动分区,从一台机器到另一台机器,以便您获得近乎无限的可扩展性。太棒了,你永远不必考虑它。

使用 SQL Server 进行横向扩展显然要复杂得多——您需要设计自己的分片系统,处理确定有问题的分片位于哪个服务器上,等等。可能,并且做得很好,可扩展性很强,但复杂而痛苦。

那么可伸缩性如何与 DocumentDB 一起使用呢?它保证了任意的可扩展性,但是存储引擎在幕后是如何工作的呢?我看到它有“数据库”,每个数据库都可以有一些“集合”,等等。但它的任意可扩展性如何映射到这些其他概念?如果我有一个包含数亿行的 SQL 表,如果我将所有这些数据放入一个集合中,我是否可以获得所需的可伸缩性?还是我需要手动将它分布在多个集合中,以某种方式分片?还是跨多个数据库?或者 DocumentDB 是否足够聪明,可以以一种高效的方式跨多台机器合并查询,而无需我考虑任何事情?或者...?

我一直在环顾四周,但尚未找到有关如何解决此问题的任何指导。对其他人发现的内容或 MS 推荐的内容非常感兴趣。

4

3 回答 3

13

更新:截至 2016 年 4 月,DocumentDB 引入了分区集合的概念,允许您横向扩展并利用服务器端分区。

单个 DocumentDB 数据库实际上可以扩展到无限量的由集合分区的文档存储(换句话说,您可以通过添加更多集合来扩展)。

每个集合提供 10 GB 的存储空间和可变数量的吞吐量(基于性能级别)。集合还提供了文档存储和查询执行的范围;也是其中包含的所有文档的事务域。

来源:http ://azure.microsoft.com/en-us/documentation/articles/documentdb-manage/

这是我写的关于 DocumentDB 上多租户应用程序的数据缩放和分区的博客文章的链接。

于 2014-09-03T16:41:53.997 回答
3

使用最新版本的 DocumentDB,情况发生了变化。每个集合仍有 10GB 的限制,但在过去,由您决定如何将数据拆分为多个集合以避免达到 10GB 的限制。

相反,您现在可以指定分区键,DocumentDB 现在会为您处理分区,例如,如果您有日志数据,您可能希望根据 JSON 文档中的日期值对数据进行分区,以便每天创建一个新分区.

于 2016-04-19T09:22:53.087 回答
0

你可以扇出这样的查询 - http://stuartmcleantech.blogspot.co.uk/2016/03/scalable-querying-multiple-azure.html

于 2016-03-03T19:39:47.283 回答