Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПроблема нехватки памяти Найти похожие ветки
← →
Разведка (2012-08-29 20:23) [0]Почему в TStrings не вмещается 350 миллионов строк приблизительно 350 мгб. Выходит сообщение о нехватке памяти. Сколько вообще может вместить в себя TStringList? TStringList.count - тип integer и переменные у класса как минимум integer должны вмещать до 2 млрд.-ов .
← →
Inovet © (2012-08-29 20:26) [1]> [0] Разведка (29.08.12 20:23)
> 350 миллионов строк приблизительно 350 мгб
Каждая строка по 1 байту? Даже по 0 байтов, даже ещё меньше.
← →
Медвежонок Пятачок © (2012-08-29 20:36) [2]Почему в TStrings не вмещается 350 миллионов строк?
Почему в TStrings?
Не в TStrings, а в память
← →
Inovet © (2012-08-29 20:51) [3]И вообще стоит подумать над пересмотром архитектуры - 350 млн строк грузить в память рановато ещё.
← →
Разведка (2012-08-29 20:51) [4]Ну это и имел ввиду просто объяснять не умею
← →
Разведка (2012-08-29 20:54) [5]
> Inovet © (29.08.12 20:51) [3]
Может и рановато, а чем можно заменить TStrings?
← →
Inovet © (2012-08-29 20:55) [6]> [2] Медвежонок Пятачок © (29.08.12 20:36)
> Не в TStrings, а в память
> [0] Разведка (29.08.12 20:23)
> StringList.count - тип integer и переменные у класса как
> минимум integer должны вмещать до 2 млрд.-ов .
Обязан вместить и память при этом не трогать, память нам ещё для другого нужна.
← →
Inovet © (2012-08-29 20:56) [7]> [5] Разведка (29.08.12 20:54)
> Может и рановато, а чем можно заменить TStrings?
А что делать-то надо с этими строками? Может БД, может файл какой.
← →
Разведка (2012-08-29 22:48) [8]
> Inovet © (29.08.12 20:56) [7]
> > [5] Разведка (29.08.12 20:54)> Может и рановато, а чем
> можно заменить TStrings?А что делать-то надо с этими строками?
> Может БД, может файл какой.
Бд - нет не Бд, у меня словари в тхт формате... много словарей и большие , но разные и в них слова дублируются. Нужно убить дубликаты сразу во всех словарях, а маленькие те что останутся объединить в большие словари.
← →
DVM © (2012-08-29 22:51) [9]
> Разведка (29.08.12 22:48) [8]
ну вот загони все в бд, ее средствами обработай данные, потом если нужно обратно в текстовый файл - выгрузи обратно.
← →
Разведка (2012-08-29 23:08) [10]
> DVM © (29.08.12 22:51) [9]
Бд умрет в обработке... обработка в текстовых файлах - это самый быстрый вариант при проверке одного слова в файле с 50 млн. слов уходит 1 сек. если это будет БД то может быть уйдет времени секунд 10-20 ... есть ли смысл? у меня 24 файла по 50 млн. слов -это базовые словари и к ними нужно проверить еще словарей более десятка в сумме 2-3 слов. В общем этакая непосильная задача. Я вообще пытаюсь придумать алгоритм этой задачи раскидав на 8 потоков под AMD 8-соrе FX-8150
← →
DVM © (2012-08-29 23:12) [11]
> Разведка (29.08.12 23:08) [10]
>
> > DVM © (29.08.12 22:51) [9]
>
>
> Бд умрет в обработке...
да ладно, скажи это яндексу гуглу и прочим
> обработка в текстовых файлах - это самый быстрый вариант
> при проверке одного слова в файле с 50 млн. слов уходит
> 1 сек.
поиск в текстовом файле заведомо не может быть быстрее поиска в бд по полю имеющему индекс, поиск в файле - тупой перебор, поиск в бд - в худшем случае бинарный.
← →
Разведка (2012-08-29 23:22) [12]
> DVM © (29.08.12 23:12) [11]
В таком случае какая БД оптимально подошла бы к этой задаче? Я бы хотел что бы учитывалась многоядерность FX-8150 и возможность подключения сразу нескольких клиентов по словарю на клиента на 5 компьютеров. Firebird -?
← →
DVM © (2012-08-29 23:24) [13]
> Firebird -?
вполне подойдет
вообще с привлечением субд задача становится совсем простой, самое долгое в ней - это перегон твоих файлов в бд, займет в зависимости от мощности машины максимум час.
← →
Inovet © (2012-08-29 23:29) [14]> [10] Разведка (29.08.12 23:08)
> Бд умрет в обработке...
Такую пукалку и не заметит, а ты будешь изобретать то, что в БД сделано.
← →
Дмитрий С © (2012-08-29 23:55) [15]Даже Access, думаю, не затупил бы.
← →
Inovet © (2012-08-30 00:01) [16]> [13] DVM © (29.08.12 23:24)
> самое долгое в ней - это перегон твоих файлов в бд
Ну и индексы отключить перед загоном, потом создать.
← →
Разведка (2012-08-30 02:38) [17]
> Дмитрий С © (29.08.12 23:55) [15]
> Даже Access, думаю, не затупил бы.
Сделаю, посмотрим, потестим затем код сброшу на посмотреть.
Да, так бы мне хорошо жить как вы говорите ;-)
← →
картман © (2012-08-30 02:42) [18]
> Разведка (30.08.12 02:38) [17]
>
> Да, так бы мне хорошо жить как вы говорите ;-)
не слушай их, вот: http://www.algolib.narod.ru/Sort/PolyPhaseMerge.html - идеально подходит:)
← →
Anatoly Podgoretsky © (2012-08-30 09:15) [19]Даже если сохранять пустые! строки в массив и то надо 1,4 гигабайта, а если строки хотя бы из одного символа то уже 5 гибабайт. У тебя есть XE2 с виндоус x64 и минимум с 16 гигабайтами? Если нет то и не надейся
← →
Разведка (2012-08-31 01:26) [20]Уже сделал по быстрому на ADO Access по прежнему не высокая сначала была 811 слов/с щас уже упала до 260 слов/с.
Все равно придется многопоточность делать. При моем подсчете при текущей скорости один словарь 50 млн. слов будет обрабатываться 53 часа, а еще 23 таких же словаря и +21. Вот задачка?
← →
Inovet © (2012-08-31 01:27) [21]> [20] Разведка (31.08.12 01:26)
Ты индексы правильные создал?
← →
Разведка (2012-08-31 01:28) [22]
> Anatoly Podgoretsky © (30.08.12 09:15) [19]
> Даже если сохранять пустые! строки в массив и то надо 1,
> 4 гигабайта, а если строки хотя бы из одного символа то
> уже 5 гибабайт. У тебя есть XE2 с виндоус x64 и минимум
> с 16 гигабайтами? Если нет то и не надейся
Уменя FX-8150 +win7 64, а память купить можно.
← →
Разведка (2012-08-31 01:32) [23]
> Inovet © (31.08.12 01:27) [21]
> > [20] Разведка (31.08.12 01:26)Ты индексы правильные
> создал?
Я базу в стандартном accsse создавал, поле поставил индексированное, в коде делфи уже никаких индексов не создавал.
← →
Inovet © (2012-08-31 01:39) [24]> [23] Разведка (31.08.12 01:32)
Значит что-то ты не то делаешь.
← →
Разведка (2012-08-31 01:43) [25]
> Inovet © (31.08.12 01:39) [24]
> > [23] Разведка (31.08.12 01:32)Значит что-то ты не то
> делаешь.
вот он, лежит здесь http://www.fayloobmennik.net/2158253
Выглядит пока как попало, если есть желание можешь глянуть. на сегодня все.
← →
Германн © (2012-08-31 03:14) [26]
> Выглядит пока как попало, если есть желание можешь глянуть.
И ты действительно думаешь, что у кого-то появится желание взглянуть на "как попало"?
← →
Разведка (2012-08-31 07:57) [27]
> Германн © (31.08.12 03:14) [26]
Э, какие претензии? тебе же никто это не впаривает?
← →
Студент (2012-08-31 08:35) [28]Зачем function SetPoint(Real):string; ?
Есть же и регулярки и pos, почему Real а не Integer?
function GetFileSizeFormat опять же есть просто format в стандартной библиотеке.
Exit в самых неожиданных местах бесит. Заполнение через post, хотя там можно было выполнить insert и не задерживать память, пост по сравнению с простым запросом insert больше операций выполняет. Про скорость есть еще предподготовленные запросы в Query которые выполняются моментом, все под запрос уже заточено осталось получить данные. Опять же весь файл грузиться в list вместо последовательного считывания, память сразу отожрет только в путь. ИМХО тут не знание SQL и БД.
← →
Студент (2012-08-31 08:36) [29]зы
unit2 потерялся, от него только dcu.
← →
Inovet © (2012-08-31 09:45) [30]> [28] Студент (31.08.12 08:35)
Я так и предполагал. Загнал в базу, а работает как и раньше с файлом.
В БД предложили для чего? Чтобы её средствами обработать.
← →
Inovet © (2012-08-31 10:05) [31]Вот на кой грузить в стринг лист весь файл, чтобы потом по одной строчке добавлять в таблицу? Все что, читать из файла разучились/неумеют?
Мильон раз писалось - не пользуйтесь TADOTable, всем пофиг. И методы соответсвующие. Про SQL не слышал никогда?
← →
Студент (2012-08-31 10:07) [32]Inovet © (31.08.12 09:45) [30]
Пытается загнать все в БД, но как то странно. Кроме того SQL и использование Query построено странно. Что со структурой БД вообще не понятно. Про считывание, это list.loadfromfile у него обьемы бешанные, но все равно файл целиком грузит.
← →
Inovet © (2012-08-31 10:19) [33]Вот поэтому 57 (или сколь там) суток считает.
SELECT * FROM wordstabl WHERE words = :SFind
Дубли надо в запросе убирать, а не запрос на каждое слово.
← →
stas © (2012-08-31 11:19) [34]Разведка (31.08.12 01:28) [22]
Вот пристал со своим FX-8150 )
возьми MSSQL там эту задачу можно решить с помощью TSQL без программы на Delphi.
← →
Anatoly Podgoretsky © (2012-08-31 11:49) [35]> stas (31.08.2012 11:19:34) [34]
И в Дельфи с эту задачу можно решить с помощью TSQL без программы на
SSMS/SSIS. Единственная разница - не сможет сделать ряд ошибок.
← →
Студент (2012-08-31 12:38) [36]stas © (31.08.12 11:19) [34]
bash + grep
← →
sniknik © (2012-08-31 13:33) [37]> При моем подсчете при текущей скорости один словарь 50 млн. слов будет обрабатываться 53 часа, а еще 23 таких же словаря и +21. Вот задачка?
офигеть, при таком подсчете/реализации и всего 53 часа? в мелкософте гении!
+
при 50 тыс в базе, больше тысячи дублей, т.е. > 2% "мусора", для 50 млн. думаю процентное отношение вырастет.
← →
Дмитрий С © (2012-08-31 13:38) [38]А что нужно, отсортировать 350 млн строк?
← →
Sha © (2012-08-31 13:46) [39]> Разведка
Сколько уникальных значений должно остаться в конце концов?
Поместятся ли эти уникальные значения в ОП?
Зачем надо куда-то грузить?
← →
Павиа (2012-08-31 15:22) [40]Хе-ХЕ. Задача на сортировку 22 файлов с 50 миллионов слов с индексами и их слияния и последующее удаление дублей.
На линуксе можно очень быстро сделать за час. Или на почти любой БД.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.061 c