Russian Qt Forum
Март 29, 2024, 13:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Простой (?) поиск  (Прочитано 14378 раз)
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #30 : Сентябрь 30, 2018, 12:38 »

Да все товарищи правильно поняли как и положено профессиональным программистам. Если данные "не лезут в память" то описание с этого и начинается. Если я об этом не упомянул - значит этой проблемы нет. Так же и с изменением данных "на лету", это совсем др задача. Стало быть речь идет о самой банальной ситуации - построить структуры для поиска один раз, и затем искать многократно. Ну и чего тратить время и место на совершенно ненужные "выяснения" (хз чего) ?

Так вот значит какая логика должна быть Улыбающийся.

Цитировать
Украли у мужика корову. Приходит он домой и говорит сыновьям:
- У нас корову украл какой-то мудак.
Старший брат: — Если мудак — значит маленький.
Средний брат: — Если маленький — значит из Малиновки.
Младший Брат: — Если из Малиновки — значит Васька Косой.
Все выдвигаются в Малиновку и там прессуют Ваську Косого.
Однако Васька корову не отдает. Его ведут к мировому судье.
Мировой судья:
- Ну… Логика мне ваша непонятна. Вот у меня коробка, что в ней лежит?
Старший брат: — Коробка квадратная, значит внутри что-то круглое.
Средний: — Если круглое, то оранжевое.
Младший: — Если круглое и оранжевое, то апельсин.
Судья открывает коробку, а там и правда апельсин.
Судья — Ваське Косому:
- Косой, отдай корову.
« Последнее редактирование: Сентябрь 30, 2018, 13:14 от ViTech » Записан

Пока сам не сделаешь...
NoIdea
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #31 : Октябрь 12, 2018, 19:23 »

вот чего накидал:
Ну все-таки надо думать о производительности и расходе ресурсов (хотя бы иногда  Улыбающийся). Создавать многочисленные контейнеры на каждом поиске - ну это уж слишком
Если объектов десятки-сотни миллионов, тогда поиск лучше возложить на БД.
Что касается производительности, то поиск по хешу О(1) в среднем. Пересечение только замедлить может.
Ну в общем, принцип пересечения подмножеств я предложил, дальше вам решать, подойдёт ли он под конкретную задачу.
ps: у меня в проекте с 300-2000 тыс объектов подобные индексации используются, производительности хватает, памяти на индексирование до 200мб жрется.

Занятно, интересно сравнить по производительности и ресурсам с БД в памяти:
http://doc.qt.io/qt-5/qtsql-cachedtable-example.html

Код
C++ (Qt)
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName(":memory:");
   // ...

Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #32 : Октябрь 13, 2018, 09:55 »

Занятно, интересно сравнить по производительности и ресурсам с БД в памяти:
http://doc.qt.io/qt-5/qtsql-cachedtable-example.html

Код
C++ (Qt)
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName(":memory:");
   // ...


На указанных объёмах данных, примерно монопенисуально, в пределах погрешности измерений, и даже файловый вариант БД приемлемые результаты показывает.
Оптимизация не идёт уже в ключе выбора хранилища данных, а идёт в ключе минимизации обращения к ним, разбиения на подмассивы (в БД отдельные таблицы), прикручивания различного распараллеливания и пр.
Удобство БД в том, что она инкапсулирует много рутинной работы, например то же пересечение множеств в любом виде, делается одной строкой.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 22.