Правильный способ получения статистики от дочерних объектов - PullRequest
0 голосов
/ 23 апреля 2019

Пожалуйста, помогите мне найти способ сделать это эффективным

Программа имеет следующие объекты:
Проекты 1-N Модули
Модули 1-N Подмодули.
Подмодули 1-N сегментов.
каждый сегмент имеет различный статус (по умолчанию / завершен) и количество слов

Подсчет слов производится, когда сегменты вставляются в базу данных и сохраняются в столбце.

Просмотров. Список проектов Должно быть менее 100 проектов, поэтому я перечисляю все из них без включенных.

Список модулей (с параметром 1 projectId) должен иметь столбец с завершенными словами / всего и завершенными строками / всего

Список субмодулей (с параметром 1 moduleId) должен иметь столбец с завершенными словами / всего и завершенными строками / всего

Предположим, у меня будет около 50 тыс. Строк (сегментов) на модуль. так что исполнение обязательно.

Вариант 1: IQueryable Childs.Count () некоторого вида
Вариант 2: Добавить столбцы Stats в таблицы в базе данных с заданиями CRON для их обновления или иметь хранимую процедуру / триггеры в mysql.
Вариант 3?: Создание 2 представлений в MySQL? никогда не делал их, но, может быть, они подходят для работы?
Предлагаемые варианты: пока нет

Никогда раньше не работал с такими большими наборами данных, а производительность просто необходима. Пожалуйста, совет

1 Ответ

0 голосов
/ 26 апреля 2019
var query = _context.Submodules.Where(t => t.Id == id)
                    .Select(e => new Submodules{
                        Id = e.Id,
                        Name = e.Name,
                        Status = e.Status,
                        Token = e.Token,
                        ModuleId = e.ModuleId,
                        Gender = e.Gender,
                        TotalRows = e.TotalRows,
                        TotalWords = e.TotalWords,
                        CompletedWords = e.Segments.Where(a => a.Status == Abr.Recorded).Sum(y=> y.Wordcount),
                        CompletedRows = e.Segments.Where(a => a.Status == Abr.Recorded).Count()
                    }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...