Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure DocumentDB如何扩展?我需要担心吗?_Azure_Azure Cosmosdb - Fatal编程技术网

Azure DocumentDB如何扩展?我需要担心吗?

Azure DocumentDB如何扩展?我需要担心吗?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我有一个超过SQL Azure的应用程序——无论如何,以我愿意支付的价格——我对调查Azure DocumentDB感兴趣。预览显然有明显的可伸缩性限制(例如,如前所述),但我认为如果我正确使用它,我可能在预览期间不受这些限制 这是我的问题。我需要如何设计我的应用程序以利用Azure DocumentDB的内置可伸缩性?例如,我知道使用Azure表存储(这是一种廉价但非常有限的替代方案)时,您需要将所有数据分为两步结构:PartitionKey和RowKey。如果您这样做(这在现实世界的应用程序

我有一个超过SQL Azure的应用程序——无论如何,以我愿意支付的价格——我对调查Azure DocumentDB感兴趣。预览显然有明显的可伸缩性限制(例如,如前所述),但我认为如果我正确使用它,我可能在预览期间不受这些限制

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

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

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


我一直在四处寻找,还没有找到任何关于如何处理这个问题的指导。对其他人的发现或MS的建议非常感兴趣。

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

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

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

资料来源:


下面是我写的一篇关于在DocumentDB上为多租户应用程序扩展和分区数据的文章。

您可以像这样扇出查询-

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


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

不确定您为什么决定用主观和负面的注释对问题进行着色(“表存储-这是一个便宜但糟糕的替代品”)。Azure表存储是一个键/值NoSQL存储,与SQL Server(关系型)或DocumentDB(文档型)完全不同。我同意负面评论不是绝对必要的,但我发现ATS缺少在其他键值存储数据库中找到的关键功能-例如,请参阅。如果一项广泛推广的技术几乎无法使用,那么提到这一点似乎并非不可能。有许多人认为它非常有用。这就是为什么最好不要提及这一点颜色注释的类型不属于您的问题。我们可能同意不同意:-)(我发现ATS在一些有限的情况下很有帮助。)同时,既然我知道你是Azure架构师,那么有没有关于如何在DocumentDB中构建数据以确保可伸缩性的建议?Azure表存储也不提供自动无限扩展。吞吐量限制(基于1K大小的消息)对于单个分区,每秒只有2000条消息。整个存储帐户的聚合限制只有20000条。是的,它平衡了I/O,但自动扩展?不。正确。DocumentDB在自动分片和查询合并方面还没有任何魔力。今天,你必须自己处理跨集合的分片。明白了。换句话说,I c将集合视为最大的可伸缩性单位。如果我知道我需要一个特定的数据访问条纹来进行水平伸缩,我将不得不手动将其拆分到多个集合中。有点像SQL Server中的自切分(尽管有点容易,因为没有要维护的模式)。还没有什么神奇之处。这是否意味着集合是您的可伸缩性单元,就像azure表存储的分区一样?换句话说,如果我的所有文档都在一个集合中,这是否意味着我不会扩展到一个服务器节点之外?有点。您是对的,集合是可伸缩性单元,您可以将它们视为分区。要扩展到10gb以上,您需要跨集合对数据进行分区,并编写一些逻辑以路由到正确的分区或扇出以进行查询。从技术上讲,集合不属于单个服务器节点,有副本可确保仲裁并提高后台工作的读吞吐量。它们还将您限制为3个集合纳秒每容量单位。