Хранить большой массив PHP, обычный php или gzip-сериализованные данные? - PullRequest
0 голосов
/ 16 сентября 2010

У меня есть статический большой массив массивов, ведьма представляет древовидную структуру с ~ 100 000 узлами, этот массив только для чтения только для блокировок значений.

Теперь, кто из этих методов будет работать лучше?

Во-первых, просто определение массива в чистом PHP-файле, для включения в запросы

Во-вторых, сериализация этого массива, сериализованный вывод gzip, загрузка файла gzip и десериализация для каждого запроса

Или преобразовать массив в SQLite или что-то подобное, но хранилище должно быть способно к быстрой блокировке длинного «пути ID», т.е. 1-> 5556-> 123-> 45-> 455-> имя_узла (с таблицей PHP все в порядке)

Ограничение памяти на сервере не является проблемой

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

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

если вы хотите быстрее или этот файл может стать намного больше, возможно, стоит поискать способы извлечения того, что вам нужно, без загрузки всего файла - указатели на узлы дерева / fseek / hashtables / и т.д.

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

1 голос
/ 16 сентября 2010

В любом случае вам нужно будет превратить массив в значение PHP, так что gzip отсутствует.

Итак, если вы собираетесь решить, хранить ли это на диске с помощью чего-то вроде sqlite, или просто позволить php загружать его каждый раз (желательно с включенным APC), реальный вопрос в том, что для вас важнее, память или процессор. Если вы еще не знаете, возможно, вы страдаете от преждевременной оптимизации.

Когда действительно становится уместным для вас, чтобы сократить память или процессор, (или io) ответ будет более очевидным, поэтому убедитесь, что вы можете легко рефакторинг.

Если вы хотите предсказать, что лучше для вас, сделайте тест.

Обновление Я только что видел память, по-видимому, не проблема. Перейдите к массиву PHP и включите файл. Легко. Имейте в виду, однако, что если общий размер данных составляет 10 МБ, это будет 10 МБ на процесс apache. При 100 процессах Apache это уже 1 ГБ.

0 голосов
/ 16 сентября 2010

Мои тесты говорят обо всем:

Чистый размер PHP-файла: ~ 5 МБ

Pure PHP file import: avg load time: ~210 ms
Pure PHP file import with APC: avg: ~60-80 ms
Unserialize(gzuncompress(file_get_contents()) : almost const, every request: ~ 40 ms

SQlite Я не тестировал, потому что не хватает времени, чтобы портировать эту древовидную структуруБаза данных SQL

~ размещена на 4-ядерном Intel Xeon с HT и аппаратном RAID 5

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