Я пытаюсь написать небольшую программу, которая ищет структуру типа ключ-значение.Мой поиск состоит в том, чтобы найти самый быстрый подход, возможный для поиска значения ключа.
Я бы предпочел использовать C # для этой программы, если другой язык не дает мне существенного преимущества.Другое ограничение, которое я ставлю, заключается в том, что все должно быть на одном компьютере.Я не хочу использовать базу данных Oracle или SQL Server, потому что я верю, что другие варианты позволят мне работать намного быстрее.Данные в основном читаются и редко записываются.Когда бы ни происходили изменения или обновления данных, создается новый набор, и это нормально, если запись данных занимает время.
Допущения:
Данные сортируются в числовом порядке.
Структура проста:
Файл Char3: (В этом файле будут храниться только 3 символьных ключа)
Ключ | Значение
100 | 2,5,6,7: 9: 3,4, 5: 3,4,5: 2,5,6,7
999 | 2,5,6,7: 9: 3,4: 3: 2,5
Char5 file: (В этом файле будут храниться только 5 символов)
Ключ | Значение
A1000 | 2,5,6,7: 9: 3,4,5: 3,4,5: 2,5,6,7
Char3 и Char5 имеют одинаковую структуру хранения, но имеют разные типы ключей.Однако ключ будет иметь одинаковую длину в данном файле
У меня есть несколько файлов, подобных этим, каждый файл будет иметь одинаковую структуру.Единственным изменением будет длина ключа в каждом файле.
Задаче предоставляется набор из 1-200 (переменной длины). Ключи находят все данные, относящиеся к каждому ключу.
Ягенерирование этих данных из базы данных и, следовательно, может создавать данные в любом формате.
Для теста FileStream я собираюсь заполнить каждую строку для данного файла, а затем использовать FileStream.Seek для быстрого перехода к заданному местоположению на основе заполнения.
Что я хочу сделать, это выяснить, какое из этих приложений будет самым быстрым?
- FileStream - со временем я также посмотрю на отображенные в памяти файлы.(Открыть для других параметров)
- Встроенный SQL - SQLite (Открыть для других параметров)
- NoSql - ??(В поисках предложений)
Мой вопрос заключается в том, что я должен использовать в каждой из этих категорий для правильного сравнения.Например, если бы я использовал FileStream и не использовал FileStream.Seek, это не было бы правильным сравнением.
В конечном итоге я также хотел бы выполнять поиск параллельно настолько, насколько я могу.Моим основным требованием является выполнение ПОИСКА.
Любые идеи или предложения будут великолепны.
Спасибо,
ОБНОВЛЕНИЕ: я перечислю детали и результаты опций, как яобработайте их
Найдите 5000 случайных записей (по строке цифр или некоторой другой подобной характеристике) в файле, который содержит 10К строк, 2,28 МБ.
- Опции FileStream - Лучшее время: 00: 00: 00.0398530 мс