Поиск больших данных, все числовые, 1 миллиард байт в PHP - PullRequest
0 голосов
/ 13 января 2009

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

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

Любая помощь обязательно приведет к признанию в случае необходимости.

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

Ответы [ 5 ]

1 голос
/ 13 января 2009

Ну, ваши теги показывают, что вы должны делать (тег, на который я ссылаюсь, это «индексация»).

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

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

0 голосов
/ 13 января 2009

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

0 голосов
/ 13 января 2009

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

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

0 голосов
/ 13 января 2009

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

0 голосов
/ 13 января 2009

Хороший ответ может потребовать, чтобы вы немного конкретнее.

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

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

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

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

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

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

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

Количество времени и денег, которые вы вкладываете в решение, является функцией стоимости этого решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...