这不是典型的 code 问题,而是我现在面临的设计问题。
比方说,我有一个网页(不是我的),我想剪贴一些信息。对我来说,最重要的信息是何时(日期时间)字符登录和何时注销,但是我收集其他信息好。从点 2 (见下文)可以知道登录,但是我必须计算登出 我可以访问2页:
我仅在task.py中执行2次“操作”,即:
现在,它是如何工作的(每分钟,感谢Celery,我做到了):
问题是,我不确定这是否是个好主意。 我的 models.py :(评论只是为了澄清我在做什么)
class Guild:
name = models.CharField(max_length=100)
class Player(models.Model):
#FK:
guild = models.CharField(max_length=50, null=True, blank=True) # Does he have guild?
name = models.CharField(max_length=100, unique=True)
sex = models.CharField(choices=SEX_CHOICES, max_length=7) # Male / Female
level = models.PositiveSmallIntegerField()
vocation = models.CharField(choices=VOCATION_CHOICES, max_length=50) # His class
status = models.CharField(choices=ONLINE_CHOICES, max_length=10) # Offline / Online
lastlogin = models.DateTimeField()
def __str__(self):
return self.name
class Deaths(models.Model):
text = models.CharField(max_length=500)
killed = models.ForeignKey(Player, null=True, on_delete=models.CASCADE, related_name='killed') # Who got killed
killer = models.ForeignKey(Player, null=True, on_delete=models.CASCADE, related_name='killer') # Who killed him
date = models.DateTimeField() # When he died?
level = models.PositiveSmallIntegerField() # On which level player died
pvp = models.BooleanField() # Death was due to PvP or PvE?
class Meta:
ordering = ('date',)
class OnlineDetails(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
login = models.DateTimeField() # When he logged in
logout = models.DateTimeField(null=True, blank=True) # When he logged off
def __str__(self):
return self.player.name + " " + str(self.logout) if self.logout else self.player.name
class Meta:
ordering = ('logout', 'login')
它有效,但是我想知道这是否是最好的方法。实际上,我认为这种方式很不好,因为我必须在一分钟内扫描约500个字符,这很难用“ antyddos”屏蔽罩来完成。
您有什么更好的解决方案或技术可以选择吗? 我在python和django方面都不擅长,还在学习。
答案 0 :(得分:1)
可以肯定的是,您可以衡量整个过程,所需的时间等,但是我认为更新〜500个条目只需几毫秒。更大的问题可能是每分钟废弃500个条目,这意味着您必须每秒向它们发送大约8个请求(基于第2点,而不是第1点)。我认为您正在废弃第1点。每分钟更改一次,您就会丢失丢失的字符。点1根本不是问题。解析这么多页面可能很困难,但并非没有可能。另外,我建议您下载页面并将其存储一段时间,如果在此过程中出现任何故障,则下载页面更快,并且在其他线程中并行解析它们,因为最困难的时间是发送请求并下载响应。对于事务自动提交,可能是多线程环境中的问题。如果值得冒不知道发生了什么的风险,则应尝试评估是否有此过程。