|
|
|
| Каким самым быстрым способом можно взять данные строки по номеру строки?
К примеру есть файл file.dat
у него ~350,000,000 строк, а нужны данные допустим 158,745,862-ой строки
написал скрипт, но очень долго ищет, что делать, кто знает? | |
|
|
|
|
|
|
|
для: SoloNifer
(12.11.2008 в 11:18)
| | А объем файла какой?
Индекс создавать. Во всяком случае, если файл меньше 2Гб. | |
|
|
|
|
|
|
|
для: SoloNifer
(12.11.2008 в 11:18)
| | Можно длину строки делать фиксированной, тогда можно быстро доставать нужные строки. | |
|
|
|
|
|
|
|
для: BinLaden
(12.11.2008 в 11:52)
| | Строки не фиксированного размера, они динамичны в длинне.
А если писать их к примеру по 4096 байт то файл будет очень большой.
Можно индексировать, но возможно есть готовое решение и не нужно придумывать велосипед.
Вопрос есть ли и какое?!? | |
|
|
|
|
|
|
|
для: SoloNifer
(12.11.2008 в 13:24)
| | Народ, у кого нибудь есть решение без фиксированной длинны строк? | |
|
|
|
|
|
|
|
для: SoloNifer
(19.11.2008 в 13:06)
| | Покажите ваш код... поправим если что.
А вообще чтобы не изобретать велосипед, нужно ездить на мотоцикле... т.е. использовать базу данных. | |
|
|
|
|
|
|
|
для: Valick
(19.11.2008 в 13:37)
| | Всё бы ничего, но что делать с файлами длиннее 2 Гб? | |
|
|
|
|
|
|
|
для: Trianon
(19.11.2008 в 15:16)
| | У всех баз данных такая проблема при работе с файлами более 2Гб? | |
|
|
|
|
|
|
|
для: Valick
(19.11.2008 в 16:32)
| | при чем тут базы?
Я о php ( точнее о файловых функциях php 32-битовой платформы.) | |
|
|
|
|
|
|
|
для: Trianon
(19.11.2008 в 20:43)
| | я вас не понимаю... я посоветовал человеку отказаться от файлов в пользу БД раз уж так важна скорость, на что вы мне сказали, "что всё хорошо, но как быть с файлами более 2Гб", а потом спрашиваете "при чём тут базы"...
Да кстати как вариант можно разбить этот файл на несколько меньших по объёму фйлов имена которых будут содержать номер начальной строки например 0, 100000, 200000 и тд. | |
|
|
|
|
|
|
|
для: Valick
(19.11.2008 в 21:58)
| |
<?php
$file=file("file.dat");
echo $file['123456']; //номер строки плюс один т.к. массив начинается с нуля
?>
|
| |
|
|
|
|
|
|
|
для: V2D
(19.11.2008 в 23:45)
| | бедная оперативная память)))
вы хотели сказать минус один?)) хотя неважно этот вариант в любом случае не для меня)) | |
|
|
|
|
|
|
|
для: Valick
(19.11.2008 в 23:53)
| | Да действительно я что-то не подумал что файл большой, тогда как вариант сделать индексный файл где указать какая строка с какого байта начинается и каким кончается или просто разделить на блоки так же в индексном файле. И уже считывать небольшой кусочек из файла а не весь файл | |
|
|
|
|
|
|
|
для: Valick
(19.11.2008 в 21:58)
| | Вы сказали "покажите Ваш код - поправим если что"
Я гляжу (в этом разделе как минимум) на задачу совершенно конкретно.
Есть файл. Со строками текста. Достаточно длинный, чтобы даже и не думать ни об оперативной памяти. Ни о том, чтоб его содержимое куда-то, как-то, где-то копировать.
Он уже есть. Им пользуются. Разбить/переделать файл никто не позволит.
Впрочем, не помешают создать рядышком еще один - покороче на порядок-другой.
Вот в таком акцепте.
При размере файла до 2 Гб задача относительно проста.
За пределами (в 32bit php) наступает вешалка. | |
|
|
|