Add better indexes
This commit is contained in:
		
							parent
							
								
									cfe3dac408
								
							
						
					
					
						commit
						f4710170ee
					
				
							
								
								
									
										76
									
								
								shynet/analytics/migrations/0009_auto_20200414_1008.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								shynet/analytics/migrations/0009_auto_20200414_1008.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
# Generated by Django 3.0.5 on 2020-04-14 14:08
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('analytics', '0008_auto_20200412_0015'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterModelOptions(
 | 
			
		||||
            name='hit',
 | 
			
		||||
            options={'ordering': ['-start_time']},
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterModelOptions(
 | 
			
		||||
            name='session',
 | 
			
		||||
            options={'ordering': ['-start_time']},
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            name='initial',
 | 
			
		||||
            field=models.BooleanField(db_index=True, default=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            name='location',
 | 
			
		||||
            field=models.TextField(blank=True, db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            name='referrer',
 | 
			
		||||
            field=models.TextField(blank=True, db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            name='start_time',
 | 
			
		||||
            field=models.DateTimeField(auto_now_add=True, db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='session',
 | 
			
		||||
            name='identifier',
 | 
			
		||||
            field=models.TextField(blank=True, db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='session',
 | 
			
		||||
            name='ip',
 | 
			
		||||
            field=models.GenericIPAddressField(db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='session',
 | 
			
		||||
            name='start_time',
 | 
			
		||||
            field=models.DateTimeField(auto_now_add=True, db_index=True),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddIndex(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            index=models.Index(fields=['session', '-start_time'], name='analytics_h_session_b2667f_idx'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddIndex(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            index=models.Index(fields=['session', 'location'], name='analytics_h_session_775f5a_idx'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddIndex(
 | 
			
		||||
            model_name='hit',
 | 
			
		||||
            index=models.Index(fields=['session', 'referrer'], name='analytics_h_session_98b8bf_idx'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddIndex(
 | 
			
		||||
            model_name='session',
 | 
			
		||||
            index=models.Index(fields=['service', '-start_time'], name='analytics_s_service_4b1137_idx'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddIndex(
 | 
			
		||||
            model_name='session',
 | 
			
		||||
            index=models.Index(fields=['service', 'identifier'], name='analytics_s_service_82ab21_idx'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@ -13,13 +13,13 @@ def _default_uuid():
 | 
			
		||||
 | 
			
		||||
class Session(models.Model):
 | 
			
		||||
    uuid = models.UUIDField(default=_default_uuid, primary_key=True)
 | 
			
		||||
    service = models.ForeignKey(Service, on_delete=models.CASCADE)
 | 
			
		||||
    service = models.ForeignKey(Service, on_delete=models.CASCADE, db_index=True)
 | 
			
		||||
 | 
			
		||||
    # Cross-session identification; optional, and provided by the service
 | 
			
		||||
    identifier = models.TextField(blank=True)
 | 
			
		||||
    identifier = models.TextField(blank=True, db_index=True)
 | 
			
		||||
 | 
			
		||||
    # Time
 | 
			
		||||
    start_time = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    start_time = models.DateTimeField(auto_now_add=True, db_index=True)
 | 
			
		||||
    last_seen = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
 | 
			
		||||
    # Core request information
 | 
			
		||||
@ -38,7 +38,7 @@ class Session(models.Model):
 | 
			
		||||
        default="OTHER",
 | 
			
		||||
    )
 | 
			
		||||
    os = models.TextField()
 | 
			
		||||
    ip = models.GenericIPAddressField()
 | 
			
		||||
    ip = models.GenericIPAddressField(db_index=True)
 | 
			
		||||
 | 
			
		||||
    # GeoIP data
 | 
			
		||||
    asn = models.TextField(blank=True)
 | 
			
		||||
@ -47,6 +47,13 @@ class Session(models.Model):
 | 
			
		||||
    latitude = models.FloatField(null=True)
 | 
			
		||||
    time_zone = models.TextField(blank=True)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ["-start_time"]
 | 
			
		||||
        indexes = [
 | 
			
		||||
            models.Index(fields=["service", "-start_time"]),
 | 
			
		||||
            models.Index(fields=["service", "identifier"]),
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_currently_active(self):
 | 
			
		||||
        return timezone.now() - self.last_seen < timezone.timedelta(seconds=10)
 | 
			
		||||
@ -57,20 +64,28 @@ class Session(models.Model):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Hit(models.Model):
 | 
			
		||||
    session = models.ForeignKey(Session, on_delete=models.CASCADE)
 | 
			
		||||
    initial = models.BooleanField(default=True)
 | 
			
		||||
    session = models.ForeignKey(Session, on_delete=models.CASCADE, db_index=True)
 | 
			
		||||
    initial = models.BooleanField(default=True, db_index=True)
 | 
			
		||||
 | 
			
		||||
    # Base request information
 | 
			
		||||
    start_time = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    start_time = models.DateTimeField(auto_now_add=True, db_index=True)
 | 
			
		||||
    last_seen = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    heartbeats = models.IntegerField(default=0)
 | 
			
		||||
    tracker = models.TextField()  # Tracking pixel or JS
 | 
			
		||||
 | 
			
		||||
    # Advanced page information
 | 
			
		||||
    location = models.TextField(blank=True)
 | 
			
		||||
    referrer = models.TextField(blank=True)
 | 
			
		||||
    location = models.TextField(blank=True, db_index=True)
 | 
			
		||||
    referrer = models.TextField(blank=True, db_index=True)
 | 
			
		||||
    load_time = models.FloatField(null=True)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        ordering = ["-start_time"]
 | 
			
		||||
        indexes = [
 | 
			
		||||
            models.Index(fields=["session", "-start_time"]),
 | 
			
		||||
            models.Index(fields=["session", "location"]),
 | 
			
		||||
            models.Index(fields=["session", "referrer"]),
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def duration(self):
 | 
			
		||||
        return self.last_seen - self.start_time
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user