我正在开发一个电话应用程序,每次打开应用程序时,该应用程序都会将用户的位置发送到后端。
我的目标是为用户存储尽可能多的位置数据,以便我可以进行一些机器学习,以计算每天正常移动区域中的哪些帖子与他们最相关。
我使用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.