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

How to store Users' Location in a Django/Postgres Application

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

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

我使用 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.