Автор Тема: Открытие DB во flatfile и поиск! С условиями!  (Прочитано 10294 раз)

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

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Товарищи нужна помощь!
Помогите найти оптимальный вариант!

--- у нас есть текстовый файл, примерно:
   123 \\t dfdsf \\t fdgsdfg \\t dfsgfdg \\t dfgs\\n (строка около 20кб)
   .....................
   .........

-- около 100000 записей, 123 уникальный ID, не обязательно последовательный ведь могут взять и удалить например 456 и останется 455 и 457 :o)

-- суть такова нужно искать в этом файле строку, по определённому ID! не по номеру строки, а именно по ID(в самой строке)!

-- условия, использование памяти не более 15мб(процесс)+13мб сам Перл = 28мб! На выполнение всей программы не более 10с!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Открытие DB во flatfile и поиск! С условиями!
« Ответ #1 : 29 Июля 2004, 08:45:27 »
KiLLjoY aka SerZH

IMHO самый оптимальный вариант: использовать SQL БД, например MySQL.

Иначе: открываешь файл, считываешь построчно, проверяешь полученную строку. Памяти съест немного, но со временем можно не уложиться.

Оффлайн КшЫуфксрук

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://risearch.org/
Открытие DB во flatfile и поиск! С условиями!
« Ответ #2 : 29 Июля 2004, 11:12:21 »
Как часто изменяется файл? Если достаточно редко, то проще всего сделать дополнительный индекс на ID в отдельном файле. Поиск будет практически мгновенным.

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #3 : 29 Июля 2004, 13:58:14 »
Нужен другой выход!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Открытие DB во flatfile и поиск! С условиями!
« Ответ #4 : 29 Июля 2004, 14:45:27 »
KiLLjoY aka SerZH
Цитировать
Нужен другой выход!

На такие высказывания, у меня вопрос возникает по поводу того кому нужен этот выход.

Форум - не зал ожидания манны небесной.

Мотивируй свой отказ использования моих предложений...

Оффлайн Billi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #5 : 29 Июля 2004, 14:51:18 »
Это не выполнимо вроде :)
100k*20k=2000kk = тоесть 2 гига читаться с винта они будут более 10с :)
а если держать это в оперативе ты по памяти не уложишся в 28 мб :)
но если строка фиксированого размера, то все не такуж и плохо
индекс

id
смещение относительно начала файла

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

Оффлайн КшЫуфксрук

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://risearch.org/
Открытие DB во flatfile и поиск! С условиями!
« Ответ #6 : 29 Июля 2004, 17:56:58 »
Если все ID более менее упорядочены (то есть они даются последовательно и значит при 100к записей вряд ли превысят 1000000), то проблем вообще нет. Для каждого ID в отдельном файле записываем смещение этой записи в файле с данными (по четыре байта на ID). При чтении нужно будет сделать всего лишь два seek\'а. Никаких ограничений на размер записи нет. Работает практически мгновенно.

Если ID могут быть очень большими, тогда нужно немного усложнить схему. Но все равно за полчаса можно сделать.

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #7 : 02 Августа 2004, 03:35:26 »
Нужно использование Процессов + открытие файла не сразу целиком, а часиями! Если файл будет 130 метров, сервер просто свалится! И вырубит мой процесс(программу) нафиг!

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #8 : 02 Августа 2004, 03:37:18 »
Да, файл не сортирован, изменяется часто! Таку что вариант с индексом отпадает!

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Открытие DB во flatfile и поиск! С условиями!
« Ответ #9 : 02 Августа 2004, 08:29:24 »
KiLLjoY aka SerZH колись давай
1. строка около 20 кб, плюс/минус сколько?
2. файл не сортирован, но ID таки идут последовательно, хотя и с "дырками" (455,456,458)?
3. файл часто изменяется. Как? Чем? А не лежит ли где то рядом файлик с соответствиями индкс-позиция?

[OFF]Ну и риторические вопросы
У тебя то самого есть какие мысли?
А о чем раньше думали, когда не было 100000 по 20к[/OFF]
Все болезни от нервов, только сифилис от удовольствия

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #10 : 02 Августа 2004, 12:31:59 »
1) 20 кб... хм...  |+бесконечность | -20кб |
2) Последовательность любая.
3)Я же сказал индекс отпадает!

P.S.: Я же уже написал что нужно каким-то неизвестным образом использовать!
P.S.S.: В коде должен быть собственный контроль времени! Во как!

Не забываем также про 10сек и 18 мегабайт на выполнение!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Открытие DB во flatfile и поиск! С условиями!
« Ответ #11 : 02 Августа 2004, 12:58:08 »
KiLLjoY aka SerZH ты предлагаешь за тебя написать?
The documentations is your friend

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #12 : 02 Августа 2004, 13:02:47 »
Нет я жду совета... как бы мне это использовать!

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Открытие DB во flatfile и поиск! С условиями!
« Ответ #13 : 02 Августа 2004, 13:03:26 »
Хотя бы рабочий алгоритм!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Открытие DB во flatfile и поиск! С условиями!
« Ответ #14 : 02 Августа 2004, 13:15:20 »
Цитировать
KiLLjoY aka SerZH:
Нужно использование Процессов

perldoc threads
Цитировать
KiLLjoY aka SerZH:
открытие файла не сразу целиком, а часиями!

perldoc -f seek
The documentations is your friend

 

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