Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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/2/node.js/40.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
Python 按客户细分Mongo/Postgres数据库的正确策略?_Python_Sql_Django_Mongodb_Postgresql - Fatal编程技术网

Python 按客户细分Mongo/Postgres数据库的正确策略?

Python 按客户细分Mongo/Postgres数据库的正确策略?,python,sql,django,mongodb,postgresql,Python,Sql,Django,Mongodb,Postgresql,我正在构建一个web应用程序(python/Django),其中客户创建一个帐户,每个客户创建/添加他们想要的任意多个位置,并且一个单独的服务器每天多次为每个位置生成大量数据 例如: 用户A->[位置A,位置B] 用户B->[位置C、位置D、位置E] 其中每个位置都是一个对象,包括名称、地址等 每3小时,一个单独的服务器收集来自不同来源的数据,如每个位置的天气、签到等,我需要存储每个迭代中的每个项目,这样我就可以执行每个用户每个位置的查询 例如,“按用户A的位置列出上周组中的所有签入” 现在我正

我正在构建一个web应用程序(python/Django),其中客户创建一个帐户,每个客户创建/添加他们想要的任意多个位置,并且一个单独的服务器每天多次为每个位置生成大量数据

例如:

用户A->[位置A,位置B] 用户B->[位置C、位置D、位置E]

其中每个位置都是一个对象,包括名称、地址等

每3小时,一个单独的服务器收集来自不同来源的数据,如每个位置的天气、签到等,我需要存储每个迭代中的每个项目,这样我就可以执行每个用户每个位置的查询

例如,“按用户A的位置列出上周组中的所有签入”

现在我正在使用MongoDB并存储一个场馆集合,其中包含一个ownerId字段,该字段是所有者用户的ObjectID

存储数据记录的最佳策略是什么?这种幼稚的方法似乎是一个签入集合,一个天气记录集合等等,每个文档都有一个“位置”字段。但这似乎同时存在性能和安全问题(所有的访问逻辑都在web应用程序代码中)

为每个用户提供一个完全独立的数据库会更好吗?有更好的方法吗


如果我们切换到Postgres/SQL数据库,另一种策略更好吗?

[一般建议]:我总是使用Postgres或MySQL作为django ORM连接,然后使用Mongo或DynamoDB进行分析。你可以说,这会造成不必要的复杂性,因为这是事实,但对我们来说,抽象也使团队更容易分离。您拥有前端开发人员、后端/完整堆栈和真正的后端开发人员。并非所有人都需要成为Django专家


[具体建议]:我觉得你应该从mongo开始。除非您是一个B2B SaaS应用程序,销售给不喜欢多原则数据模型的企业公司,否则在mongo中解决这一问题应该不难。我说mongo很好的主要原因是因为听起来你不完全知道你将提前收集的内容的模式。稍后,您可以在更好地处理所收集的数据后进行重构。您可以将数据存储在单独的数据库、单独的模式中,或者只对数据进行分区。在一个单独的数据库中,比较不同数据库中的数据变得很麻烦,但使用每个数据库相对简单。此外,在单独的数据库或模式中,表更新变得耗时且问题更大。在分区中,每个表都必须正确地设计为在特定的列上进行分区,但从长远来看,您可以获得其他选项的性能,并增加灵活性和简单性。如果你必须的话,我会的。