|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3.
эти срочки выключают мой ноут без предупреждения, в собтиях- неожиданное отключение и все. В nproc - порядка по 250 000 inlinks и outlinks. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 18:54 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, на что, на что, на быдлокод и говнореализацию, вот на что. Переписывать надо, фигли. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 19:48 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos Код: c# 1. 2. 3.
эти срочки выключают мой ноут без предупреждения, в собтиях- неожиданное отключение и все. В nproc - порядка по 250 000 inlinks и outlinks. На ламера, который не знает как готовить linq nproc = nTreeNodeDicSpecifId[specificid].ToList(); // ToList совершенно не нужен. Без него не будет сотен тысяч добавление в list c выделением памяти. На таких объемах - это полные тормоза List<Guid> links = nproc.SelectMany(n => n.proc.proc_outlink).Select(s => s.linkid).Distinct().ToList(); // аналогично. За это нужно бить линейкой по рукам Вместо (n.proc.proc_inlink.Count() == 0) должен быть (!n.proc.proc_inlink.Any()) || заменить на Union etc etc ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 19:50 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
то есть вы думаете что объем вычислений вырубает комп? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:15 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosто есть вы думаете что объем вычислений вырубает комп?Да. Перегревается. Радиаторы пропылесосить надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:24 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Алексей К, точно, я так и думал даже машина говнокод не принимает блин ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:28 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Сахват, ты жжешь однако. Пиши лучше на датасета, софт будет безопаснее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:50 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
МСУ, lя так и пишу кругом форичы а тут решил посмотреть как скрость линк отличается от форичов я даже не знал что там есть Any и т.д. их оказывается дофига и больше ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:53 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosМСУ, lя так и пишу кругом форичы а тут решил посмотреть как скрость линк отличается от форичов я даже не знал что там есть Any и т.д. их оказывается дофига и больше ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:55 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosАлексей К, точно, я так и думал даже машина говнокод не принимает блин А это ты, Сахават, решил linq применить ;-) На таких объемах нужна оптимизация и понимание принципов linq. Посмотри оператор yield и для чего он нужен , тк весь linq на нем ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:56 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Сахават, так глядишь скоро и ORM понравится, когда начнешь "копать" ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 20:57 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
все эти Any, Union, var, IEnumerable вместо List нифига не дали в плане скорости комп так и валится фигня этот линк как и думал дармовщины нет хотелось большой кусок кода - где каждый терминальный узел помечается при создании графа, при уничтожении терминальных узлов назначаются другие, ведутся индексы по узлам и т.д. которая работает пулей), написать красивый кот в одну стоочку ;) фигушки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 21:03 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
СЛ выручает оптимизатор и индексы со статистикой, а линк инвали на голову ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 21:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
счас купнусь и почитаю что за елда ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 21:12 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVaViPRosАлексей К, точно, я так и думал даже машина говнокод не принимает блин А это ты, Сахават, решил linq применить ;-) На таких объемах нужна оптимизация и понимание принципов linq. Посмотри оператор yield и для чего он нужен , тк весь linq на нем С Листами ты не прав оказался, я интутивно подумал, что лучше промежуточные вычисления делать один раз и зафиксировать без это линк каждый раз запускает елду для вложенного запроса ФИГНЯ или я че то не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 21:44 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, как то тестировал Linq и for между собой. какова цена более лёгкого написания кода сравнивал по скорости на простом запросе типа select * from where a1<... and a2<... ну типа : Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
и сравнивал тот же массив , но без линка и 2 отдельных массива int размер массивов 9.500.000 элементов 1)для массива zzz[] For Class Total time =0,122006975 2)два целочисленных массива For 2array Total time =0,084504825 3)тоже самое , но в с++ c++ Total time =0,053003025 4) LINQ Total time =0,2920167 Результат For/Linq 3,37425165207618 linq/cpp 5,26635631052809 c#/cpp 1,56074793866892 обычный массив zzz в 2.3 раза быстрее линка ну а с++ аж в 5 раз. и это на простом select ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:09 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
собсна тест прога ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:10 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, ну я и говорю что говно, а при больших данных воще не пашет а про Лист Сева наврал все промежуточные расчет надо зафиксировать ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:11 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
а на днях попался с TryGetValue кругом рекомендации, типа это говно быстрее, чем Contains и присовение вранье полное GC убивает все рекомендации на корню эт я типа решил прогу пересмотреть и оптимизировать код с помощью нововведений нах ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:19 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
вывод (промежутоное мое мнение (С)) линк важно там, где комп не пылесосили года 3, так как линк не дает процу работать свыше 90% мощности :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:22 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosну я и говорю что говно ну на маленьких размерах ещё ничё так. хотя linq join это песня. на скорость не тестировал, но думаю там ещё веселее будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:22 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
skyANAViPRos, на что, на что, на быдлокод и говнореализацию, вот на что. Переписывать надо, фигли. насчет быдлокод - согласен а реализаций - наверное штук 10, начиная от чисто СКЛ и кончая от чисто за счет структур и индексов в памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:23 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, я думал самое говно в с# - рекурсии, линк превзошел рекурсию ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:24 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, Просто, у linq своя ниша. Какая у вас СУБД? А что вы делаете с графом? В Oracle есть часть в Oracle Spatial, называется Network Data Model, PL/SQL и Java API для обработки данных. Там есть всякие реализованные алгоритмы типа поиск минимального пути на основе весов ребер/вершин и т. п.. Чем примечательно Java API, для него можно в СУБД после заливки сети создать разбиение всего графа на куски (хранятся в lob'ах) и это Java API походу работы алгоритма подгружает прозрачн для программиста только необходимые куски за один присест (в случае есл разбиение было создано). Может посмотреть в сторону такого направления? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:40 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosbeg-in-er, ну я и говорю что говно, а при больших данных воще не пашет а про Лист Сева наврал все промежуточные расчет надо зафиксировать ViPros, я не мсу. ToList перед Select это всего навсего: - создание, выделение памяти под List - совершенно лишний проход всего списка, тк последующий select делает тоже самое - создание экземпляра класса с выделением памяти и добавление его в список, а это влечет большие мультики с расширением границ массива. Если еще стоит where то разница будет весьма существенна. Сделай простую проверку и сравни по быстродействию и памяти два варианта var list = Enumerable.Range(1, 1000000).ToList(); var res = list.First(); и var res = var list = Enumerable.Range(1, 1000000); var res = list.First(); После этого поэкспериментируй с where и другими операторами. Сразу почувствуешь разницу, тк во втором случае не происходит создания всего списка в 1000К, а после отложенного выполнения делается только один проход и сразу дается результат ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:45 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, насчет отложенного я все понял, не зря читал про енумератор и yield ж я говорю, что если во вложенном вопросе будет var, ienumerable и т.д., типа a.where(n => b.select(i=> b.id).contains(a.id)) то для Каждого элемента из а будет срабатывать b.select(i=> b.id) а если сделать a r = b.select(i=> b.id).ToList(), то b.select(i=> b.id) будет один раз это вдно прямо в дебагере и по скорости обработки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 22:55 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord BritishViPRos, Просто, у linq своя ниша. Какая у вас СУБД? А что вы делаете с графом? В Oracle есть часть в Oracle Spatial, называется Network Data Model, PL/SQL и Java API для обработки данных. Там есть всякие реализованные алгоритмы типа поиск минимального пути на основе весов ребер/вершин и т. п.. Чем примечательно Java API, для него можно в СУБД после заливки сети создать разбиение всего графа на куски (хранятся в lob'ах) и это Java API походу работы алгоритма подгружает прозрачн для программиста только необходимые куски за один присест (в случае есл разбиение было создано). Может посмотреть в сторону такого направления? граф у меня гипер (каждый узел является графом) СУБД МССКЛ самая большая моя проблема - запись в БД допустим на обработку (сложный алгоритм создание) графа до 1000 000 узлов на обычном десктопе приходится 1 минута, а запись в БД занимает на порядок больше времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:03 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, насчет отложенного я все понял, не зря читал про енумератор и yield ж я говорю, что если во вложенном вопросе будет var, ienumerable и т.д., типа a.where(n => b.select(i=> b.id).contains(a.id)) то для Каждого элемента из а будет срабатывать b.select(i=> b.id) а если сделать a r = b.select(i=> b.id).ToList(), то b.select(i=> b.id) будет один раз это вдно прямо в дебагере и по скорости обработки если нужны несколько проходов, то есть специально обученные техники для этого. ЗЫ Сдается мне, что a.where(n => b.select(i=> b.id).contains(a.id)) можно заменить на простой join ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, т.е все как было так и есть скорость достигается за счет памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, т.е все как было так и есть скорость достигается за счет памяти Естественно, для net - минимизация выделения памяти - первое, что нужно делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:06 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, ну если хорошо владеть и изначально настроится на линк, наверное можно добиться результата, применяя то что надо, там где надо ну я тут решил просто выделить терминальные узлы графа одним махом - не вышло:( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
зы если у тебя большие массивы данных, то посмотри PLINQ. В некоторых моментах можно существенно поднять быстродействие за счет распараллеливания. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, я пробовал в одном месте (когда перебираю альтернтивные процессоы для процесса), там Parallel дал выигрыш и то махался пока нашел, что количество потоков должно быть = количеству ядер +- 2, а не то (особенно если больше) полный застой ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:10 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
у меня громадные массивы сотни гигабайт для завода генерится при расчете портфеля :( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:11 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, А как вы пишите в базу новый созданный граф? insert commit; insert commit; insert commit; или insert insert insert commit; ? Посмотрите в сторону средств СУБД, которые минуют все абстракции СУБД и льют все напрямую. Я увы не знаю MS SQL, конкретики не будет :(. В Oracle, как вариант, скидывать в csv ваш граф и грузить с помощью низкоуровневого sqlldr, скормив ему csv (у него есть масса настроек). Также есть API, которое можно пользовать из своего ПО, его sqlldr использует. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:23 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
+ можно рассмотреть также применимость nologging, опции параллельной заливки (чтобы redo на инсертах не генерилось). и еще посмотреть что с I/O data-файлов и т. д.. --- наверняка аналогичное низкоуровневое и т. п. есть у ms sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:27 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, есть несколько вариантов записи 1. BulkCopy 2. Пользовательский тип 3. Просто Insert batchsize можно менять как угодно во всех случаях счас самым удачным является 2 ну тут дело в том что эти данные тут же должны быть доступны для обработки это запись-чтение тут же по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер) (ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:29 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosу меня громадные массивы сотни гигабайт для завода генерится при расчете портфеля :( Тогда тебе нужны спецтехники для борьбы с ними. Опиши, что нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:30 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, есть несколько вариантов записи 1. BulkCopy 2. Пользовательский тип 3. Просто Insert batchsize можно менять как угодно во всех случаях счас самым удачным является 2 ну тут дело в том что эти данные тут же должны быть доступны для обработки это запись-чтение тут же по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер) (ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Для цепочек параллельных вычислений сейчас появилась весьма интересная штучка - dataflow ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:32 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, ну купили какой то кластер - 64 ядра, терабайты памяти и т.д. счас мне выделили 12 ядер и собственный рейд дисковая очередь упала до 5 :):):) (на десктопе 50) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:32 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, а параллелитьособо нечегона графе смотри - граф, это техпроцессы, узел графа (тоже граф) граф работы процессоров (людей машин интсрумента,..) так как процессоов мало и они могут передвигаться по узлам графа (собственный граф разрешенных путей с весами) параллелить нечего, нет разбиений (если токо вручную через полтитки перемещений разбить, но это возможно когда 10 -15 мобильных процессоов, а на заводе их тыщами) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:35 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Посмотри streaminsight ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ой, пардон "...(чтобы redo на инсертах не генерилось)..." относилось к "... также применимость nologging ..." также можно псмотреть вариант сперенаправлением ввода вывода (sqlldr выполнена как все правильные unix style command) чтобы предварительно в csv не писать и если голое api не хочется колупать. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, про какой то dryad читал, но нет там демо и кажется сиильно платный почитал erlang - замахаешься кониги делать wcf лучше подходит кажется ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:37 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, все что может не писать в лог изучил и применил, толку маловато ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:38 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, все что может не писать в лог изучил и применил, толку маловато Вам нужен хороший DBA по MS SQL, нужно делать трассировки и смотреть где узкие места, а так пальцем в небо тыкать - дело удачи. PS. Дело в том, что, например приминительно к Oracle заливка сотни гигов вполне себе нормально переваривается через sqlldr. Шуршит только пятки сверкают :). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:44 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, про какой то dryad читал, но нет там демо и кажется сиильно платный почитал erlang - замахаешься кониги делать wcf лучше подходит кажется да, dryad платный, бета и на него уже забили. будет haloop. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:47 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVaViPRos(ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) Посмотри streaminsight посмотрел, это наверное хорошо для мониторинга (асутп и тд.), а для планирования врядь ли ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:48 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, ну что такое - шуршит? скоко надо что бы инсертить 50 000 000 записей? (по кб допустим) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:49 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, еще вопрос к вам. с целью уточнить мы об одном и том же говорим ии нет? 1) вот вы создали граф на 100 gb. вам надо его записать, чтобы он стал доступен другим. здесь прокатят низкоуровневые схемы. параллелить можно до безобразия лишь бы корзина с дисками тянула. 2) разные системы работуют с графом, изменяя состояния узлов/ребер? тут же вроде не должно возникать обьемной записи на диск. в каком пункте у вас затык с записью? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:50 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, ну вот на новой машине влоб не получился, теперь буду эксперминнтровать - по контроллерам, дискам, партиции и т.д. рапсараллелить, но это уже другая песня (значит фиг продашь систему на фабрику какую нить, мы за это говно отдали 230 тыщ зеленых) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2013, 23:53 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, ну блин это опроцессный ПЛАН завода внешная и внутренная логистика, производственные процессы процессы перемещения мобильных процессорв(люди,инструмент, оснастка,..) - вощем все что на заводе шуршит по хорошему время (пере)счета всей этой байды должна быть меньше длительности самого короткого процесса (ну тут можно кое где сделать локальные пересчеты, но не всегда) этой инфой работают снаюженцы сбытовики бухи хуйухи 0 все ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:00 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, ну вот на новой машине влоб не получился, теперь буду эксперминнтровать - по контроллерам, дискам, партиции и т.д. рапсараллелить, но это уже другая песня (значит фиг продашь систему на фабрику какую нить, мы за это говно отдали 230 тыщ зеленых) Опиши задачу подробней. Почему нужно писать все сразу на диск? Есть варианты с распределенным вычислением, расчеты на подобных объемах нужно параллелить и держать в памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:01 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, скоко надо что бы инсертить 50 000 000 записей? (по кб допустим) быстро вставить 50Гб это конечно не хухры-мухры. при такой задаче базы данных общего назначения, типа mssql etc , мало приспособлены. вам просто нужно специализированное ПО. может даж какое-то своё. компания то большая. и в рамках этого ПО уже можно достичь скорости , сооизмеримой со скоростью записи в SDD (или что там в RAID стоит у вас) а уж скуль использовать токма как надёжное резервное хранение. Хотя полагаю, что такая мысль вам в голову приходила. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, задача такова - составить пооперационный оптимальный план работ (кто когда что где скоко,.. должен делать) и мониторить этот план в реалтайме с визуализацией на разных уровнях агрегации (матсер или кладовщик видятт РМ или паллету, а директор цеха и склады и т.д.) сам граф невозможно строить параллельно, а вот параллельно строить разные графы (с применением разных политик управленческих) можно данные находятся у владельцев данных (технологий и ресурсов) вот приходит заказ к сбытовику он делает широковещательный запрос кто могет? доустим тут 2 владельца ТП (конечной сборки) - они окликаются в свою очнредь они выставялют свои заказы (внутри тоже РМ являются могут являтся) отдельными владельцами) кто то откликается и т.д. у каждого владельца(заказчика) есть оценщик критериальный в конце концов последние звена высталяют свои времена и/затраты , оценщики заказичков оценивают и выбирают лучщего поставщика и так до сбыта и клиента выбранный (меченый оценщиками) граф становтся планом а потом мониторинг и пересчет с учетом неподвижных-реперных плановых точек (внешних по поставкам и закупкам и финансам и кредитам) вот ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:11 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, угу просто это следующий этап счас птыаемся отшлифовать то что есть ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:12 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosbeg-in-er, просто это следующий этап мдя, Акуенная задача. ээхх.( сглотнул слюну ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:17 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, приходи работать, понравишься - возьмем ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:21 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosbeg-in-er, приходи работать, понравишься - возьмем Цеж москва?, а мы провинциалы питерские. московская рана от первого приезда ещё не зажила. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:25 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, да я сам гастарбайтер был у меня чек из питера, офгенный был чек просто нам вдвоем не место :( ушел через 1.5 гда ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:27 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, Ок, как доберусь до первопрестольной , можно и встретится. уж больно маштабно всё выглядит. да и наработки кой какие есть в этом направлении. жалко их под сукном держать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:38 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, ок ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:41 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, ну что такое - шуршит? скоко надо что бы инсертить 50 000 000 записей? (по кб допустим) Та Вверху спрашивал не просто так. Есть большая разница между разовой заливкой и оперативной обработкой этого вашего графа. Залить сотни гигов не проблема, sqlldr может писать почти напрямую (минуя все этапы, которые проходит insert) да еще и параллельно. Вы полностью можете загрузить полезной нагрузкой вашу дисковую систему . В таблице куда льете можно создать партиции их раскидать по "дискам". Грохните индексы перед заливкой, потом создадите. И т. п.. У вас смотрю железо хорошее присутствует, так что успехов. Что касается обработки уже залитого графа посмотрите вверху я приводил пример, разбейте граф на кусочки, и подгружайте по мере необходимости, кешируйте горячие куски, а сохраняйте только узменившиеся кусочки. Гуглите oracle ndm lod api идею можно подсмотреть. Конечно, если у вас текущая реализация пытается сохранить 50 gb на каждый чих - это косяк архитектурный. Пса. Пишу с тела не многословен. Сори ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:47 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, Задача интересная у вас, приглашайте годного ДБА, он вас короткой дорогой приведет, а то будут сплошные велосипеды. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 00:53 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, автор Грохните индексы перед заливкой, хорошо построенный индекс ( я не про скл говорю, а вообще ) делается настолько быстро, что затраты на его создание ничтожны. как это в mssql делается незнаю. гигабайты не заливал. но там всё много медленее. а вот индекс строил. получилось быстрее , чем в Dictionary. а он очень шустрый. и по памяти в разы меньше. но это так. офтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 01:16 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, Я тоже не про мсскл, про оракле. Предлагаю просто автору искать альтернативы в его субд... админы решают. Тут вот рассказываетсяхорошее промо, но лучше читать докуме http://www.dba-oracle.com/tips_lldr_loader.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 01:21 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beginner, по поводу скорости созданияиндекса в субд (не поддержка в конкурентной среде, а создание) там есть масса опций, которые удовлетворять огромное число сценариев по скорости. так что говорить, что где-то больше/меньше, быстрее/медленнее не совсем корректно. просто поставить субд и визардом все сделать - это не тест, вы же понимаете. Нужно прочитать толмкды, переварить и. Бой. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 01:27 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosSeVa, задача такова - составить пооперационный оптимальный план работ (кто когда что где скоко,.. должен делать) и мониторить этот план в реалтайме с визуализацией на разных уровнях агрегации (матсер или кладовщик видятт РМ или паллету, а директор цеха и склады и т.д.) сам граф невозможно строить параллельно, а вот параллельно строить разные графы (с применением разных политик управленческих) можно данные находятся у владельцев данных (технологий и ресурсов) вот приходит заказ к сбытовику он делает широковещательный запрос кто могет? доустим тут 2 владельца ТП (конечной сборки) - они окликаются в свою очнредь они выставялют свои заказы (внутри тоже РМ являются могут являтся) отдельными владельцами) кто то откликается и т.д. у каждого владельца(заказчика) есть оценщик критериальный в конце концов последние звена высталяют свои времена и/затраты , оценщики заказичков оценивают и выбирают лучщего поставщика и так до сбыта и клиента выбранный (меченый оценщиками) граф становтся планом а потом мониторинг и пересчет с учетом неподвижных-реперных плановых точек (внешних по поставкам и закупкам и финансам и кредитам) вот Интересная задача. Здесь не DBA нужен, а совсем другие подходы. Сахават, не возражаешь, если я черкну тебе на почту? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 09:30 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVa, Напиши, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 10:27 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosLord British, ну что такое - шуршит? скоко надо что бы инсертить 50 000 000 записей? (по кб допустим) Сделал тебе немного конкретики. Обычный домашний комп, старый как моя тоска 2007 года, памяти 4Gb noname DDRII, CPU Core 2 Duo 2.13 Ghz. Винт1: На нем лежит Fixed Width CSV размером 1.6 Gb (60 млн записей). Винт старый (обычный PC-шный SATAII 2007 года выпуска). Задрота вобщем. Винт2: Оракловая табличка получатель лежит на другом винте (обычном PC-шном SATAII 2010 года выпуска). На этот же винт установлен сам Oracle и OS. CSV файл 1.6 Gb с Винт1 на Винт2 копируется командой copy за 41 сек. Содержимое этого же файла загружается в БД за 45 сек. Потеря не большая по сравнению с обычным копированием, потому что оно просто пишет в datafiles минуя все. Вот и прикидывай с учетом рейдов, партишининга и т. п.. [spoiler proof] Код: sql 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
[spoiler] ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2013, 23:08 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, Да ладно, это не только в Оракл подобные фишки. Массовый импорт и экспорт данных (SQL Server) И ув. SeVa правильно заметил, что а) массовые ToList() - это зло в чистом виде б) запрос можно переписать с использованием join-ов Не понимаю плача по производительности LINQ. Я воспринимаю его как некий аналог SQL. Естественно, что LINQ будет работать медленее, чем ручная реализация правильных алгоритмов. Просто написание запросов на нем декларативно имеет свои плюсы: а) гораздо быстрее писать запрос, чем ручная реализация, б) меньше потенциальных багов из-за косяков ручной реализации в) не факт, что выбранный программером алгоритм будет быстрее использованного в LINQ. Да, и ставить в вину LINQ то, что им нужно уметь пользоваться, вызывает некое недоумение - разве есть инструменты, которые можно использовать наилучшим образом без понимания принципов его работы? По сабжу как-то мало конкретики для меня, тк предметной областью не увлекался. Но понятно, что если нужно анализировать графы на таких объемах, то загон данных на MS SQL и расчет на SQL будут тяжеловесными (хотя критерии скорости обработки не приведены). В идеале - это InMemory Database System (Oracle TimesTen, McObject ExtremeDB). SQLite в этом режиме для 50 Гб не тестил, поэтому советовать не могу. Возможно, перед тем, как кидаться в бой, нужно подучить теорию графов и использовать математический аппарат для нужного алгоритма. Я не к тому, что сомневаюсь в квалификации, а к тому, что хороший математик всегда может предложить как минимум не худший алгоритм анализа/обхода графов и деревьев, чем просто программист ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 10:58 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVaДля цепочек параллельных вычислений сейчас появилась весьма интересная штучка - dataflow Можете ссылку привести на внятное описание? Хочу почитать, а по dataflow слишком много мусора в поиске вываливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:00 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
arm, к чему этот боян, пиочитайте вверху. а заливку автору показал не чтобы он ораклю себе ставил, а нашел аналог у себе в мсскл, потому, что те пути что он использовал медленные. привел бы название способа со скоростью заливки ~ копирование файла, автору может полегчало бы. на счет 50гб какая там инмеморидб, реализация кривая, он и сам об этом сказал вверху гдето. мы оптимальный пути на неск сотнях гб искали транспортной сети. и ниче никакой инмемори не понадобилось. нагородят реализацию на каждый чих сохраняющую 50гб графа, а потом думают, что у них случился фейсбук и инмеморинужна. какая там матиматика, все уже придумано до нас (с) не помню кто. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:33 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
вероятно bcp ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:40 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord Britisharm, к чему этот боян, пиочитайте вверху. а заливку автору показал не чтобы он ораклю себе ставил, а нашел аналог у себе в мсскл, потому, что те пути что он использовал медленные. привел бы название способа со скоростью заливки ~ копирование файла, автору может полегчало бы. 1) я весь топик перечитал. 2) привел названия по ссылке. могу уточнить - Bulk insert. Lord Britishреализация кривая Это всего лишь мнение. Которое может быть как правильным, так и нет. Ведь некривой реализации так и не было приведено. Lord Britishмы оптимальный пути на неск сотнях гб искали транспортной сети. и ниче никакой инмемори не понадобилось Так не спорю. Говорю же, критерии скорости поиска не были указаны. Просто по факту обращение ко всем 50 Гб по любому приведет к неоднократному физическому чтению с диска, что само по себе тормоза. Вот если будет понятно, что несмотря на объемы сами запросы простые и юзаются правильные индексы, то этот минус нивелируется. Lord Britishнагородят реализацию на каждый чих сохраняющую 50гб графа Я не увидел в обсуждении топика того факта, что все 50 Гб каждый раз скидываются в БД. Это лишь ваши предположения. Или я невнимательный, и упустил констатацию этого факта. А насчет математики - я по отрывочному текстовому описанию пока не понял, что именно делать в этом графе. Поэтому какая там математика - не представляю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 11:47 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, " ......Просто по факту обращение ко всем 50 Гб по любому приведет к неоднократному физическому чтению с диска, что само по себе тормоза. Вот если будет понятно, что несмотря на объемы сами запросы простые и юзаются правильные индексы, то этот минус нивелируется..... " если бы он разбил на кусочки графа, не понадобилось бы при чтении всего графа, весь граф точно никому не нужен. кроме того у субд есть свой буфферный кеш, физических чтений с течением времени может и не случиться. полкрутить размер только. кроме того, раз уж тема об том, что есть, то упомянутые вами индексы при чтении всего графа или огромных его кусков не нужны, скорее всего не смотря на индексы cbo предпочтет фулскан. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:06 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, ViPRosLord British, есть несколько вариантов записи 1. BulkCopy 2. Пользовательский тип 3. Просто Insert batchsize можно менять как угодно во всех случаях счас самым удачным является 2 ну тут дело в том что эти данные тут же должны быть доступны для обработки это запись-чтение тут же по хорошему воще должна быть запись одиночка (это воще убивает СКЛ сервер) (ну типа заблокировал процессорпроцесса на какой то отрезок и эта инфа сразу должна быть доступна другим потокам - возможо на другом компе запущенным) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:14 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, Ну так смысл копировать, я ж не вам это отписал, а указал Lord British на аналогичные механизмы в MS SQL А вам уже вопрос, чтобы понимать: 50 Гб - это постоянно приходящие данные? Ежедневные? Или объем меняющихся данных сильно меньше, а 50 Гб в основном - константные или нечасто обновляемые данные? В общем, интересует объем изменяемых данных и периодичность этих изменений. Lord British, Я в курсе. Но решать, пригоден ли классический СУБД для данной задачи и какая ему нужна для этого структура БД, можно после более подробного описания проблемы и входных/выходных данных ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:33 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, "... , а указал Lord British на аналогичные механизмы в MS SQL..." а мне то зачем? я с мсскл не работаю. и он это пробовал, сказал, что скорость записи не очень. из того, что я почитал по твоей ссылке, ближе к истине утилита bcp, можно потестить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:50 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, сейчас каждая субд далека от классической, в том числе и содержат готовые спец структуры/схемы данных и утилиты по обработки/тюнингу этого всего, классическими остаются только знания программистов о них ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:55 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord Britishа мне то зачем? я с мсскл не работаю Именно поэтому :-) Вы сказали, что не работаете, я и привел аналог - для инфо, можно сказать. Lord Britishближе к истине утилита bcp Просто для загрузки - да. Но как понял, ему еще и из некой программы на .Net нужен доступ к этим данным. Тогда удобнее своя программная реализация этой загрузки. Например, SqlBulkCopy Если же это частая загрузка данных просто на сервер, то Bulk Insert через джобы ИМХО интереснее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:56 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79ViPRos, Ну так смысл копировать, я ж не вам это отписал, а указал Lord British на аналогичные механизмы в MS SQL А вам уже вопрос, чтобы понимать: 50 Гб - это постоянно приходящие данные? Ежедневные? Или объем меняющихся данных сильно меньше, а 50 Гб в основном - константные или нечасто обновляемые данные? В общем, интересует объем изменяемых данных и периодичность этих изменений. эти данные генерируются алгоритмом расчета расписания за один проход (т.е. по одному набору политик-эвристик), т.е. это просто новое расписание люди хотят считать очень быстро - что если.... и получить расписание и рекомендации по реструктуризации ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:57 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosэти данные генерируются алгоритмом расчета расписания за один проход За один проход сразу 50 Гб новых данных????????? Э... откуда столько? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 12:59 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, ну я же написал - это детальное расписание всех ресурсов завода - кооперации (несколько заводов) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:00 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
например - в изделие входит 100 000 составных частей, 3 000 000 техпроцессовна изготовление, куча логистических операций, которых нет в ТП (внутренная и внешная логистика) и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:02 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, и? ведь 100 000 составных частей и 3 млн техпроцессов не каждый же раз новые? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79, ну и? да ТП не каждый день меняется ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:14 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
у меня во время чтения сложилось мнение, что программа генерирует данные с нуля - модель для расчетов раз в какой-то период, есть другие системы, которые используют потом модель для расчетов. т. е. как вверху спрашивал - 1 есть тупая заливка, которую можно делать почти также как копирование файлов и 2 обработка модели, предварительно разово модель можно побить на куски после заливки, потом работать только с теми кускоми, что необходимо. и если оно используется не на чтение, то там и bulk операций не возникнет, хватит обычных update/insert для маленьких порций данных, подозреваю. arm, все массовые заливки, что оперируют предложениями типа 'INSERT....VALUES()' или используют хоть какую-то часть инфраструктуры БД, а не датафайлы напрямую не смогут работать быстрее того, что я привел в примере выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:26 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord Britisharm, все массовые заливки, что оперируют предложениями типа 'INSERT....VALUES()' или используют хоть какую-то часть инфраструктуры БД, а не датафайлы напрямую не смогут работать быстрее того, что я привел в примере выше. предложенные мной варианты не оперируют предложениями типа 'INSERT....VALUES()' ViPRosну и? да ТП не каждый день меняется Тогда я еще раз спрошу, какой именно объем МЕНЯЮЩИХСЯ данных за проход генерируется? Ведь можно эти 50 забить в БД, а потом поверх только апдейты накатывать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:30 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British а не датафайлы напрямую не смогут работать быстрее того, что я привел в примере выше. ну если какая то спец БД в памяти , и не читает файл , а где то в ней генерятся эти данные ( в частности 1.6Гб) , то на это уйдёт 2 секунды, а то и чуть меньше. но это уже предел. а в вашем случае, этот fixed csv ещё кто то должен создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:32 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79предложенные мной варианты не оперируют предложениями типа 'INSERT....VALUES()' а используют ли они файлы данных напрямую? автор пробовал, сказал, что не понравилась ему скорость :D кстати, что означает Arm79Просто для загрузки - да. Но как понял, ему еще и из некой программы на .Net нужен доступ к этим данным. Тогда удобнее своя программная реализация этой загрузки. Например, SqlBulkCopy Если же это частая загрузка данных просто на сервер, то Bulk Insert через джобы ИМХО интереснее. Как понимать это? Можно в тело джоба поместить вызов sqlldr/bcp или использовать внешний шедулер. Интереснее тут может быть только скорость заливки. :D ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-erну если какая то спец БД в памяти , и не читает файл , а где то в ней генерятся эти данные ( в частности 1.6Гб) , то на это уйдёт 2 секунды, а то и чуть меньше. но это уже предел. а в вашем случае, этот fixed csv ещё кто то должен создать. не должен, у оракли есть API, которое использует sqlldr в своих кишках для своего быстрого лоада. это api можно пользовать из своего кода. т. е. писать по мере генерации данных. так что там попутно можно избавиться и от конвертации типов которое есть при загрузке из текстового файла. у меня цель была показать, что механизм с минимальными посторонними затратами есть, чтобы облегчить себе путь, я выбрал csv. там на самом деле очень много опций, можно книжку написать. возможно, оно все есть и в субд автора. вот и призываю чтобы искал... ps. на счет инмемори без комментариев, по понятным думаю причинам. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:45 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79Тогда я еще раз спрошу, какой именно объем МЕНЯЮЩИХСЯ данных за проход генерируется? Ведь можно эти 50 забить в БД, а потом поверх только апдейты накатывать Блин, пришел заказ, надо пересчитвывать, изменилиь условия (сломался станок, запил дяд вася, нет денег на оплату, задержался логистический оператор,........... мылен причин пересчета расписания) а расписание новое = 50 гигов ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:46 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord BritishМожно в тело джоба поместить вызов sqlldr/bcp Вызов через sqlcmd внешних утилит требует очень хороших прав Lord Britishиспользовать внешний шедулер при наличии встроенного - не айс Lord Britishскорость заливки Не мерил сам, но уверен, что вполне сопоставима. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:48 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord Britishps. на счет инмемори без комментариев, по понятным думаю причинам. ну эт понятно , но если очень нужна скорость.... Зы. а скорость выборки из оракля такая же будет шустрая, как и заливка? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 13:53 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-erLord Britishps. на счет инмемори без комментариев, по понятным думаю причинам. ну эт понятно , но если очень нужна скорость.... Зы. а скорость выборки из оракля такая же будет шустрая, как и заливка? дело в том, что предложенный вариант загрузки минует все что можно. с таким вариантом в попугаях можно сравнить только варианты массовой выгрузки, бэкапирования или холодного копирования файлов бд. что касается команды SELECT проходит все уровни "бюрократии". в лучшм случае ваши блоки будут в буфферном кеше, и с диска их поднимать не нужно будет, в худшем вы и сами поняли... кроме того, все зависит от того насколько грамотно все учтено при настройке экземпляра и т. п.. но нужны ли автору все данные сразу - вопрос открытый. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Блин, пришел заказ, надо пересчитвывать, изменилиь условия (сломался станок, запил дяд вася, нет денег на оплату, задержался логистический оператор,........... мылен причин пересчета расписания) а расписание новое = 50 гигов[/quote] Я наверное чего то не понимаю. Как, как можно из факта слома станка выдать 50 Гб(!!!) изменений? Скажите, а отложенные вычисления у вас допустимы? Например, нет необходимости высчитывать новое расписание, пока его не запросили? А по первому запросу посчитать и положить в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:20 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British что касается команды SELECT проходит все уровни "бюрократии". в лучшм случае ваши блоки будут в буфферном кеше, и с диска их поднимать не нужно будет, в худшем вы и сами поняли... ну это понятно. бюрократия ))) по сабжу, наверно лучшим по скорости работы был бы вариант выделения спецмашины, с огромным количеством ОЗУ ( сколько щас есть 160Гб ) и всё бы хранил бы там. скорость выше наверно не получить. ну эт понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:21 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Arm79Я наверное чего то не понимаю. Как, как можно из факта слома станка выдать 50 Гб(!!!) изменений? Скажите, а отложенные вычисления у вас допустимы? Например, нет необходимости высчитывать новое расписание, пока его не запросили? А по первому запросу посчитать и положить в БД. поломка станка и есть запрос на новое расписание ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:23 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
beg-in-er, ну да ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 14:24 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRos, прочитал весь топик. Ну и задачи у Вас Сахават. Сколько ж база у Вас весит? Я уж не говорю про администрирование. Крайне рекомендую посмотреть на bcp. Скорость он даёт очень приличную. Если есть деньги смотрите в сторону новых SSD+секционирование+выжать максимум от tempdb. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 17:36 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Сахават, а сколько времени занимают пересчеты при изменениях? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 19:51 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Proga, я не могу заставить завод купить дорогостоящее оборудование наоборот - пытаюсь задействовать все иемеющиеся свободные мощности, но пока об этом рано) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 19:58 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
SeVaСахават, а сколько времени занимают пересчеты при изменениях? Изменение изменению рознь :) кое - что (та ж поломка станка в станочной группе) можно считать локально (если через какие то политики (сверхурочные, выходные и т.д.) можно компенсировать (если не получится то перерасчет длится до реперных плановых точек и по политикам принимается решение), при эскалации сообщения об изменении до реперных точек и дальше по фронту к перерасчетам могут подключится все больше и больше ресурсов но обычно перерасчет расчетная задача, то есть тут больше анализ имеющиегся графа основная проблема с хранением большого объема данных - при моделировании (формировании) портфеля на период (год - три - пять) по разным политикам (критериям) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 20:04 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
опять ж все это зависит от завода, от циклов производственных, от серийности и т.д. но в тех заводах какие я видел все смешано и электроника и мехобработка и сборкка и литье и вся фигня и большая кооперация (которую надо синхронизировать детально) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 20:07 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
вот пришел САП ми сказал - на каждый модуль нужен4 ядра с такими то характеристиками и стоко то чего то а у меня не получается дать заводам рекомендации, все зависит от ТП, от самого завода (есть ли проекты НИОКР, обытное производство и т.д.) но люди требуют оценить я изначально обещал что задейтвую все мощности в наличии и особо не буду требовать реструктрузации ИТ мощностей кроме может быть сетей но пока не смог так организвать прогу (не дошла очередь до этой части) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 20:13 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Меня раздирало любопытство и я решил попробовать утилиту bcp для быстрой загрузки данных в ms sql server 2008 r2. Условия тестирования те же что и для оракла в предыдущем посте. Те же винты, тот же файл Fixed CSV 1.6 Gb. Перечислю только специфичные штуки: Recovery Mode = Simple Триггеров нет Конкуренции нет Индексов нет По структуре таже табличка что и в oracle. Параметры команды bcp (batch size 100 000) Код: sql 1.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Ждал я ждал, пошел кофе заварил, сидел опять ждал. Дождался. StartTime: 23:27:05,77 FinishTime: 23:34:19,29 Итого bcp/sqlserver справились за 7 мин. Oracle делал это ~ 45 сек, а копирование того же файла 41 сек на моем компе. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 23:51 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Всего минут (данные со скрина вконце количество строк в секунду): 60170814 / 138988 = 432,92 / 60 = 7,2 минуты bulk insert != direct path insert ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2013, 23:58 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, отсюда Lord Britishbcp db2.dbo.t1 in data.csv -f t1.xml -e err.txt -U sa -P "pass" -b 100000 уберите Lord British-f t1.xml -e err.txt вообще не упало(мы ведь хотим скорости) и добавьте -h "TABLOCK", также можно попробовать -h "TABLOCKX", может накинет ещё чуть скорости ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 09:31 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Proga, уберите -f t1.xml -e err.txt Не влияет вообще, кроме того, первый считывается в самом начале - это параметры откуда, что брать. А в err.txt ошибки должны сыпаться, но ошибок нет, так что. добавьте -h "TABLOCK" вот это уже ближе к истине, дело пошло лучше также увеличил в пять раз размер batch -b 500000 создал datafile с заранее выделенным местом и создал табличку с привязкой к этой файловой группе [src]bcp db2.dbo.t1 in data.csv -h "TABLOCK" -f t1.xml -e err.txt -U sa -P "pass" -b 500000 [/quote] 500000 rows sent to SQL Server. Total sent: 57000000 500000 rows sent to SQL Server. Total sent: 57500000 500000 rows sent to SQL Server. Total sent: 58000000 500000 rows sent to SQL Server. Total sent: 58500000 500000 rows sent to SQL Server. Total sent: 59000000 500000 rows sent to SQL Server. Total sent: 59500000 500000 rows sent to SQL Server. Total sent: 60000000 60170814 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 69638 Average : (864051.44 rows per sec.) Итого: ~ 69.9 сек --- Oracle sqlldr за аналогичное время (другой тест) мог залить не fixed csv, т. е. с переменной длиной колонок и с разделителем колонок и столбцов. Мне не очень хотелось, чтобы большое время парса файла повлияло на общее время, так как с direct path API, этого бы не было и решил использовать fixed csv, я указал SQLLDR позиции данных в строке и длину строки в fixed csv, в этом случае он, использует адресную арифметику, а не ищет где там колонки или где там затерялся CRLF (дока рекомендует), в итоге ~ 45 сек. Собственно этот же файл fixed csv я тестировал и с ms sql server, но в доке ms sql, я нашел для файлов параметров только <FIELD ID="1" xsi:type="CharFixed" LENGTH="10"/> <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" /> есть ли возможность сказать bcp, чтобы он по оптимальнее с этим всем обходился в случае fixed csv? ps Vipross, вариант поюзать bcp api и поглядеть насколько быстро будет писать по мере генерации без накладных расходов с csv. Если кто будет делать - поделитесь результатами в сравнении с операцией копирования на ту же дисковую систему. bcp_batch bcp_bind bcp_colfmt bcp_collen bcp_colptr bcp_columns bcp_control bcp_done bcp_exec bcp_getcolfmt bcp_gettypename bcp_init ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:29 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord British, ну есть SQLBulkCopy АДО пользуюсь, но медленно, попробую потом bcp api как токо будет время ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:56 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Lord BritishProga, уберите -f t1.xml -e err.txt Не влияет вообще, кроме того, первый считывается в самом начале - это параметры откуда, что брать. А в err.txt ошибки должны сыпаться, но ошибок нет, так что. добавьте -h "TABLOCK" вот это уже ближе к истине, дело пошло лучше также увеличил в пять раз размер batch -b 500000 создал datafile с заранее выделенным местом и создал табличку с привязкой к этой файловой группе [src]bcp db2.dbo.t1 in data.csv -h "TABLOCK" -f t1.xml -e err.txt -U sa -P "pass" -b 500000 500000 rows sent to SQL Server. Total sent: 57000000 500000 rows sent to SQL Server. Total sent: 57500000 500000 rows sent to SQL Server. Total sent: 58000000 500000 rows sent to SQL Server. Total sent: 58500000 500000 rows sent to SQL Server. Total sent: 59000000 500000 rows sent to SQL Server. Total sent: 59500000 500000 rows sent to SQL Server. Total sent: 60000000 60170814 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 69638 Average : (864051.44 rows per sec.) Итого: ~ 69.9 сек --- Oracle sqlldr за аналогичное время (другой тест) мог залить не fixed csv, т. е. с переменной длиной колонок и с разделителем колонок и столбцов. Мне не очень хотелось, чтобы большое время парса файла повлияло на общее время, так как с direct path API, этого бы не было и решил использовать fixed csv, я указал SQLLDR позиции данных в строке и длину строки в fixed csv, в этом случае он, использует адресную арифметику, а не ищет где там колонки или где там затерялся CRLF (дока рекомендует), в итоге ~ 45 сек. Собственно этот же файл fixed csv я тестировал и с ms sql server, но в доке ms sql, я нашел для файлов параметров только <FIELD ID="1" xsi:type="CharFixed" LENGTH="10"/> <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" /> есть ли возможность сказать bcp, чтобы он по оптимальнее с этим всем обходился в случае fixed csv? ps Vipross, вариант поюзать bcp api и поглядеть насколько быстро будет писать по мере генерации без накладных расходов с csv. Если кто будет делать - поделитесь результатами в сравнении с операцией копирования на ту же дисковую систему. bcp_batch bcp_bind bcp_colfmt bcp_collen bcp_colptr bcp_columns bcp_control bcp_done bcp_exec bcp_getcolfmt bcp_gettypename bcp_init можно попробовать поиграться с параметрами -t и -r, в BOL это статья Specifying Field and Row Terminators ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 10:57 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Потестил ради интереса bcp api, прироста по сравнению с bcp + csv не много. Табличка таже, только генерируется и заливается программно те же 60 170 814 строк гавнакод на cpp Код: sql 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. 29.
start time: 16:23:48,81 finish time: 16:24:51,06 ~ 63 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2013, 16:31 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosа на днях попался с TryGetValue кругом рекомендации, типа это говно быстрее, чем Contains и присовение вранье полное GC убивает все рекомендации на корню эт я типа решил прогу пересмотреть и оптимизировать код с помощью нововведений нах Эти нововведения - высокоуровневая надстройка над высокоуровневой надстройкой. От этого скорости вычислений не увеличиваются. Линк (и вообще весь Сишарп с Дотнетом) был придуман не для увеличения скорости вычислений, а для увеличения скорости разработки. Чтобы GC хорошо работал, ему нужен запас по свободной ОЗУ, в несколько раз превышающий потребление проги. Тогда не сильно тормозить будет. Что там у вас с ОЗУ на ноуте и потреблением? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 06:01 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
user7320, ну полгода прошло уже счас на "ноуте" 96 ядер, сотни г памяти и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 09:09 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
ViPRosuser7320, ну полгода прошло уже счас на "ноуте" 96 ядер, сотни г памяти и т.д. Вы снова тесты проводили, на новом (как я понимаю) железе, с лихвой памяти? И что, GC так же печален, или лучше стало? Я ссылку на статью приводил, где сказано, что в своём лучшем виде GC достигает 70% производительности натива. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 11:43 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
Кстати, а чем вы все эти секунды в тестах замеряете? Что за программа? Для Сишарпа и для С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 11:45 |
|
на что хоть нарвался?
|
|||
---|---|---|---|
#18+
user7320ViPRosuser7320, ну полгода прошло уже счас на "ноуте" 96 ядер, сотни г памяти и т.д. Вы снова тесты проводили, на новом (как я понимаю) железе, с лихвой памяти? И что, GC так же печален, или лучше стало? Я ссылку на статью приводил, где сказано, что в своём лучшем виде GC достигает 70% производительности натива. ну с TryGetValue замарачиваться больше не стал за памятью теперь ВИПРОС следит сама (по части загрузки данных) с записью больших данных в БД - самый лучший вариант для МС СКЛ оказался порционная запись с использованием пользовательских типов (insert Table (...) select (...) from &DataTable) где DataTable == System.Data.DataTable ну вроде все ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2013, 12:22 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1404072]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
97ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
146ms |
get tp. blocked users: |
2ms |
others: | 334ms |
total: | 622ms |
0 / 0 |