如何在 Django/Postgres 应用程序中存储用户的位置



我正在开发一个电话应用程序,每次打开应用程序时,该应用程序都会将用户的位置发送到后端。

我的目标是为用户存储尽可能多的位置数据,以便我可以进行一些机器学习,以计算每天正常移动区域中的哪些帖子与他们最相关。

我使用GeoDjango和PostGis使应用程序能够感知位置,并且正在努力确定数据库中的哪种数据结构最适合这种情况。

问题归结为我是否应该给每个用户一个最终会非常大的location = pg_fields.ArrayField()属性,还是使用location=models.ManyToManyField(UserLocation)。我知道 toast 表在具有大型数组的 Postgres 中是一个问题,但它们是否是一个足够大的问题,在运行机器学习算法时尝试为用户提取数据时不值得强调?

将位置数据保存在自己的模型中:

class UserLocation(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, ...)
recorded_at = models.DateTimeField()  # time recoreded on phone
created_at = models.DateTimeField(auto_now_add=True)  # time saved on db
location =  models.PointField()
accuracy = models.IntegerField() # meters, rounded up
altitude = models.IntegerField(null=True, blank=True) # meters, rounded
# more info... IP, phone type, phone id, session id, app version etc.

最新更新