Разделение больших наборов данных на более мелкие части для просмотра в Интернете - PullRequest
0 голосов
/ 18 апреля 2020

Фон

Я занимаюсь разработкой веб-платформы для веб-приложений. Одна из ключевых функций этой платформы - управление пользователями. Поэтому я внедрил систему входа в систему, которая позволяет зарегистрированным пользователям войти в платформу и приложение. Это реализовано с использованием базы данных MySQL, которая содержит учетные данные для входа, идентификаторы пользователей, контактную информацию и т. Д. c ...

Проблема

Проблема, которую я Я бегу в это с таблицей пользователей. Эта таблица может быть довольно большой. Таким образом, если администратор хочет отредактировать информацию для определенного пользователя c, в зависимости от того, где пользователь находится в списке, администратору придется прокручивать потенциально тысячи записей, чтобы найти правильную. Я ищу алгоритм, который разделит это на группы размером примерно N и отобразит эти группы в виде диапазонов, по которым администратор может щелкнуть: # 0-B, C -F, GL, MR и т. Д. c ....

Исследование

Это исследование, которое я провел до сих пор:

Раздел базы данных - лучше выполнено PHP или MySQL?

1 очень большой стол или 3 больших стола? MySQL Производительность

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

То, что я сделал до сих пор

Я написал программу, которая работает в автономном режиме с веб-сервера и возвращает счетчики для каждого сегмента 0-9 и AZ. Для значений меньше порогового значения он объединяет сегменты в диапазон и сохраняет их в базе данных. Таким образом, если общее количество сегментов 0-9 и A, B меньше порогового значения, диапазон становится равным # 0-B. У меня возникают проблемы при попытке выяснить, как получить диапазон из корзины, если размер корзины превышает пороговое значение.

Я рассмотрел следующие решения:

  1. Рекурсивная функция, которая продолжает детализировать имена пользователей, пока они не окажутся в пределах порогового диапазона. Это было бы идеально, если бы я мог заставить его работать.
  2. Так как он работает в автономном режиме, еще одно решение, которое меня интересует, это загрузка всей корзины в память и разделение ее оттуда. Недостатком этого является потенциальное использование памяти.
  3. Другая идея, которую я развлекаю, - это вариант №2, который загружает части памяти в память и обрабатывает ее. Это уменьшит использование памяти до более или менее фиксированной величины, но потребует больше времени для обработки.

1 Ответ

1 голос
/ 18 апреля 2020

прокрутка потенциально тысяч записей

Запись запросов, возможно ad ad c, для фильтрации до меньшего количества записей. Если администратору необходимо прокрутить более нескольких десятков записей, вы (и база данных) не сможете его выполнить.

Разбиение на страницы - не используйте OFFSET; «Помните, где вы остановились»: http://mysql.rjweb.org/doc.php/pagination

Разделение - Нет; Вы не представили случай, когда это принесет пользу. Вы можете просто сказать WHERE name LIKE 'J%' или WHERE name >= 'P' AND name < 'T' (для p, q, r, s) и иметь INDEX начиная с name; но я сомневаюсь, что это действительно помогает администратору.

«Рекурсивная функция, которая продолжает углубляться» - это то, что индекс BTree уже делает для вас. Просто сделайте WHERE name > $leftoff ORDER BY name LIMIT 20. То есть используйте LIMIT для размера корзины; тем временем не беспокойтесь о предопределении границ сегмента.

"потенциальное использование памяти" - обычно лучше просто позволить базе данных иметь большую часть доступной памяти.

1 таблица против 3 - - Пожалуйста, уточните, что будет в этих таблицах.

...