按客户细分 Mongo/Postgres 数据库的正确策略?
Posted
技术标签:
【中文标题】按客户细分 Mongo/Postgres 数据库的正确策略?【英文标题】:Right strategy for segmenting Mongo/Postgres database by customer? 【发布时间】:2017-10-03 20:41:04 【问题描述】:我正在构建一个网络应用程序 (python/Django),客户在其中创建一个帐户,每个客户创建/添加他们想要的任意数量的位置,并且一个单独的服务器每天为每个位置生成大量数据多次。
例如:
用户 A -> [位置 A,位置 B] 用户 B -> [locationC, locationD, locationE]
其中每个位置都是一个对象,包括名称、地址等。
每 3 小时,一个单独的服务器会从各种来源(如天气、签到等)为每个位置收集数据,我需要存储每次迭代中的每个项目,以便我可以执行每个用户每个位置的查询。
例如“用户 A 上周的所有签到按位置分组”
现在我正在使用 MongoDB 并存储具有 ownerId 字段的场所集合,该字段是拥有用户的 ObjectID。
存储数据记录的最佳策略是什么?天真的方法似乎是一个签到集合,一个天气记录集合等,每个文档都有一个“位置”字段。但这似乎同时存在性能和安全问题(所有访问逻辑都在 Web 应用程序代码中)。
为每个用户拥有一个完全独立的数据库会更好吗?有更好的方法吗?
如果我们切换到 Postgres/SQL 数据库,不同的策略会更好吗?
【问题讨论】:
您可以将数据存储在单独的数据库、单独的模式中,或者只是对数据进行分区。在单独的数据库中,比较不同数据库中的数据变得很麻烦,但使用每个数据库相对简单。同样在单独的数据库或模式中,表更新变得耗时且问题较多。在分区中,必须正确设计每个表以在特定列上进行分区,但从长远来看,您可以获得其他选项的性能,并增加灵活性和简单性。如果必须,我会分区。 【参考方案1】:[一般建议]:我总是使用 Postgres 或 mysql 作为 django ORM 连接,然后使用 Mongo 或 DynamoDB 进行分析。你可以说它创造了不必要的复杂性,因为这是事实,但对我们来说,抽象也更容易分离团队。您拥有前端开发人员、后端/全栈和真正的后端开发人员。并非所有人都需要成为 Django 专家。
[具体建议]:在我看来,这听起来像是你应该开始使用 mongo。除非您是向不喜欢多原则数据模型的企业公司销售的 B2B SaaS 应用程序,否则在 mongo 中将其映射出来应该不难。我说 mongo 很好的主要原因是因为听起来您并不完全了解您将提前收集的内容的模式。稍后,一旦您更好地处理您收集的数据,您就可以重构。期望重构并让事情正常工作。
【讨论】:
以上是关于按客户细分 Mongo/Postgres 数据库的正确策略?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 mailchimp API 3.0 中按成员获取细分?