【发布时间】:2017-10-03 20:41:04
【问题描述】:
我正在构建一个网络应用程序 (python/Django),客户在其中创建一个帐户,每个客户创建/添加他们想要的任意数量的位置,并且一个单独的服务器每天为每个位置生成大量数据多次。
例如:
用户 A -> [位置 A,位置 B] 用户 B -> [locationC, locationD, locationE]
其中每个位置都是一个对象,包括名称、地址等。
每 3 小时,一个单独的服务器会从各种来源(如天气、签到等)为每个位置收集数据,我需要存储每次迭代中的每个项目,以便我可以执行每个用户每个位置的查询。
例如“用户 A 上周的所有签到按位置分组”
现在我正在使用 MongoDB 并存储具有 ownerId 字段的场所集合,该字段是拥有用户的 ObjectID。
存储数据记录的最佳策略是什么?天真的方法似乎是一个签到集合,一个天气记录集合等,每个文档都有一个“位置”字段。但这似乎同时存在性能和安全问题(所有访问逻辑都在 Web 应用程序代码中)。
为每个用户拥有一个完全独立的数据库会更好吗?有更好的方法吗?
如果我们切换到 Postgres/SQL 数据库,不同的策略会更好吗?
【问题讨论】:
-
您可以将数据存储在单独的数据库、单独的模式中,或者只是对数据进行分区。在单独的数据库中,比较不同数据库中的数据变得很麻烦,但使用每个数据库相对简单。同样在单独的数据库或模式中,表更新变得耗时且问题较多。在分区中,必须正确设计每个表以在特定列上进行分区,但从长远来看,您可以获得其他选项的性能,并增加灵活性和简单性。如果必须,我会分区。
标签: python sql django mongodb postgresql