我正在构建一个客户创建帐户的Web应用程序(python / Django),每个客户创建/添加任意数量的位置,并且单独的服务器每天多次为每个位置生成大量数据。
例如:
用户A - > [locationA,locationB] 用户B - > [locationC,locationD,locationE]
每个位置都是包含姓名,地址等的对象。
每3个小时,一个单独的服务器从各种来源收集数据,如天气,签到等每个位置,我需要存储每次迭代的每个项目,以便我可以执行每个用户的每个位置查询。
E.g。 “按用户A的位置在上周组中的所有签到”
现在我正在使用MongoDB并使用ownerId字段存储场地集合,ownerId是拥有用户的ObjectID。
存储数据记录的最佳策略是什么?天真的方法似乎是用于登记的集合,天气记录的集合等,每个文档都有一个“位置”字段。但这似乎同时存在性能和安全问题(所有访问逻辑都在Web应用程序代码中)。
为每个用户创建一个完全独立的数据库会更好吗?还有更好的方法吗?
如果我们切换到Postgres / SQL数据库,会有更好的策略吗?
答案 0 :(得分:1)
[一般建议]:我总是使用Postgres或MySQL作为django ORM连接,然后使用Mongo或DynamoDB进行分析。你可以说它创造了不必要的复杂性,因为这是真的,但对我们来说,抽象也使得分离团队变得更容易。你有你的前端开发人员,后端/完整堆栈和真正的后端开发人员。并非所有人都需要成为Django专家。
[SPECIFIC ADVICE]:这听起来像你应该开始使用mongo。除非您是销售给那些不喜欢多特权数据模型的企业公司的B2B SaaS应用程序,否则很难将其映射到mongo中。我说mongo很好的主要原因是因为听起来你并不完全知道你提前收集的模式。稍后,您可以在更好地处理所收集的数据后进行重构。期待重构,让事情发挥作用。