Бинарный файл PHP

123
lutskboy
На сайте с 22.11.2013
Offline
173
#11
webinfo #:
А вашими распакованными данными не забьётся?

нет. я нашел то что мне нужно в скрипте sypexgeo. но к сожалению я не работал и не разбираюсь в pack функции

lutskboy
На сайте с 22.11.2013
Offline
173
#12
kymasya #:

искать занимает много системных ресурсов

комент выше ответ. работает по скорости быстрее sqlite

K
На сайте с 16.01.2022
Offline
20
#13
lutskboy #:

нет. я нашел то что мне нужно в скрипте sypexgeo. но к сожалению я не работал и не разбираюсь в pack функции

Вы же сами дали пример кода с пук унпук

записать в файл

$data = array(
    array( 5, 'Ivan' ),
    array( 9, 'Vova' ),
    array( 12, 'Sergio' ),
);


$result = '';
foreach ( $data as $person )
{
    list( $id, $name ) = $person;
    $result   .= pack( 'c2a*', $id, strlen($name), $name );
}


file_put_contents( __DIR__ . '/person.bin', $result, FILE_BINARY ); 

прочитать

только нужно поправить немного его для ваших нужд


$handle = fopen(__DIR__ . '/person.bin', "rb"); $persons = array(); while ( ! feof( $handle ) ) {     $data   = fread( $handle, 2 );     if ( strlen($data) == 2 )     {         $int    = unpack( 'cid/ccount', $data );         $name   = unpack( 'a*', fread( $handle, $int['count'] ) );         $persons[$int['id']] = $name;     } } fclose($handle);
на выходе двумерный массив где $persons[ID]=NAME
W1
На сайте с 22.01.2021
Offline
289
#14
lutskboy #:
нет

А если уйти от использования функции json_decode(), которая потребляет много памяти, и просто сохранять данные в подключаемом php-файле с таким содержимым:

$data=[12=>'ivan',14=>'vova',];

Не пробовали?

Мой форум - https://webinfo.guru –Там я всегда на связи
lutskboy
На сайте с 22.11.2013
Offline
173
#15
webinfo #:

А если уйти от использования функции json_decode(), которая потребляет много памяти, и просто сохранять данные в подключаемом php-файле с таким содержимым:

Не пробовали?

дело в том что там будет много записей. около 1-2млн. наверно тоже по памяти будет напряг

W1
На сайте с 22.01.2021
Offline
289
#16
lutskboy #:

дело в том что там будет много записей. около 1-2млн. наверно тоже по памяти будет напряг

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

C
На сайте с 28.04.2022
Offline
16
#17
webinfo #:
ваши распакованные данные займут тот же объём памяти.

Никто такие данные не распаковывает. 

lutskboy, изучайте структуры (к примеру сишные) и реализуйте это на php. Готового варианта, я думаю, никто вам не даст: сильно специфическая штука, писать нужно под конкретную задачу.  Примерное чтение бинарников использует sypexgeo, ip2location да и многие другие.

LEOnidUKG
На сайте с 25.11.2006
Offline
1726
#18
lutskboy #:

дело в том что там будет много записей. около 1-2млн. наверно тоже по памяти будет напряг

чем вас sqlite с индексом не устроил не понятно, уже бы запустили и всё работало. Если надо просто поместите бд файл в память и всё будет работать еще быстрее.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Shelton724
На сайте с 26.05.2011
Offline
242
#19
lutskboy #:
дело в том что там будет много записей. около 1-2млн. наверно тоже по памяти будет напряг

Ну (раз уж id известные и просто числовые) тогда сделайте не один файл, а (например) 1000. По принципу в первом с id от 0 до 1000, во втором от 1001 до 2000 и т.п. Ну и обращаться к нужному в зависимости от диапазона. И искать будет любым методом в 1000 раз быстрее и память забьётся в 1000 раз меньше на эти данные.

W1
На сайте с 22.01.2021
Offline
289
#20
chinafull #:
Никто такие данные не распаковывает. 

ТС распаковывает, функцией unpack(). Читай топик, прежде чем комментировать.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий