Какой вариант поиска строки лучше?

158
19 декабря 2016, 19:32

Есть два варианта поиска строки определенной. И получение соответственно ключа к нему.Формат ключ => URL. Обычно ищется по строке URL.

1.Строка такого вида для первого варианта. ключ === http://google.com .Получаем содержимое файла через file_get_contents().Потом через strpos получаем строку(ну позицию).Строку разделяем по explode ('===', $str).Получаю ключ по $str[0].

2.Строка вида массива и используются массивы.(key=>11) Массив помещен также как и в первом варианте в файл с помощью serialize().И потом unserialize( достаю с file_get_contents).Получится массив и с помощью array_search() достаю мой заветный ключ к URL.

Какой вариант лучше и почему?

И может свои варианты...

Answer 1

Как известно файловые системы - это неплохие базы данных, при правильном подходе... Предлагаю следующий вариант:

  1. от url по которому будем искать получаем какой нибудь быстрый хэш. можно md5, можно функцией hash() например md4 (он вроде самый быстрый из встроенных в php).

  2. От строки хеша в шестнадцетиричном виде (типа 8a64c7cb7a794bce2b727acc0362ee27) получаем первые символы и представляем их в таком виде /8/a/64.

  3. Получаем file_get_contents файл по вычисленному пути, т.е. you-dir/8/a/64.dat

  4. Разбираем файл как вы предложили, поиском в массиве. Ищем строку. Только строки я предлагаю хранить задом наперед. Т.е. сначала URL потом знак табуляции (\t) и ключ. И файл начинать пустой строкой, что бы первым символом шел перевод каретки. Тогда strpos ищем строку "\n$url\t" - таким образом мы исключим любые разночтения.

Почему так ? Много файлов в одном каталоге на диске будут сильно тормозить. 256 файлов или каталогов - это не много для чтения одного каталога. Поэтому делаем иерархическую структуру. Делать более 2-3х уровней вложенности - то же плохо, да и смысла не особо много. При данном подходе мы в дерево уложим наши url так, что наш 50Mб файл будет разбит в среднем на куски по 762 байта ...

READ ALSO
Форма и её обработка на php

Форма и её обработка на php

У меня есть форма для загрузки одного файла,как можно сделать так чтобы загружались и обрабатывались сразу два??

185
Выборочный вывод переменных из функции

Выборочный вывод переменных из функции

Как реализовать, что-то подобное?

164
Нужна идея (php вывод переменных)

Нужна идея (php вывод переменных)

Есть громоздкое body от table

179
Главная категория Opencart

Главная категория Opencart

Как определить главную категорию товара? Код ниже определяет (к примеру) телефоны -> смартфоны, а мне нужно что бы определяло телефоны -> смартфоны

237