Azure表与Azure上的MongoDB

时间:2011-11-03 01:53:45

标签: mongodb azure azure-storage azure-table-storage nosql

我想在Windows Azure上使用NoSQL数据库,数据量会非常大。 Azure Table存储或使用Worker角色运行的MongoDB数据库是否可以提供更好的性能和可伸缩性?有没有人使用Worker角色在Azure上使用MongoDB?请分享您在Azure桌面存储上使用Azure上的MongoDB的想法。

7 个答案:

答案 0 :(得分:72)

表存储是一个核心Windows Azure存储功能,旨在可扩展( 100TB 200TB 每个帐户500TB),持久(在数据中心三重复制,可选)地理复制到另一个数据中心)和无模式(每行可能包含您想要的任何属性)。通过分区键+行键定位行,提供非常快速的查找。所有表存储访问都是通过一个定义良好的REST API,可以通过任何语言使用(使用SDK构建在REST API之上,已经存在于.NET,PHP,Java,Python和Ruby中)。

MongoDB是面向文档的数据库。要在Azure中运行它,您需要将MongoDB安装到Web /辅助角色或虚拟机上,将其指向云驱动器(从而提供驱动器号)或连接磁盘(用于Windows / Linux虚拟机),可选择打开日记功能(我建议),并可选择定义供您使用的外部端点(或通过虚拟网络访问它)。顺便说一下,云驱动器/附加磁盘实际上存储在Azure Blob中,为您提供与Azure表相同的持久性和地理复制。

比较两者时,请记住表存储是存储即服务:您只需访问一个众所周知的REST端点。使用MongoDB,您负责维护数据库(例如,当MongoDB Inc(以前的10gen)推出新版本的MongoDB时,您需要相应地更新服务器。)

关于joberon指出的MongoDB Inc的alpha版本:如果你仔细看看它,你会看到一些关键的东西:

  • 该设置适用于独立的mongodb实例,没有副本集或分片。关于副本集,由于Blob存储的工作方式,使用独立版本仍然可以获得多项好处。
  • 要提供高可用性,您可以运行多个实例。在这种情况下,只有一个实例为数据库服务,一个是“热备用”,一旦另一个实例发生故障就会启动mongod进程(用于维护重启,硬件故障等)。

虽然10gen的Windows Azure包装仍然被认为是“alpha”,但mongod.exe却不是。您可以像启动任何其他Windows exe一样启动mongod exe。这只是围绕启动的管理代码,这就是alpa实现所展示的内容。

编辑2011-12-8:这不再处于alpha状态。您可以下载最新的MongoDB + Windows Azure项目here,该项目提供副本集支持。

为了表现,我认为你需要做一些基准测试。话虽如此,请考虑以下事项:

  • 从Web角色访问Table Storage或MongoDB时,您仍然可以使用Windows Azure存储系统。
  • MongoDB为自己的缓存使用大量内存。出于这个原因,许多高规模的MongoDB系统被部署到更大的实例大小。对于表存储访问,您将不会考虑相同的内存大小。

编辑2015年4月7日 如果要使用基于文档的数据库作为服务,Azure现在提供DocumentDB。

答案 1 :(得分:35)

我用过两者。

Azure表:简单,快速,甚至很难编写简单的查询。

Mongo:运行良好,有很多查询功能,需要多个实例才能可靠。

简而言之, 如果您的查询非常简单(key-> value),则必须进行成本比较(主要是针对存储的事务数量与Azure上托管Mongo的成本)。我宁愿去那个桌面存储。 如果您需要更复杂的查询并且不想访问SQL Azure,那么Mongo可能是您最好的选择。

答案 2 :(得分:9)

我意识到这个问题已经过时了。我想为那些可能在搜索中遇到此问题的人添加以下信息。

请注意,现在,MongoDB作为Azure上的完全托管服务提供。 (截至2015年4月正式发布测试版)

请参阅: http://www.mongodb.com/partners/cloud/microsoft 要么 https://azure.microsoft.com/en-us/blog/announcing-new-mongodb-instances-on-microsoft-azure/

参见(包括定价): https://azure.microsoft.com/en-us/marketplace/partners/mongolab/mongolab/

答案 3 :(得分:5)

我的首选是AzureTables,因为SAAS型号和低成本以及SLA 99.99%正http://alexandrebrisebois.wordpress.com/2013/07/09/what-if-20000-windows-azure-storage-transactions-per-second-isnt-enough/


一些限制.. http://msdn.microsoft.com/en-us/library/windowsazure/jj553018.aspx


http://www.windowsazure.com/en-us/pricing/calculator/?scenario=data-management

或AzureSQL用于小型企业

DocumentDB http://azure.microsoft.com/en-us/documentation/services/documentdb/ http://azure.microsoft.com/en-us/documentation/articles/documentdb-limits/


第二选择是许多云提供商,包括亚马逊提供的S3

或Google表格https://developers.google.com/bigquery/pricing

选择管理SHOW所有我自己都没有睡眠MongoDB我会再看看前两个SAAS


我的选择,如果我正在跑步"云"我将尽可能地选择SAAS模型" RENT-IT" ...

问题是我的应用需要的是AzureTables或DocumentDB或AzureSQL DocumentDB文档 http://azure.microsoft.com/en-us/documentation/services/documentdb/

Azure定价的工作原理 http://azure.microsoft.com/en-us/pricing/details/documentdb/

这很有趣 http://www.documentdb.com/sql/demo

答案 4 :(得分:2)

在Build 2016,宣布DocumentDB将支持所有MongoDB驱动程序。这解决了DocDB缺少工具问题的一些问题,也使得迁移Mongo应用程序变得更加容易。

答案 5 :(得分:1)

以上答案都很好 - 但真正的答案取决于您的要求。您需要了解要处理的数据大小,要对数据执行的操作类型,然后选择满足您需求的解决方案。

答案 6 :(得分:0)

要记住的一件事是Azure表存储不支持复杂数据类型。它支持实体中的每个属性为String或数字或布尔值或日期等。 一个人不能存储对象的对象,我认为这对于NoSql DB是必须的。 https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/understanding-the-table-service-data-model滚动到属性类型