"Group By" и другие алгоритмы базы данных? - PullRequest
6 голосов
/ 15 июля 2009

Я написал несколько очень простых инструментов для группировки, разворота, объединения и подытога наборов данных, полученных из источников, не относящихся к БД (например, CSV, OLTP системы). Методы «group by» лежат в основе большинства из них.

Однако я уверен, что была проделана большая работа по созданию эффективных алгоритмов группировки данных ... и я уверен, что я их не использую. И мой Google-фу не смог ничего найти.

Существуют ли хорошие онлайн-источники или книги, описывающие лучшие методы создания сгруппированных данных?

Или я должен просто начать смотреть на источник MySQL или что-то подобное?

Ответы [ 3 ]

5 голосов
/ 15 июля 2009

Один очень удобный способ «сгруппировать» по какому-либо полю (или по множеству полей и выражений, но я буду использовать «поле» для простоты! -) - это когда вы можете организовать просмотр результатов перед группировкой (RBG) в сортированном виде - вы на самом деле не заботитесь о сортировке (за исключением общего случая, когда ORDER BY также присутствует и находится в том же поле, что и GROUP BY! -), а скорее о свойство побочного эффекта упорядочения - все строки в RBG с одинаковым значением для поля группировки располагаются сразу друг за другом, так что вы можете накапливать, пока поле группировки не изменится, затем вывести / выдать результаты, накопленные до сих пор, и продолжить для повторной инициализации аккумуляторов с новой строкой (с другим значением поля группировки) - убедитесь, что «просто инициализировали аккумуляторы» в самом начале, И «просто испустите / выдайте накопленные результаты» в самом конце, конечно.

Если это не работает, возможно, вы можете хэшировать поле группировки и использовать хеш-таблицу для результатов, которые накапливаются для этой группы - в каждой строке в RBG хэшируйте поле группировки, проверьте, присутствовало ли оно как ключ в хэш-таблице, если он не помещен туда с аккумуляторами, соответствующим образом инициализированными из строки RBG, иначе обновите аккумуляторы для строки RBG. Вы просто излучаете все в конце. Проблема, конечно, в том, что ты занимаешь больше памяти до конца! -)

Это два фундаментальных подхода. Хочешь псевдокод для каждого, кстати?

1 голос
/ 15 июля 2009

Вам следует проверить базы данных OLAP. OLAP позволяет создавать базу данных агрегатов, предназначенных для анализа в режиме «среза и кости».

Совокупные показатели, такие как счетчики, средние значения, минимумы, максимумы, суммы и значения stdev, можно быстро проанализировать по любому количеству измерений с использованием базы данных OLAP.

См. это введение в OLAP в MSDN.

0 голосов
/ 16 июля 2009

Приведите пример CSV-файла и тип требуемого результата, и я мог бы найти решение для Python для вас.

В Python есть модуль CSV и списки / генераторы, которые могут помочь с такими вещами.

  • Пэдди.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...