Похоже, ваши данные принадлежат базе данных OLAP (On-Line Analytical Processing). То, как вы описываете уровни, срезы и проблемы с производительностью, похоже, пригодно для OLAP. Вероятно, он отлично смоделирован (но не уверен), но вам нужен другой инструмент для повышения производительности.
В настоящее время я управляю такой системой. У нас есть стандартная реляционная база данных для ввода, а затем скопировать соответствующие данные для отчетности на сервер OLAP. Наша компания - это Microsoft SQL Server (входные данные, необработанные данные), Microsoft Analysis Services (предварительные вычисления, а затем сохранение аналитических данных для увеличения скорости), а также сводные таблицы и / или таблицы Microsoft Excel / Access для отчетов.
OLAP-серверы:
http://en.wikipedia.org/wiki/Comparison_of_OLAP_Servers
Объединение реляционных и OLAP:
http://en.wikipedia.org/wiki/HOLAP
Tableau:
http://www.tableausoftware.com/
* Tableau - превосходный продукт, и он может заменить сервер OLAP, если ваши данные не очень большие (даже в этом случае они могут обрабатывать много данных). Он будет делать локальные копии по мере необходимости для улучшения производительности. Я настоятельно советую взглянуть на это.
Если я неправильно понял проблему, с которой вы столкнулись, непременно проигнорируйте этот ответ: \
ОБНОВЛЕНИЕ: После дальнейшего обсуждения, объектная БД также может быть решением. Ваши данные звучат многомерно по своей природе, так или иначе, но я думаю, что разница будет заключаться в том, выполняете ли вы аналитические совокупные вычисления и поиск (SUMs, AVG), или просто храните и извлекаете категориальные или реляционные данные (корзина покупок) предметы или друзья члена семьи).
Информация СУБД: http://en.wikipedia.org/wiki/Object_database
Кэш InterSystem - это одна из известных мне объектных баз данных, которая звучит как более подходящая подгонка в зависимости от того, что вы сказали.
http://www.intersystems.com/cache/
Если преобразование в другую систему невозможно (полностью понятно), то вам, возможно, придется взглянуть на нормализацию и типы данных, обрабатываемых вашими запросами, чтобы добиться дальнейшего повышения скорости. На самом деле, это, вероятно, хороший первый шаг перед переходом на другой тип системы (извините, я не дошел до этого раньше).
В моем случае, я знаю по MS SQL, что переключение с некоторых основных запросов с использованием поля VARCHAR
на использование поля INTEGER
имело огромное различие в скорости. Текстовые данные - один из самых дорогих типов данных для обработки. Так, например, если у вас есть запрос, выполняющий много INNER JOIN
с в текстовых полях, вы можете рассмотреть возможность нормализации до точки, где вы используете INTEGER
идентификаторов, которые ссылаются на текстовые данные.
Примером высокой нормализации может быть использование идентификационных номеров для имени или фамилии человека. Большинство конструкций БД хранят эти имена напрямую и не пытаются уменьшить дублирование, но вы могли бы нормализоваться до точки, где Фамилия и / или Имя имеют свои собственные таблицы (или одну таблицу для хранения Имени и Фамилии) и идентификаторы для каждое уникальное имя.
Дело в вашем случае было бы больше для производительности, чем дедупликация данных, но что-то вроде переключения с VARCHAR
на INTEGER
может иметь огромный выигрыш. Сначала я бы попробовал сделать это с одним полем, измерить случаи до и после, а затем тщательно принять решение.
И, конечно же, в целом вы должны иметь соответствующие индексы для ваших данных.
Надеюсь, это поможет.