У меня много объектов. Каждому объекту соответствует несколько пар ключ-значение. Ключ - это произвольная строка (ключи могут быть разными для разных объектов, и нет полного списка возможных ключей), значение может быть числовым, строковым, datetime и т. Д.Найти подходящее хранилище и поисковая система
Мне нужно выполнить поиск по этой коллекции, используя сложный поиск запросы. В самой простой реализации пользователь должен иметь возможность указывать список интересных ключей и условие для значения каждого ключа, например.
key1: not present
key2: present
key3: == "value3"
key4: < 42
key5: contains "value5"
Двигатель должен найти все объекты, которые удовлетворяют всем условиям (то есть условия имеют значение AND). В идеальной реализации пользователь может указать условие с использованием некоторого языка запросов, например.
key1 = "value1" AND (key2 < 3 OR key3 < 3)
Я использую C++ с Qt в Windows (поддержка Linux не обязательно, но хорошая). Я не хочу использовать базы данных, требующие некоторой установки (особенно с правами администратора), я хочу, чтобы решение было переносимым.
Пожалуйста, предлагайте хороший способ реализовать это с нуля или использовать любую библиотеку или базу данных, которые удовлетворяют мои потребности.
Обновление: Вопрос о хранении больших объемов данных на диске и быстрый поиск по нему. Возможно, речь идет также о разборе и обработке поисковых запросов. Речь идет не о структурах данных, которые мне нужны для представления данных в памяти. Это достаточно просто.
Имеется довольно много данных. Загрузка всего этого в память займет некоторое время. Однако поиск после этого будет быстрым. Как вы думаете, это лучший вариант? Существуют ли какие-либо технологии, обеспечивающие быстрый поиск без загрузки всех данных в память? –
Уверен, что вы можете перейти на диск и пропустить при поиске ключей. Путь, выходящий за рамки вашего вопроса, извините. Посмотрите на «Искусство компьютерного программирования» Кнута. –
Это не выходит за рамки моего вопроса, это то, что я пытался задать в моем вопросе. Простейшая реализация этого будет слишком медленной. Я ищу что-то, чтобы ускорить поиск. –