Mongodb 我应该在不同的服务器上拆分NoSQL数据库吗?

Mongodb 我应该在不同的服务器上拆分NoSQL数据库吗?,mongodb,couchdb,nosql,Mongodb,Couchdb,Nosql,我们仍处于确定使用RDBMS还是NoSQL的早期阶段 感兴趣的一个领域是,如果我们使用NoSQL(可能是CouchDB,但也可能是MongoDB),那么在不同服务器上分离NoSQL数据库会比一个NoSQL服务器实例更好吗 我们将建立一个文件管理系统,其中某些文件/视频将在不同的服务器上分组。账户相关文件/视频将存储在账户服务器等上。要查询账户相关文件,我们很可能会在账户服务器上搜索数据库 我可以看到,将来有人会说:“为什么我不能在所有服务器上搜索一种类型的文件或视频?” 显然,在这里有一个数据库

我们仍处于确定使用RDBMS还是NoSQL的早期阶段

感兴趣的一个领域是,如果我们使用NoSQL(可能是CouchDB,但也可能是MongoDB),那么在不同服务器上分离NoSQL数据库会比一个NoSQL服务器实例更好吗

我们将建立一个文件管理系统,其中某些文件/视频将在不同的服务器上分组。账户相关文件/视频将存储在账户服务器等上。要查询账户相关文件,我们很可能会在账户服务器上搜索数据库

我可以看到,将来有人会说:“为什么我不能在所有服务器上搜索一种类型的文件或视频?”

显然,在这里有一个数据库会更好。然而,除了查询服务器的http请求的延迟之外,还有更好的方法来实现这一点吗?还是拥有大型数据库的优缺点

JD

NoSQL产品(大多数)的理念是提供水平可扩展性。这意味着您的单个逻辑实例可能位于数十台服务器上。例如,在MongoDB中,您可以使用。对于您的程序来说,这是完全透明的:您的代码(几乎)与用于单个数据库服务器的代码相同,但数据驻留在(比如)5台服务器上

有很多好处:你有一个中心点来管理你的数据库,如果需要,你可以跨所有数据库进行查询,你不需要在代码中使用多个数据库连接,数据库自动平衡那些需要平衡的集合,如果查询允许,映射/减少操作可以并行运行,等等

对我来说,最重要的一点是:没有太多的管理开销,现在也不必考虑太多,因为以后可以添加自动切分


我不会自己尝试切分,因为这是重新发明轮子,而且也不容易。这首先是NoSQL的关键驱动因素之一。

谢谢@mnemosyn。我还在努力了解NoSQL的体系结构。我最初的理解是,我只是在每个服务器上放置一个数据库,然后查询它们以获得搜索的聚合结果。因此,从您的回答来看,稍后的自动硬化可以解决此问题。使用自动分片,我可以说“所有帐户文档”应该在服务器2上吗?您提到“如果查询允许,映射/减少操作可以并行运行,等等”。您可以给我更多关于您的意思的信息吗?我可以说“所有帐户文档”应该在服务器2上吗?--嗯,不是这样。问题是:为什么要这样做,而不是让数据库决定数据应该放在哪里?并行化:一些查询(不仅仅是map/reduce)可以并行化,例如count({color:blue})将一次查询所有服务器并添加结果,而不是按顺序执行。有关详细信息,请参阅我答案中的链接。感谢您的帮助,您提供了非常好的信息。我现在必须研究一下是选择MongoDB还是CouchDB