Я создаю движок Django ETL, который извлекает данные из GitHub с использованием корпоративного API для сбора показателей внутренней совместной работы компании.Я разработал схему, которая, как я теперь понимаю, не будет масштабироваться из-за PK (первичного ключа), который автоматически устанавливается ORM.Одна из главных особенностей извлечения - получить id
человека, который создал репозиторий, прокомментировал сообщение и т. Д.
Сначала я хотел, чтобы ORM автоматически установил id
как PK
, но это не будет работать, так как запрос GET будет выполняться раз в неделю, и это вызовет ошибки, приводящие к перезаписи первичного ключа ID
.
У меня естьЯ провел некоторое исследование, и одно из возможных решений - создать метакласс, на который есть ссылка: Первичный ключ модели Django в виде пары
, но я не уверен, что создание нескольких мета-классов приведет к поражению.вся точка мета-класса для начала.
Вот схема, которую я настроил для models.py
from django.db import models
from datetime import datetime
""" Contruction of tables in MySQL instance """
class Repository(models.Model):
id = models.PositiveIntegerField(null=False, primary_key=True)
repo_name = models.CharField(max_length=50)
creation_date = models.CharField(max_length=21, null=True)
last_updated = models.CharField(max_length=30, null=True)
qty_watchers = models.PositiveIntegerField(null=True)
qty_forks = models.PositiveIntegerField(null=True)
qty_issues = models.PositiveIntegerField(null=True)
main_language = models.CharField(max_length=30, null=True)
repo_size = models.PositiveIntegerField(null=True)
timestamp = models.DateTimeField(auto_now=True)
class Contributor(models.Model):
id = models.IntegerField(null=False, primary_key=True)
contributor_cec = models.CharField(max_length=30, null=True)
contribution_qty = models.PositiveIntegerField(null=True)
get_request = models.CharField(max_length=100, null=True)
timestamp = models.DateTimeField(auto_now=True)
class Teams(models.Model):
id = models.IntegerField(primary_key=True, null=False)
team_name = models.CharField(max_length=100, null=True)
timestamp = models.DateTimeField(auto_now=True)
class TeamMembers(models.Model):
id = models.IntegerField(null=False, primary_key=True)
team_member_cec = models.CharField(max_length=30, null=True)
get_request = models.CharField(max_length=100, null=True)
timestamp = models.DateTimeField(auto_now=True)
class Discussions(models.Model):
id = models.IntegerField(null=False, primary_key=True)
login = models.CharField(max_length=30, null=True)
title = models.CharField(max_length=30, null=True)
body = models.CharField(max_length=1000, null=True)
comments = models.IntegerField(null=True)
updated_at = models.CharField(max_length=21, null=True)
get_request = models.CharField(max_length=100, null=True)
timestamp = models.DateTimeField(auto_now=True)
Есть ли способ перезаписать поле id
исделать поле PK
timestamp
, так как каждый раз, когда запускается GET request
, это поле будет заполняться статическими данными, которые не будут изменяться в течение срока службы приложения?
В качестве альтернативы, есть ли способброситьch архитектура многостолового наследования и что-то другое?
Основные показатели, которые я буду извлекать из этого, - это такие вещи, как top contributor to repository
, repository with most commits
, most replied to comments
.Я хотел бы иметь возможность запустить какое-то filters
для данных, чтобы извлечь эти метрики, но я знаю, что это сильно зависит от настройки схемы.
Спасибо!