Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Performance 面向多公司web应用的Mongodb战略_Performance_Mongodb_Security_Meteor_Digital Ocean - Fatal编程技术网

Performance 面向多公司web应用的Mongodb战略

Performance 面向多公司web应用的Mongodb战略,performance,mongodb,security,meteor,digital-ocean,Performance,Mongodb,Security,Meteor,Digital Ocean,我正在用Mongo在Meteor中开发一个web应用程序,它将在云上运行。每个用户必须属于一个公司。 每家公司只能访问自己的数据。 每个用户都可以访问自己的数据以及与同一公司的其他用户共享的一些数据。 想象一下1.000家公司和每家公司100名用户,如果我对整个应用程序使用1个Mongodb数据库,它的性能和安全性可能会非常差 所以,因为Mongo是“无模式、无数据库”的,我想我可以定义1000个数据库,比如说db_0001,db_0002。。。使用相同的名称集合,比如任务、消息,这样应用程序可

我正在用Mongo在Meteor中开发一个web应用程序,它将在云上运行。每个用户必须属于一个公司。 每家公司只能访问自己的数据。 每个用户都可以访问自己的数据以及与同一公司的其他用户共享的一些数据。 想象一下1.000家公司和每家公司100名用户,如果我对整个应用程序使用1个Mongodb数据库,它的性能和安全性可能会非常差

所以,因为Mongo是“无模式、无数据库”的,我想我可以定义1000个数据库,比如说db_0001db_0002。。。使用相同的名称集合,比如任务、消息,这样应用程序可以更高效、更安全(每个公司的代码相同,数据隔离)

另外,在主机端(比如说Digital Ocean),我认为如果数据库已经原子化,那么分发dbs就更容易了

这是一个好方法吗?或者我应该不担心它,让主机做这项工作


任何想法都是好的。

你目前只看到硬币的一面。那很好

考虑一下您将如何显示该数据,以及它转换为什么查询。对所有可能的查询进行彻底的尽职调查。例如,调用user/getbyid的频率,以及向用户显示其信息及其与其他用户的关系的频率。除了用户信息之外,还需要哪些元数据,您是否需要执行连接才能获得这些数据?还是将其存储为嵌入式文档?你最想搜索和排序的字段是什么?哪些类型的数据写重,哪些类型的数据读重

现在让我们回到数据库着色方法。您在这方面提前思考,而不是在以后重写组件,这是非常好的。在这里,数据量/存储并不让我担心。在应用程序中有多少并发用户在使用,主要用例是什么,这是考虑规模时首先要考虑的问题

此外,您需要了解业务和项目增长的性质。它是否像Instragram类型的高速增长?还是更容易预测。一个大型Mongo集群可以处理数千个并发读/写请求(假设您的设计和查询都经过了优化),所以我不会为此烦恼。如果你想保持它的灵活性,MongoDB有一个切分机制,你可以在一个键上切分,它会为你处理所有的花哨的东西

MongoDB具有最终的一致性(查找MongoDB CAP定理),如果您启用从二级读取,并且您有一个高容量的业务关键型应用程序,您需要小心,因为您可能会读取过时的结果

就托管而言,DO是可以的,但始终在另一个区域中有一个备份,以保持地理冗余,因此,如果某个区域发生故障(您好,AWS!),您可以依靠它


祝你的项目好运

Mongo仍将在10万用户的情况下运行,1000 db的实例听起来有些过分,对我来说不是很好扩展;你要为自己创造一个巨大的毛球。从阅读和链接开始。有很多关于scaling Mongo的在线案例研究。非常感谢Kalagen!以下是我将在设计中使用的内容的简短列表:1)在每个集合中包括一个公司id和该字段上的索引,2)大量使用的属性冗余(即用户id用户名+用户url图片一直存储),3)加入具有单独意义或数量的集合(即项目和会议),4)每个字段的数据字典(避免使用两个名称相同、含义不同的字段),5)如果可能的话,单独的集合(为了性能)(而不是“动物”,前缀为“狮子”、“狗”…)。如果没有进一步的评论,我会将此作为答案发布。