Я немного сомневаюсь, какую коллекцию использовать для наших данных.Выбор нужной сортированной коллекции
Домен это (пример):
Для каждого супермаркета добавить новый элемент в коллекцию с меткой времени и общей суммой каждый раз, когда любой клиент платит в реестре.
В настоящее время мы делаем это:
У нас есть словарь коллекции с ключом = UniqueSupermarketID и значение представляет собой список < {метка времени, количество}>
Каждый раз, когда клиент платит нам просто добавить новый элемент сбор для конкретного супермаркета.
Нам нужно извлечь данные из этого словаря таким образом, что:
Для указанного супермаркета, получить новейший объект кассового аппарата с временной меткой сравнявшись «некоторые метками»
В настоящее время мы делаем это так:
supermarketDictionary["supermarket_01"]
.OrderByDescending(i => t.TimeStamp)
.FirstOrDefault(i => i.TimeStamp == 'some timestamp')
Это, очевидно, быстро начинает работать как дерьмо - поэтому я пытаюсь выяснить, какая коллекция хранит данные вместо этого.
Я рассматриваю, используя обычный словарь, чтобы провести «супермаркет ID < -> кассовых список» отношения и с помощью SortedDictionary для временных меток/сумм, используемых в качестве ключей.
Правильно ли это? Конечно, мне нужно было бы правильно выполнить IComparable в метке времени, чтобы заставить ее работать правильно.
Update 2014-01-03:
Есть в настоящее время около 7 миллионов строк в списке в вопросе. Обычаи списков в нашей системе были идентифицированы как эти:
_states
.OrderBy(x => x.TimeStamp)
.FirstOrDefault(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp);
_states
.Where(x => x.WtgId == wtgId && x.IsAvailable && x.TimeStamp >= timeStamp && x.TimeStamp <= endDateTime)
.OrderBy(x => x.TimeStamp).ToList();
_states.Remove(state);
if (!_states.Contains(message))
_states.Add(message);
Спасибо,
/Jesper Копенгаген, Дания
Если вы используете огромное количество данных, используйте базу данных. Это единственный масштабируемый и рациональный способ, а затем загружать только нужные данные. – user1567896
Где хранятся ваши данные? В базе данных? Если да, то какой? – Oliver
Я предполагаю, что у вас есть db за ним. Поэтому просто дайте db выполнить эту работу за вас. –