Я ищу способ эффективного поиска данных в огромной многомерной матрице.Эффективный поиск в огромной многомерной матрице
Мое приложение содержит данные, которые характеризуются несколькими измерениями. Представьте, что вы сохраняете данные обо всех продажах в компании (мое приложение совершенно другое, но это просто для демонстрации проблемы). Каждая продажа характеризуется:
- продукт, который продается
- клиент, который купил продукт
- день, на котором было продано
- сотрудника, который продал продукт
- Способ оплаты
- количество продано
у меня есть millio нс продаж, выполненных на тысячах продуктов, сотнями сотрудников, на много дней.
Мне нужен быстрый способ расчета, например:
- общего количества продаваемого сотрудник на определенный день
- общее количество куплено клиентом
- общего количество продукта, платное с помощью кредитной карты
- ...
Мне нужно хранить данные в наиболее детально, и я мог бы использовать карту WHe повторно ключ является суммой всех размеров, как это:
class Combination
{
Product *product;
Customer *customer;
Day *day;
Employee *employee;
Payment *payment;
};
std::map<Combination,quantity> data;
Но так как я заранее не знаю, какие запросы выполняются, мне нужно несколько классов комбинации (где элементы данных находятся в разном порядке) или карты с различными функциями сравнения (с использованием другой последовательности для сортировки).
Возможно, проблема может быть упрощена путем предоставления каждому продукту, клиенту ... номера вместо указателя на него, но даже тогда я получаю много памяти.
Существуют ли какие-либо структуры данных, которые могут помочь в обработке такого рода эффективных поисков?
EDIT:
Просто чтобы прояснить некоторые вещи: На диске мои данные хранятся в базе данных, так что я не ищет способов изменить это.
Проблема в том, что для выполнения сложных математических вычислений у меня есть все эти данные в памяти, и мне нужен эффективный способ поиска этих данных в памяти.
Помогла ли база данных в памяти? Возможно, но я боюсь, что база данных в памяти может серьезно повлиять на потребление памяти и производительность, поэтому я ищу лучшие альтернативы.
EDIT (2):
еще несколько уточнений: мое приложение будет выполнять моделирование на основе данных, и в конце концов пользователь волен сохранить эти данные или нет в моей базе данных. Таким образом, данные сами изменяются все время. Во время выполнения этих симуляций и изменений данных мне нужно запросить данные, как описано ранее.
Таким образом, просто запрос к базе данных не является вариантом. Мне действительно нужны (сложные?) Структуры данных в памяти.
Кажется, вам нужна база данных вместо единой структуры данных. Вы можете попытаться реализовать его самостоятельно, но я не думаю, что это хорошая идея - изобретать огонь. –
MySQL (для примера БД) предназначен для выполнения этой точной работы самым быстрым способом. Я согласен с @izomorphius: создайте несколько таблиц, например: продукт, клиент, работник, транзакцию продаж (удерживает день и платеж) и дайте БД сделать это. C'mon, приятель, пришло время окунуться в воду БД :-) –
Данные уже находятся в базе данных, и они уже хорошо структурированы в базе данных, так что это не проблема. Проблема в том, что у меня есть такие данные в памяти, и мне нужно выполнить сложные математические вычисления. Использование базы данных в памяти может решить ее, но я боюсь влияния ее производительности. Является ли реалистичным бросать все в базу данных в памяти? – Patrick