我有一个应用程序,在提取数据方面要求很高。每次用户登录时,数据都会被提取,每次访问新页面时,数据也会被提取等等
让我们假设这些查询永远不会涉及联接。
那么我能假设查询会按比例扩展吗?
不,使用MongoDB和不使用联接并不意味着"您的查询将扩展"这是MongoDB市场营销的一个神话,而不是真正的软件工程。
这取决于您的查询在做什么。无论使用何种品牌的数据存储,每个查询都有成本。每次数据访问都需要使用服务器上的资源,而这些资源的使用量加起来就是。查询是否扫描MongoDB数据存储中的数千或数百万个文档?他们需要做地图缩减吗?查询响应中有多少文档?它是提取缓存的数据,还是提取该数据会花费I/O开销?您每秒需要处理多少个请求?MongoDB能支持您需要执行的查询速率吗?您是在配置MongoDB副本集还是在配置分片集群?您的查询需要访问多少个碎片才能得到结果?托管每个节点的服务器的功能有多强大?
以下是您需要为查询和MongoDB集群理解和分析的问题类型的一些示例(列表不完整(。
你不需要给我这些问题的答案。我只是用它们来说明为什么问";它会缩放吗">
这就像是在问"我需要开车去我哥哥家,我需要给油箱加油吗"这还不足以回答这个问题。你哥哥的房子有多远?你有什么类型的车?它的燃油效率是多少?你的车上装载了很多重物吗?你需要多少次才能成行?你开得有多快?路上的路有多崎岖?
根据您的需求,可能有很多事情需要考虑,但我认为主要区别来自文档数据模型(MongoDB是为了支持和扩展(
文档=>更多相关数据在一个位置
- 更少的联接(成本高昂,尤其是在数据位于不同机器中的情况下(
- 更少的事务(单个文档更新是原子的(
- 更简单的较小模式,更适合您的应用程序
- 数据模型,类似于程序员在对象(贴图(/阵列
如果您有许多应用程序或太多不同的方法来访问相同的数据,那么您可能最终会将更多的数据标准化为更通用的数据表示形式=>失去了上面的一些好处,或者复制了一些数据来满足不同的需求。