Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1338406764
well
2012-05-30 23:39
2013.03.22
CBuilder 6 Отображение немецких символов в TEdit


2-1339072906
простофан
2012-06-07 16:41
2013.03.22
слипание форм в дельфи


2-1327748818
upc
2012-01-28 15:06
2013.03.22
Разрешить ввод в Edit только числовые значения с плавающей точкой


2-1343342978
tggbg
2012-07-27 02:49
2013.03.22
Tlist запись и загрузка из файла


15-1330181581
Pcrepair
2012-02-25 18:53
2013.03.22
TWebBrowser портит ссылки в коде страницы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский