Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Проблема нехватки памяти   Найти похожие ветки 

 
Разведка   (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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.071 c
2-1337627721
vasa777
2012-05-21 23:15
2013.03.22
подкаталоги


15-1352792450
AV
2012-11-13 11:40
2013.03.22
Какая настройка может влиять на разный результат net use?


4-1260273994
Суслик_
2009-12-08 15:06
2013.03.22
Ошибка 1265 и именованные каналы - проблема


6-1266224883
keymaster
2010-02-15 12:08
2013.03.22
Трабл с IDHTTP


15-1336722340
xayam
2012-05-11 11:45
2013.03.22
Шахматы, май 2012: Ананд - Гельфанд