Я немного растерялся в этом задании. Для нашего решения для кэширования существует требование разбивать большой словарь данных на разделы и выполнять над ними операции в отдельных потоках.
Сценарий таков: у нас есть большой пул данных, который должен храниться в памяти (40 м строк), выбранная стратегия должна сначала иметь словарь с ключом int. Этот словарь содержит подмножество из 16 словарей, которые вводятся с помощью guid и содержат класс данных.
Число 16 рассчитывается при запуске и указывает количество ядер процессора * 4.
Класс данных содержит байт [], который в основном представляет собой переведенный набор свойств и их значений, указатель int на словарь метаданных и контрольную сумму.
Затем существует набор функций управления, который заботится о блокировке и назначает / извлекает данные ключа Guid на основе деления первого сегмента guid (8 шестнадцатеричных чисел) на делитель. Этот делитель просто FFFFFFFF / 16. Таким образом, каждому ключу будет назначен соответствующий раздел.
Теперь мне нужно выяснить, как выполнять операции (поиск ключа, итерации и запись) над этими словарями в отдельных потоках параллельно? Буду ли я обернуть эти операции с помощью задач? Или лучше загрузить эти словари бегемотов в отдельные темы?
У меня есть приблизительное представление о том, как реализовать сборщики данных, это будет легкая часть, я думаю.
Кроме того, является ли использование словарей хорошим подходом? Их размер ограничен 3 миллионами строк на раздел, и если один заполнен, механизм управления пытается вставить на другой сервер, который использует точно такой же механизм.
Действительно ли .NET является хорошим языком для реализации этого решения?
Буду очень признателен за любую помощь.