gpt4 book ai didi

python - Django数据库规划-时序数据

转载 作者:太空狗 更新时间:2023-10-30 01:28:48 25 4
gpt4 key购买 nike

我想要一些关于如何最好地组织我的 django 模型/数据库表以将数据保存在我的 webapp 中的建议

我正在设计一个站点,用于保存来自赛车模拟游戏的用户遥测数据。所以会有一个桌面配套应用程序,每 0.1 秒对游戏数据进行一次采样,获取各种信息(汽车、赛道、速度、 throttle 、刹车、离合器、转速等)。例如,在 2 分钟的比赛中,每个变量都将包含 1200 个数据点(每秒 10 个样本 * 120 秒)。

这里重要的是,这个数据列表可以包含多达 20 个变量,并且将来可能会增加。所以 1200 * 您拥有的变量数是单个比赛 session 的数据量。如果单个用户提交 100 个 session ,并且有 100 个用户....数据量加起来很快。

然后,该应用程序会将比赛 session 的所有这些数据发送到网站的数据库。数据必须通过 CSV 文件在游戏和网站之间传输。所以在结构上我仅限于 CSV 可以做什么。然后,该网站将允许您选择比赛时段/圈数,并将此信息绘制在单独的时间序列图上(针对每个变量),重要的是,您可以将自己的时段与其他人的时段进行对比,以查看差异所在

我的问题是如何构建这样一个数据库来保存这么多信息?

我想到的最简单的结构是为每个赛道设置一个单独的表格,然后每一行/条目将是该赛道上的一个比赛时段。此表中的字段将是上面的变量。

我遇到的问题是:

1) 上面列表中的大多数变量都是时间序列数据而不是单个值(例如,var speed 可能看起来像:70、72、74、77、72、71、65,其中值是间隔 0.1 秒的样本在整个圈内分开)。您如何将此类信息存储在表/字段中?

2) 上面列表中每个变量的长度对于任何一场比赛来说总是相同的长度(如果你的一圈用了 1 分 35 秒,那么你所有的变量将只捕获该时间长度的数据),但是给定我希望能够相互比较不同的圈数,每一圈的 session 时间都会不同。换句话说,无论我为那些变量存储时间序列数据,它的大小必须是可变的

任何想法将不胜感激

最佳答案

可以帮助您处理超大表的一件事是分区。根据您为问题设置的 postgresql 标记判断,请在此处查看:http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html

但一开始我会选择一个简单的表,由一组合理的索引支持。据我了解,表中的每个数据条目都将由比赛 session ID、玩家 ID 和时间指示器标识。这些列应该根据您的查询要求用索引覆盖。

关于你的两个问题:1)您将这些信息存储为简​​单的整数。请记住为这些列设置正确的数据类型。例如如果您 100% 确定某些值会非常小,则可以使用 smallint 数据类型。更多关于整数数据类型的信息:http://www.postgresql.org/docs/9.3/static/datatype-numeric.html#DATATYPE-INT

2) 如果您的每个 var 列表都是表中的不同行,那将不是问题。您可以插入任意数量的内容。

所以,总结一下。我将从一个非常简单的单表模式开始。从 Django 的角度来看,这看起来像这样:

class RaceTelemetryData(models.Model):
user = models.ForeignKey(..., index_db=True)
race = models.ForeignKey(YourRaceModel, index_db=True)
time = models.IntegerField()
gas = models.IntegerField()
speed = models.SmallIntegerField()
# and so on...

此外,您应该(手动)为 (user_id, race_id, time) 列创建一个索引,以便查找有关一次比赛的数据(并对其进行排序)会很快。

将来,如果您发现这个单表的性能太慢,您可以尝试使用额外的索引或分区。 PostgreSQL 在修改现有数据库结构方面非常灵活,因此您应该不会有太多问题。

如果您决定向集合中添加一个新变量,您只需向表中添加一个新列即可。

编辑:

最后你得到一个表,它至少有这些列:user_id - 指定此行与哪些用户数据有关。race_id - 指定此行与哪些比赛数据有关。time - 确定表示数据的正确顺序。

这样,当您想要获取有关 Joe 的第 5 场比赛的信息时,您将查找具有 user_id = 'Joe_ID' 和 race_id = 5 的行,然后按时间列对所有这些行进行排序.

关于python - Django数据库规划-时序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com