![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Ну так я ж писал что может у меня либа не та я скачал щас с TORRY.net посмотрел эта деиствительно работает быстрее...
|
|||
|
||||
WaReZMEN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Вот вы лучше раскажите как в lingvo так быстро слова фильтруются??? там же дофига слов... я вот базу сделал из 300000 слов так задержка заметная (около 1-2 сек). (База на Файрберде)
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Это смотря как ты фильтруешь. Запросом все делается быстро. А вообще тут это оффтоп. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Stern87 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 27.11.2007 Где: Украина Репутация: нет Всего: нет |
Я предлагаю конкретизировать вопрос еще сильнее, чтобы не было вариантов типа БД и т.д.
Задача: Есть огромный текстовый файл (он уже существует) размером 400Мб. Есть чёткий запрет "Не загружать весь файл в ОЗУ", по объективным причинам (не все же могут позволить себе закупаться памятью). Вы должны уметь записывать новые строки в конец этого файла, а также уметь читать все строки от самой первой, до последней. Какие есть предложения? Если есть возможность показывайте и код. К примеру, если вы предлагаете использовать TFileStream - покажите код, который бы показывал как бы вы реализовывали эти "умения". Спасибо!! |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Stern87, как же ты не поймешь...
Что бы реализовать это и это в принципе нужно загрузить фесь файл в память. Есле еще второй можно как-то обскакать, загружая построчно или по блокам, то что бы записать что-то в конец, нужно этот конец найти. А что бы найти конец файла, нужно загрузить в память весь файл. А вообще, я считаю, что "текстовый файл размером 400Мб" - это немецкое порно-извращение. Не всегда такую БД увидешь. Ни о какой производительности с такими обьемами и в текстовом формате речь идти не может. Выход у тебя один - переделывать архитектуру программы в сторонну БД. В БД можно запросом выбрать что тебе надо, не загружая все в память. А так же запросом добавлять новые записи, вообще не трогая старые. Так что подумай. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
greenpc |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 29.1.2007 Репутация: нет Всего: нет |
Poseidon,
![]()
кто Вам такое сказал ? Stern87,
Poseidon,
Это сообщение отредактировал(а) greenpc - 22.2.2008, 09:49 |
||||||||||
|
|||||||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Несогласен. Чтобы дописать конец файла ничего не нужно грузить в память, а чтобы иметь произвольный доступ к строкам, совсем не обязательно читать весь файл. Я вот писал специальный модуль для работы с большими XML файлами, парсинг проводиться в 2 этапа. На 1 м этапе произодиться предварительный парсинг, цель которого разобрать общую структуру и создать дерево индексов. Запоминается номер 1го и последнего символа в строке и такая запись сохраняется. Теперь для получения произвольного доступа к записи, сначала идет обращение к этому индексу, потом из файла читается фрагмент начиная с 1го символа и длиной (последний - первый + 1). Но тут я его привести не могу, так как он узкоспециализированный и написан на С++ ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Все это хорошо, но я не думаю что те XML были в 400МБ. Вы только вдумайтесь в это: 400МБ текста... Я вообще не представляю как с таким работать. Его хоть блокнот открывает?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
блокнот такой файл не откроет, он с трудом открывает файлы размеров в несколько мегабайт
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Все зависит от того как работать. Если использовать файлы отображаемые в память вместо файловых потоков и поиск с конца (чтобы искать сначала последних записях), то мож и будет работать. А если говорить вообще о полном проходе по такому файлу с целью поиска строки в нем, то конечно ничего хорошего за адекватное время не выйдет ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Я имел ввиду вот это:
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
mutex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.10.2004 Репутация: нет Всего: 3 |
Замечательная идея. При 400-ти мегах может выручить только индекс-технология баз данных. Как говорит автор - Stern87, файл - суточный, временный и не редактируемый, кроме дозаписи в его конец. Значит такой парсинг надо делать на лету, при созданий строк файла, начиная с ноля часов. Если уж надо минимизировать память, эту структуру надо сбрасывать в отдельный файл, который и будет индексом текстовой БД. Stern87, на Вашем месте, я бы выставил кусок файла и привел пример ключа поиска и ответа на поиск. Кстати, как это за 24 часа удается набрать такой объем данных? Что за болтливый сайт, если не секрет? ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |