客户对Mongo / Postgres数据库进行细分的正确策略?

时间:2017-10-03 20:41:05

标签: python sql django mongodb postgresql

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

例如:

用户A - > [locationA,locationB] 用户B - > [locationC,locationD,locationE]

每个位置都是包含姓名,地址等的对象。

每3个小时,一个单独的服务器从各种来源收集数据,如天气,签到等每个位置,我需要存储每次迭代的每个项目,以便我可以执行每个用户的每个位置查询。

E.g。 “按用户A的位置在上周组中的所有签到”

现在我正在使用MongoDB并使用ownerId字段存储场地集合,ownerId是拥有用户的ObjectID。

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

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

如果我们切换到Postgres / SQL数据库,会有更好的策略吗?

1 个答案:

答案 0 :(得分:1)

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

[SPECIFIC ADVICE]:这听起来像你应该开始使用mongo。除非您是销售给那些不喜欢多特权数据模型的企业公司的B2B SaaS应用程序,否则很难将其映射到mongo中。我说mongo很好的主要原因是因为听起来你并不完全知道你提前收集的模式。稍后,您可以在更好地处理所收集的数据后进行重构。期待重构,让事情发挥作用。