Автор Тема: быстрое чтение файла  (Прочитано 8217 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #15 : 22 Декабря 2004, 18:35:59 »
2NetFly
Green Kakadu
исправил по требованию трудящихся исходный код. :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
быстрое чтение файла
« Ответ #16 : 22 Декабря 2004, 18:47:22 »
Если операция чтения будет производиться _гораздо_ чаще операции записи, можно писать в начало файла, а не в конец. Тогда можно будет читать построчно только нужное количество строк. Хотя, если в файле будет 30 строк, не думаю, что чтение лишних 20 существенно скажется на производительности. Впрочем, возьми да проверь.
There Is More Than One Way To Do It (c)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #17 : 22 Декабря 2004, 18:49:48 »
Цитировать
Green Kakadu:
может имеет смысл убрать flock?

Что бы гарантировано записи пошли лесом?
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #18 : 22 Декабря 2004, 18:55:13 »
Цитировать
2NetFly:
Если операция чтения будет производиться _гораздо_ чаще операции записи, можно писать в начало файла, а не в конец

1. тогда будет сложнее записывать в файл
2. сейчас когда я добрался к выводу из файла, нашел нужную строчку и пошел читать (как в первом варианте), а так нужно будет в масив загонять.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
быстрое чтение файла
« Ответ #19 : 22 Декабря 2004, 19:04:51 »
Я вот не пойму, у тебя файл отсортирован по id? Описанный мной вариант решение предполагает, что да.
There Is More Than One Way To Do It (c)

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #20 : 22 Декабря 2004, 19:08:04 »
Цитировать
2NetFly:
Я вот не пойму, у тебя файл отсортирован по id? Описанный мной вариант решение предполагает, что да.

да!
при добавлении в него увеличивается на id на 1 :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
быстрое чтение файла
« Ответ #21 : 22 Декабря 2004, 19:15:49 »
Тогда, объясняю в чем разница. Если ты пишешь в конец файла, для того, чтоб вывести записи, чей id больше заданного, тебе, если не считывать во временный массив, необходимо гарантированно прочесть все строки файла. Здесь ты можешь сэкономить разве что на условном выражении: после нахождения первой строки, удовлетворяющей условию, тебе не нужно делать проверку всех оставшихся т.к. заведомо известно, что все они имеют id больше заданного.

Если ты пишешь новые строки в начало файла, то тебе нужно будет считать ровно столько строк, сколько тебе нужно. Т.е. ты считываешь строки до тех пор, пока не встретишь строку, id которой _меньше_ заданного. Время записи в файл действительно увеличивается, поэтому, как я уже писал выше, данный метод имеет смысл использовать только в том случае, если ты читаешь файл _намного_ чаще, чем пишешь в него.
There Is More Than One Way To Do It (c)

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #22 : 22 Декабря 2004, 19:31:59 »
2NetFly
вообще то в чате всегда больше читают чем пишут :))
но у меня другое волнение, что б он при громозкой записи не мешал читать :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
быстрое чтение файла
« Ответ #23 : 23 Декабря 2004, 02:11:12 »
2NetFly
родумал еще раз и переделал :)

$oldid - берем из кука
if ($oldid ne "") {
open (LIST,"chat_list.tmp");
flock(LIST, LOCK_SH);
($id,$time,$fromuser,$touser,$mess)=split(/\\|/, ());
if ($oldid<$id) {
chomp($mess);
print "Set-Cookie: mybabyid=$id; path=/; \\n";
&head;
print "$time $fromuser: $touser, $mess
";
while () {
chomp;
($id,$time,$fromuser,$touser,$mess)=split(/\\|/);
if ($oldid<$id) {
print "$time $fromuser: $touser, $mess
";
}
else { last; }
}
}
else { &head; }
}
else { print "Set-Cookie: mybabyid=0; path=/; \\n"; &head; }

&end;
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28