2015-11-09 5 views
0

Предположим, что у меня есть данные с 100 столбцов, и я хочу, чтобы поддержать (совокупность) запросов на 70 из этих 100 столбцов, Что лучше структура данных я могу использовать здесь:Эффективная структура данных для агрегированных данных по нескольким столбцам

Пример: 5 колонок (studentGender, studentClass, studentGrade, studentAttendanceGrade, studentCoin)

и теперь я хочу, чтобы поддержать 3 агрегатные запросы типа:

  1. сумма studentCoins по studentGrade
  2. сумма studentCoins по studentClass
  3. сумма studentCoins по studentGender

Пожалуйста, не дают SQL решение, я говорю о программе C со структурой данных и ввода (вектор размера 5) приходит в реальном времени и я не могу хранить сырые гранулированные данные, если не существует эффективного решения.

Одним из решений является сохранение 3 хэш-таблиц по одному для каждого типа запроса. Но это решение трудно расширить, потому что в будущем, если мы поддержим 100 столбцов и 70 запросов, тогда в этом случае нам необходимо поддерживать 70 хэш-таблиц по одному для каждого типа запросов

+4

Не могли бы вы описать ваши решения хэш-таблиц правильно? – Sigstop

+0

Если в обновлениях преобладают запросы, сохраните результаты для частых запросов в актуальном состоянии. Значения атрибутов _If_ вряд ли будут очень редки, итерационные массивы могут быть достаточно хорошими (рассмотрите кодирование _many_ атрибутов в «машинные слова» таким образом, который легко маскируется (_bit fields_)). – greybeard

+1

Если вы говорите о программе C, почему вы отметили этот C++? Кто-то может написать ответ, используя [''] (http://en.cppreference.com/w/cpp/algorithm), который вы тогда не могли использовать ... – DevSolar

ответ

0

Я нахожу ваш вопрос очень широким и может быть уместным тем не менее, чтобы дать некоторые идеи:

Главный вопрос для меня: «Сколько строк мы говорим?» Если данные поступают с высокими скоростями в режиме реального времени, при наличии только случайных запросов, отделяют получение данных (например, от плоского файла) и обработку этих данных (чтение плоских файлов).

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

Хэш-таблицы и сбалансированные деревья могут быть вариант, если запросы являются более динамичным.

Смежные вопросы