Обработка большого объема

Serg Klyk

Новичок
Здравствуйте! Интересует обработка большого объема инфы.
Размер позиции одного элемента, около 5-10 кб., и пунктов более 100 000.
Выбрано файловое хранение, то есть при помощи сериализе.

Открываем файл в переменную и 6000 позиций уже занимают 30 МБ., и еще место для фильтрования, это около 50 МБ..
По сути база данных не используеться, так как фильтруется материал по многим критериям элемента (объявления), а не просто выводится суть или поиск по заголовку.
Предел 60 МБ, а уже используется 50 МБ, что посоветуете? И как вообще правильно решить такой вопрос?
 

WMix

герр M:)ller
Партнер клуба
если заменить слово "инфа" на слово "данные", то ответ лежит на поверхности
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Чтобы правильно решить вопрос, надо правильна задать этот вопрос.

Я вот дальше фразы:

Выбрано файловое хранение, то есть при помощи сериализе.
Уже не читал, а так - проглядел.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
слышал о чуваке, который на С написал собственную реализацию индексов в памяти, просто влом было sql учить
 

WMix

герр M:)ller
Партнер клуба
я знаю такого ) он свою написал, обьясняя что обычные базы его не устраивают, а чем его база лучше я до сих пор не понял
 

Serg Klyk

Новичок
Собственная база это хорошо, многие задачи удобнее решать именно таким образом.
Подтолкните к вопросу, как реализуется поиск материалов при помощи MSQL, и сколько уходит памяти.

Единый выход и плюс базы, если делать так:

- берем каждый материал отдельно (6кб.) из базы
- смотрим, подходит ли по фильтру
- если подходит, отправляем пользователю или добавляем в массив для послед. обработки

С файловой системой хранения оно выглядит так:

- грузим все данные в массив (6 * 6 000 = 36 000 записей, около 40 МБ )
- проходим по фильтру
- подходящие материалы отделяем в массив для обработки или выводим

Правильно ли я понял, что в случае с базой, памяти намного меньше необходимо?
 

WMix

герр M:)ller
Партнер клуба
с базой это выглядит так
клиент: дай по фильтру
сервер: на
тебя где память интересует?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
В случае с базой, мы не берем каждый материал отдельно, а фильтруем все на уровне БД. Все обработки стараемся делать средствами базы над отобранными элементами.
 

AmdY

Пью пиво
Команда форума
в базах данных хранятся терабайты информации, которые не помещаются в память, а поиск идёт по хитропостроенным индесам созданным по одному или паре полей, чтобы не тащить записи целиком в память.
 

Serg Klyk

Новичок
В случае с базой, мы не берем каждый материал отдельно, а фильтруем все на уровне БД. Все обработки стараемся делать средствами базы над отобранными элементами.
в базах данных хранятся терабайты информации, которые не помещаются в память, а поиск идёт по хитропостроенным индесам созданным по одному или паре полей, чтобы не тащить записи целиком в память.
Спасибо вам, доступно объяснили. В принципе у меня тот же принцип сейчас получается, только поиск, вернее отбор делаю сам.
Надо все таки базу данных подучить.
А тогда такой вопрос, подошло по поиску 1000 элементов, можно ли в базе дать запрос, показать только первые 10, потом след. постранично?

И главный вопрос, можно ли в базу задать поиск по условиям, типа если у этого элемента свойство А больше свойства Б, тогда выдать.

Просто тут как получается, поиск ведется не просто по свойствам, а к примеру, если выбран тип элемента один из трех, то поиск ведем по одной группе поиска, а если второй и так далее, то важны другие свойства. Наверно прийдется задавать сложные запросы.
 

WMix

герр M:)ller
Партнер клуба
А тогда такой вопрос, подошло по поиску 1000 элементов, можно ли в базе дать запрос, показать только первые 10, потом след. постранично?

И главный вопрос, можно ли в базу задать поиск по условиям, типа если у этого элемента свойство А больше свойства Б, тогда выдать.
можно но дальше сам. открой мануал, почитай, подумай, и возвращайся с правильными вопросами
 

Serg Klyk

Новичок
Большое вам спасибо! Уже понял, что поиск лучше делать средствами базы данных.
Нашел пример, как раз подходящий под мой вопрос, ничего сложного.
Хорошо, что вызов к файловой базе делал через функцию, теперь только переадресую запросы в MSQL и готово.
 
Сверху