|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
maytonЕсть описание таблички plan_production_finished_products в виде ddl? полудухмда, ну тут вообще не к БД претензии если увидим DDL таблицы, думаю будем плакать всем форумом Одна таблица используется в расчетах. Код: 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. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106.
L.OtujktdFocha, Я бы попробовал все перенести в объектное представление и в linq завернуть потихоньку и что-то респараллелить/закешировать. Плюс в это во всем что можно прикрутить визуализацию и красивые диаграммы Как понимаю если mssql то C# наверное надо попробовать. maytonА зачем индексы создаются и убиваются? Странная практика. Из Ораклового опыта... я-бы их 1 раз создал как HIDDEN. И потом в запросах активировал бы когда надо хинтами. И еще вопрос 1) Сколько всего строк в табличке plan_production_finished_products? 2) Сколько из них реально используются в расчетах? 1) Строк 100 000 всего 2) Цикл бегает по строкам Спасибо, что-то не подумал включать и отключать, так и сделаю полудухFochaАлгоритм все считает в 2 хранимках на сервере, но мне кажется, реализация на t-sql мягко говоря это не то. а чего нет? Чем ближе к данным, тем лучше. считает "всё" считает быстро считает правильно работает - не тронь (с) если тащить это куда-то ИЗ базы, значит уже лишнюю работу делать быстрее будет, только если алгоритмы говно, тогда конечно можно взять C++ и заюзать евойные алгоритмы это будет оптимально. FochaА вы делали большие и сложные расчеты а это разве "большой и сложный"? сходите к синоптикам, посмотрите, как они погоду считают А как же совершенствовать свое творение? На момент когда разрабатываешь с нуля кажется расчет сложный, а когда завершаешь разработку, то понимаешь, что тут всего 10 строк кода. CLR работает внутри базы, так что думаю попробовать перенести расчет на C# CLR, но это не значит, что я отключу хранимки. Хочу попробовать полудухFochaданный кусок работает ~10 секунд, а все 2 минуты. я думаю где-то есть истина, что такие расчеты "легче" разработать на чем-то другом. это от запросов и алгоритма зависит перетащить данные в C++ будет ещё дольше но скорость расчётов останется ~такой же, если алгоритм не изменить Да, зависит, вот и думаю, что на C# можно придумать другой алгоритм ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 08:57 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
monstrUя бы тут рассматривал выбор - бизнес логику держать в БД или в приложении. сейчас ты выбрал вариант 2. у обеих есть плюсы и минусы. по бд плюсы - в теории сравнительно быстро работает (на практике как угодно), просто подменить минусы- трудозатратно в разработке и сопровождении, юнит тесты в архитектуре не предусмотрены бизнес логика в приложении плюсы - на вменяемом железе производительность на уровне, разработка на высокоуровневом языке C# или похожем, писать сложную логику проще, юнит тесты применять можно минусы - обновление выполнять только с обновлением приложения (если это минус) , дополнительно в приложении надо слой бизнес логики строить. у тебя задачи логистики - там сложность логики может быть любая. лучше писать ее по юнит тестам, чтобы понимать что за логика реализована. у тебя вот написаны 2 процедуры - как ты будешь уверен через 3 месяца, что они поддерживают тот же функционал, что и сегодня без тестов? никак. обычно заводят логический слой - типа классы OrderService, в котором реализовывают методы, занимающиеся формированием заказа, как у тебя. в БД такие классы не лезут - для этого отдельный слой заводят. в общем срач не первый на эту темы. подходов 2 - у каждого есть плюсы и минусы. выбери для себя что тебе важнее по приоритетам и его и используй Почему я выбрал 2, если бизнес логику держу в БД. Очень интересный ответ, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:02 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Focha, оставь как есть ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:21 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
индексы забыли. FochaА как же совершенствовать свое творение? так совершенствовать надо знания БД и алгоритмику вот так нельзя делать вообще никогда: Код: sql 1. 2.
"заявки" и "план продаж" это справочники и искать надо, соответственно, по ID авторНапример задача, мне нужно сделать график отгрузки, с учетом графика работы и вместимости машин. Алгоритм должен заполнить машину на 99%-100%, кол-во машин ограничено, заказ нельзя разделять (в 1 машину можно больше 1 заказа, но нельзя 0.5 заказа). Задача стандартная в логистике. не выглядит как неподъёмная для plsql задача но если прям никак, то сделайте свой SELECT и посчитайте, где удобно хоть посмотрите, а оно вам вообще поможет или всё таки дело в алгоритмах ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:50 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
ViPRosFocha, оставь как есть а я не собирался менять, я думаю о других инструментах полудухиндексы забыли. так совершенствовать надо знания БД и алгоритмику вот так нельзя делать вообще никогда: "заявки" и "план продаж" это справочники и искать надо, соответственно, по ID не выглядит как неподъёмная для plsql задача но если прям никак, то сделайте свой SELECT и посчитайте, где удобно хоть посмотрите, а оно вам вообще поможет или всё таки дело в алгоритмах индексы создаются позже, когда таблица данными заполниться, по совету выше переделал, на включение и выключение индексы. Спасибо за совет " так совершенствовать надо знания БД и алгоритмику " и еще CLR совершенствовать буду ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 12:25 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Focha1) Строк 100 000 всего 2) Цикл бегает по строкам Спасибо, что-то не подумал включать и отключать, так и сделаю Смотри. Эффективность альтернативного решения должна базироваться на том что мы. 1) Из таблицы в 100 000 строк выбираем выборку X строк Код: sql 1. 2.
и сохраняем их в коллекции CLR/C++/Java/Python e.t.c. 2) Выполняем процессинг данных в коллекциях в точности по тому-же алгоритму который реализован в T-SQL Есть ли какое-то международное название у этого алгоритма? Что это? Транспортная задача? Transport Problem? Combinatorial optimization? Если мы найдем ее каноническую формулировку то - будет и коробочное решение. 3) Сохраняем результат в #log_change Недостатки. Мы должны гарантировать что трансфер X строк в коллекции будет быстрее чем 2 минуты. Если это не так - то альтернативное решение бесполезно. При этом мы должны быстро сбрасывать результаты в лог изменений. Если они будут медленнее чем 2 минуты то альтернатива тоже не подходит. Объем коллекций (хеш-таблиц и деревьев и графов) в памяти не должен превышать доступную память машины где идет вычисление. Выполнять это напрямую на сервере также опасно. Память сервера обычно занята задачами БД и как-то забирать у нее ресурсы - нехорошо. Теряется контроль над ситуацией. ДБА тоже поставлен в сложное положение. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 14:59 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Focha, Я так понимаю задачка у Вас на перспективу, тк входные данные одни, а вариантов обработки потенциально много. Те вопрос в том, как разработать систему, которую можно былобы гибко адаптировать под другие алгоритмы используя какие-то уже готовые блоки. на выходе вообще получается подобие nosql , судя по общей картине. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 22:08 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Fochaиндексы создаются позже, когда таблица данными заполниться, по совету выше переделал, на включение и выключение индексы. я говорю - DDL без индексов это просто портянка "создаются позже" это зачем/почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 22:28 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
maytonСмотри. Эффективность альтернативного решения должна базироваться на том что мы. 1) Из таблицы в 100 000 строк выбираем выборку X строк и сохраняем их в коллекции CLR/C++/Java/Python e.t.c. 2) Выполняем процессинг данных в коллекциях в точности по тому-же алгоритму который реализован в T-SQL 3) Сохраняем результат в #log_change Недостатки. Мы должны гарантировать что трансфер X строк в коллекции будет быстрее чем 2 минуты. Если это не так - то альтернативное решение бесполезно. При этом мы должны быстро сбрасывать результаты в лог изменений. Если они будут медленнее чем 2 минуты то альтернатива тоже не подходит. Объем коллекций (хеш-таблиц и деревьев и графов) в памяти не должен превышать доступную память машины где идет вычисление. Выполнять это напрямую на сервере также опасно. Память сервера обычно занята задачами БД и как-то забирать у нее ресурсы - нехорошо. Теряется контроль над ситуацией. ДБА тоже поставлен в сложное положение. Сервер используется как раз для расчетов, не для учета каких-то данных. Ваше утверждение больше говорит о том как посчитать, я понимаю, что любой алгоритм можно написать на CLR/C++/Java/Python e.t.c. , пока из всех ответом мне больше нравиться перенести на C# и ООП, не факт, что будет быстрее, но я получу внутренне спокойствие, что делаю все верно. Python/R тоже вариант L.OtujktdFocha, Я так понимаю задачка у Вас на перспективу, тк входные данные одни, а вариантов обработки потенциально много. Те вопрос в том, как разработать систему, которую можно былобы гибко адаптировать под другие алгоритмы используя какие-то уже готовые блоки. на выходе вообще получается подобие nosql , судя по общей картине. Спасибо вам, вы мне помогаете более точно определить, что я хочу, только не разработать, а какой инструмент выбрать. Может сможете посоветовать, что использовать? полудухFochaиндексы создаются позже, когда таблица данными заполниться, по совету выше переделал, на включение и выключение индексы. я говорю - DDL без индексов это просто портянка "создаются позже" это зачем/почему? Вы можете забыть про mssql? представьте у меня есть задача, данные хранятся в таблице и мне нужно произвести расчет без t-sql ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 09:11 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
FochaВы можете забыть про mssql? представьте у меня есть задача, данные хранятся в таблице и мне нужно произвести расчет без t-sql ты тогда сделай следующий этап и переформулируй задачу "у тебя есть задача, в которой есть данные и тебе нужно вычислить логистическую задачу" и все равно, где у тебя хранятся данные -в таблице, их отдает веб сервис, конструируешь их в оператовной памяти. так ты плавно дойдешь до формирования логического слоя БЛ в приложении. и при получении советов - написать clr в БД будешь думать - нафиг мне внедрять C# в бд если эта логика и так в приложении сидит ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 09:32 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
FochaВы можете забыть про mssql? представьте у меня есть задача, данные хранятся в таблице и мне нужно произвести расчет без t-sql да вы всё никак в толк не возьмёте, что вам нужно будет перетаскивать данные из БД в FochaCLR/C++/Java/Python e.t.c. а делать вам это через WHERE, где те самые индексы и участвуют у вас и сейчас алгоритмы тормозят частично из-за индексов но потом у вас всё будет тормозить ещё и потому, что 100000 строк надо перетащить в другое место ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 10:10 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Как-то задача нечетко сформулирована. Ограничения есть, а целевой функции нет. Просто распихать груз по транспортным средствам? Можно по-разному, а что критерием является? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 10:43 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Тема закрыта, буду копать в сторону алгоритмов и C# ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 11:27 |
|
На чем создать расчет, поделитесь опытом
|
|||
---|---|---|---|
#18+
Есть готовый код который работает. Разве мы не можем получить из него алгоритм? Это называется реверс-инжинеринг. Конешно лучше не решать данную задачу таким образом а генерализировать ее. Найти обобщённый подход. И решить через него. Канонически. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 14:00 |
|
|
start [/forum/topic.php?fid=16&gotonew=1&tid=1339911]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 490ms |
0 / 0 |