Поиск больших данных, полностью числовых, 1 миллиард байт в PHP

Мне было интересно, как я могу быстро найти строку данных размером до 1 миллиарда байт. Все данные числовые. В настоящее время у нас есть данные, разделенные на 250k файлов, и поиск с использованием strpos (самая быстрая встроенная функция) для каждого файла, пока не будет что-то найдено. Есть ли способ индексирования, чтобы ускорить его работу? Какие-либо предложения?

В конце концов я хотел бы найти несколько вхождений, которые на данный момент будут выполняться с параметром смещения в strpos.

Любая помощь обязательно приведет к признанию там, где это необходимо.

Спасибо! - Джеймс Хартиг

Я просто пытаюсь найти решение, мне не нужен код, я могу его написать сам, я просто пытался найти лучший «маршрут».

James Hartig 13.01.2009 07:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
499
5

Ответы 5

Что ж, ваши теги указывают, что вы должны делать (тег, о котором я говорю, - "индексирование").

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

Затем вы получите доступ к индексу, найдите свое значение, а затем найдите место (а) в исходном файле (ах) для строки данных и выполните обработку оттуда.

Однако я не знаю, как именно индексировать? Поиск мог быть от 000 до 999 (100 цифр), я бы не знал, как индексировать. Все можно было обыскать.

James Hartig 13.01.2009 04:53

Есть ли в этом файле какая-то структура? Или вы ищете произвольные строки данных?

casperOne 13.01.2009 04:59

Файлы представляют собой обычные текстовые файлы со 100% числовыми данными. Как уже говорилось, каждый файл содержал 250 КБ данных. Первый файл (1.txt) содержит 1-250 КБ, следующий (2.txt) 250 001-500 КБ и т. д.

James Hartig 13.01.2009 05:06

и да, произвольные строки данных ищутся и кешируются.

James Hartig 13.01.2009 05:08

Для хорошего ответа может потребоваться более конкретная информация.

  1. Как долго длится поисковый запрос? 1 цифра? 10 цифр? Произвольная длина?

  2. Насколько «быстро» достаточно быстро? 1 секунда? 10 секунд? 1 минута?

  3. Сколько всего запросов в секунду / минуту / час вы ожидаете?

  4. Как часто меняются данные? Каждый день? Час? Постоянно?

  5. Когда вы говорите «несколько вхождений», это звучит так, как будто вы имеете в виду перекрывающиеся совпадения.

  6. Какова «ценность» ответа и для скольких людей?

Миллиард - это уже не то, что было раньше, чтобы вы могли просто проиндексировать всю ерунду и получить индекс, который в 10 или даже 100 раз превышает исходные данные. Но если данные меняются поминутно, это будет означать, что вы прожигали больше циклов для создания индекса, чем для его поиска.

Количество времени и денег, которые вы вкладываете в решение, зависит от его ценности.

Данные будут меняться только раз в месяц. 1) 3–100 разрешенных цифр 2) предпочтительно менее секунды 3) 100 запросов в минуту (результаты кешируются) 4) ежемесячно 5) да (12341234, если я искал «123», мне нужны два местоположения, 0 и 4) 6) На данный момент неизвестно.

James Hartig 13.01.2009 05:05

В 10-100 раз больше исходных данных. Я бы предпочел оставаться ниже 50-кратного оригинала, но могу подняться и до 125-кратного.

James Hartig 13.01.2009 05:07

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

Все вопросы Питера Роуэлла относятся к делу. Если вам абсолютно необходим нестандартный ответ, попробуйте grep. Вы даже можете запустить его из PHP, если хотите. Это на порядки быстрее, чем strpos. На самом деле мы довольно хорошо использовали его в качестве решения для чего-то, что не могло иметь дело с индексированием.

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

Я уже ответил в комментариях? Но спасибо, посмотрю в grep.

James Hartig 13.01.2009 07:59

Будет ли работать хеш-функция / таблица? Или массив / дерево суффиксов?

Другие вопросы по теме