|
|
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
доброе время суток! глядя иногда кто как пишет (мануалы, примеры, форумы, чьи-то исходники...) код программ, заинтересовал такой вопрос. в процессе написания практически любой программы сталкиваешься с работой со строками, будь-то конкатенация, верхний/нижний регистр, поиск подстроки и т.п. во многих языках такие функции удачно реализованы и всеми юзаются. а если в проекте использкется и какая-нибудь субд, то во многих из них тоже реализованы такие функции. так вот интересно, чьи функции "быстродейственнее" в итоге работы скрипта/программы: языка программирования или субд? больше интересуют (т.к. имею непосредственное отношение) функции интерпретаторов perl и php и субд mysql. но остальное тоже интересно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2007, 18:28 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
сам то понял что сказал? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 08:13 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
возможно, я что-то неправильно понял, намекните или тыкнете где ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 09:45 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
СУБД - это интерпретатор. со всеми вытекающими Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 09:56 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
i'm_noviceтак вот интересно, чьи функции "быстродейственнее" в итоге работы скрипта/программы: языка программирования или субд?Вопрос не имеет ответа. Потому что это зависит от очень и очень многих факторов. Чтобы решить склеивать два текстовых поля в sql запросе или склеивать их уже на клиенте при разборе резалтсета надо знать структуру данных. Чаще всего лучше отдать такие задачи клиенту, потому что: Во первых, сервер бд может обрабатывать множество запросов одновременно и несложная операция склейки строк может в итоге вылится в несколько процентов потери производительности для других клиентов. И во вторых, если у по одному из текстовых полей есть индекс а ты приклеил к этому полю другое - возможно что сервер уже не узнает индекс и общее время выборки увеличится многократно. i'm_novice больше интересуют (т.к. имею непосредственное отношение) функции интерпретаторов perl и php и субд mysql. но остальное тоже интересно)А ты сам попробуй. Сделай две программы, одна с текстовыми операциями в sql запросе, другая пусть выбирает текстовые поля как есть и делает склейку в скрипте. Замерь время выполнения той и другой - получишь ответ для своей системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 18:08 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
ScareCrowСУБД - это интерпретатор. со всеми вытекающими Не надо говорить глупостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2007, 18:12 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
i'm_noviceтак вот интересно, чьи функции "быстродейственнее" в итоге работы скрипта/программы: языка программирования или субд? Затрудняюсь придумать задачу, в которой ответ на этот вопрос имеет хоть сколько-нибудь практическое значение. Здесь стоит думать об архитектурно верном решении, а не о быстродействии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2007, 17:08 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarerЗдесь стоит думать об архитектурно верном решении, а не о быстродействии.Верность решения с точки зрения архитектуры зависит так же и от быстродействия. Что такое архитектурно верное решение? Это решение которое легко поддерживается, легко масштабируется и быстро работает, не так ли? А значит и думы о быстродействии занимают треть времени при поиске архитектурно верного решения. Ы? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2007, 17:31 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White OwlВерность решения с точки зрения архитектуры зависит так же и от быстродействия. Не "от быстродействия", а "от быстродействия, имеющего значение с точки зрения решения итоговой задачи". Для задач вида "скриптовый язык работает с БД" думать о быстродействии строковых операций, мягко говоря, смешно. А вот программистов, которые сделав "тест на быстродействие" запихнут эти операции туда, где им решительно не место с архитектурной точки зрения, я к сожалению очень даже себе представляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2007, 17:40 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarerА вот программистов, которые сделав "тест на быстродействие" запихнут эти операции туда, где им решительно не место с архитектурной точки зрения, я к сожалению очень даже себе представляю.Одно маленькое "но", ты забыл сказать как надо определить где этим самым операциям место? Дай свою инструкцию по определению правильного места для строковых операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2007, 19:50 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White Owl softwarerА вот программистов, которые сделав "тест на быстродействие" запихнут эти операции туда, где им решительно не место с архитектурной точки зрения, я к сожалению очень даже себе представляю.Одно маленькое "но", ты забыл сказать как надо определить где этим самым операциям место? Дай свою инструкцию по определению правильного места для строковых операций. будьте любезны. интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 11:19 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White OwlОдно маленькое "но", ты забыл сказать как надо определить где этим самым операциям место? Думать головой. White OwlДай свою инструкцию по определению правильного места для строковых операций. Так же, как и для любых других операций. Надеюсь, ты не просишь краткой инструкции по конструированию программных систем? Скажем, если мы считаем, что фамилия должна быть в initcaps-е - это надо делать на сервере (можно, но необязательно, продублировать на клиенте). Скажем, если мы считаем, что суммы должны выводиться как 9'990.00 - этого не надо делать на сервере. Однако, более-менее кратко пересказать методику определения "где когда" - увы, не способен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:44 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarerДля задач вида "скриптовый язык работает с БД" думать о быстродействии строковых операций, мягко говоря, смешно. - не смешно. Удачно созданная программа на скриптовом языке может работать на порядок быстрее неудачно созданной, а учитывая возможность интенсивного использования такой программы (количество вызовов в еденицу времени) все это пересчитывается в загрузку процессора машины на которой запускается скрипт. В контексте той задачи которую имел в виду автор топика (скорее всего речь шла о серверных web-приложениях) не оптимизированый по быстродействию скрипт может создать серьезные проблемы для сервера на котором он запускается, при большой посещаемости сайта. - другой вопрос как именно оптимизировать работу со строками. В большинстве случаев идея запихнуть логические конструкции в базу данных и использовать встроенные функции базы порочна, так как появляется сильная зависимость программы от базы данных (от типа и версии этой базы), что мешает развитию программы. - для повышения эффективности работы со строками в программе в первую очередь надо знать особенности строковых операций и конкретных функций для работы со строками в том языке на котором пишется скрипт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 16:30 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
Kachalov- не смешно. Удачно созданная программа на скриптовом языке может работать на порядок быстрее неудачно созданной, а учитывая возможность интенсивного использования такой программы Следует выкинуть "скриптовой язык" и писать на инструментах, нормально тянущих серьезную нагрузку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 12:12 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarer Следует выкинуть "скриптовой язык" и писать на инструментах, нормально тянущих серьезную нагрузку. - и уничтожить всех программистов использующих для web-программирования PHP :) - кривой код можно написать на любом языке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:24 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
Kachalov- и уничтожить всех программистов использующих для web-программирования PHP :) Зачем тратить силы на лишние непродуктивные действия? Если все сайты в мире станут "серьезными" - сами вымрут, а если не станут - пусть лучше живут, иначе пользователи, глядишь, кого другого дергать начнут. Kachalov- кривой код можно написать на любом языке :) Безусловно. Однако, снявши голову - по волосам не плачут, а выбрав такую конфигурацию - почему-то начинают бороться за такты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 14:02 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
i'm_noviceбудьте любезны. интересно. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 14:55 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
мод i'm_noviceбудьте любезны. интересно. Код: plaintext 1. Все зависит от конкретной БД и от структуры данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 18:29 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White OwlВообще-то, существуют базы данных умеющие сравнивать текстовые значения без учета регистра. К использованному в примере substr эта логика тоже относится? :) White OwlИ на таких БД использование функции upper() для сравенения приводит к бессмысленной трате процессорных ресурсов. Не уверен, кстати. Зависит от реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 19:41 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarer White OwlИ на таких БД использование функции upper() для сравенения приводит к бессмысленной трате процессорных ресурсов.Не уверен, кстати. Зависит от реализации.почему не уверен? Если бд работает в режиме нечувствительности к регистрам, то любая операция сравнения строк будет неявно вызывать внутренний аналог upper/lower или функцию сравнения с учетом страниц для юникодных строк. Оборачивать это своим собственным вызовом upper() приведет к двойной работе или хотя бы проверке, надо эту работу проводить второй раз или не надо. Использовать substr() в where вещь безусловно полезная, нужная и правильная. Поэтому я в первом посте про нее и не говорил. Вот теперь можешь ехидничать :) Но вообще-то, автор топика говорил не про строковые функции в where, он говорил про строковые функции в определении вычислимых колонок в запросе. Это все-таки совершенно другое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 21:18 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White Owlпочему не уверен? Потому что зависит от реализации. White OwlЕсли бд работает в режиме нечувствительности к регистрам, В скобках отметим, что за такие режимы надо отрывать руки. White Owlто любая операция сравнения строк будет неявно вызывать внутренний аналог upper/lower или функцию сравнения с учетом страниц для юникодных строк. Оборачивать это своим собственным вызовом upper() приведет к двойной работе или хотя бы проверке, надо эту работу проводить второй раз или не надо. Угу. Игнорирование вызова upper на стадии построения плана - потребуется поставить очень нетривиальный эксперимент, чтобы обнаружить следовые количества влияния на производительность. White OwlВот теперь можешь ехидничать :) Спасибо, только этого и ждал :) White OwlНо вообще-то, автор топика говорил не про строковые функции в where, он говорил про строковые функции в определении вычислимых колонок в запросе. Это все-таки совершенно другое... Мне тоже пришла в голову именно такая трактовка, но вообще-то мод прав, найдутся и персонажи, который под лозунгом "и вообще еще неизвестно, как эта субд считает регэкспы" сделают фильтрацию на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 22:41 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarer White OwlЕсли бд работает в режиме нечувствительности к регистрам, В скобках отметим, что за такие режимы надо отрывать руки.Почему??? Я работал и с чувствительными и с нечувствительными базами. С нечувствительными работать намного удобнее. И за шесть лет жизни на нечувствительной был только один-единственный случай когда потребовалось сделать чувствительное сравнение. softwarerИгнорирование вызова upper на стадии построения плана - потребуется поставить очень нетривиальный эксперимент, чтобы обнаружить следовые количества влияния на производительность.Конечно, на фоне остальных тормозов эти долюшечки процента заметить будет сложно. Главное что потеря все же будет и она будет не нулевой... softwarerМне тоже пришла в голову именно такая трактовка, но вообще-то мод прав, найдутся и персонажи, который под лозунгом "и вообще еще неизвестно, как эта субд считает регэкспы" сделают фильтрацию на клиенте.Почему же "найдутся"? Находятся.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 22:53 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
White Owl softwarer White OwlЕсли бд работает в режиме нечувствительности к регистрам, В скобках отметим, что за такие режимы надо отрывать руки.Почему??? Потому что код, корректность которого зависит от режима работы базы - кошмар с точки зрения эксплуатации и сопровождения. База может понимать операцию сравнения так, может понимать иначе, может иметь разные по синтаксису операции "чувствительного" и "нечувствительного" сравнения - ничуть не возражаю, но за наличие настройки уровня базы "как следует сравнивать строки" надо бить, и больно. Вон, ораклоиды додумались не так давно сделать чувствительную сортировку - и с тех пор не утихают вопросы "а какого хрена здесь сортируется не так, как вон там?" В немного меньшей степени это верно для возможности сделать настройку в приложении. То есть "ALTER SESSION SET... " - это несколько лучше, чем параметр базы, приложение по крайней мере может настроить свой контекст - но все равно оказывается, что работа программных модулей уродуется внешними по отношению к ним настройками; достаточно представить себе общий модуль, используемый в нескольких проектах, в одном из которых вдруг решили "поменять настройку". White OwlКонечно, на фоне остальных тормозов эти долюшечки процента заметить будет сложно. Главное что потеря все же будет и она будет не нулевой... Это скорее долюшечки долюшечек процента. Их будет очень трудно заметить даже на фоне "эффективности строковых операций". Конечно, это будет не математический ноль - это будет физический ноль. Вы сказали, если мне не изменяет память, "напрасные траты процессора" - признаться, не готов так ругать траты, с трудом различимые под микроскопом. Во всяком случае, я вполне готов принять аргументацию "зато не надо думать, выставлен режим регистронезависимости или нет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 00:44 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarerПотому что код, корректность которого зависит от режима работы базы - кошмар с точки зрения эксплуатации и сопровождения.Вовсе нет. Прикладник обычно пишет для одной конкретной базы. Людей которые скачут между несколькими БД с разными настройками - по пальцам пересчитать. И когда ты занимаешься увязкой между собой данных между двумя разными базами настройки конкретных БД это такая малость... И в конце-концов, я с трудом представляю себе прикладную задачу в которой надо делать регистрозависимое сравнение. softwarerВ немного меньшей степени это верно для возможности сделать настройку в приложении. То есть "ALTER SESSION SET... " - это несколько лучше, чем параметр базы, приложение по крайней мере может настроить свой контекст - но все равно оказывается, что работа программных модулей уродуется внешними по отношению к ним настройками; достаточно представить себе общий модуль, используемый в нескольких проектах, в одном из которых вдруг решили "поменять настройку".Вообще-то, клиент вполне может прочитать все настройки сервера/базы/сессии и соответственно настроится самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 01:13 |
|
||
|
простые операции...
|
|||
|---|---|---|---|
|
#18+
softwarer Потому что код, корректность которого зависит от режима работы базы - кошмар с точки зрения эксплуатации и сопровождения. База может понимать операцию сравнения так, может понимать иначе, может иметь разные по синтаксису операции "чувствительного" и "нечувствительного" сравнения - ничуть не возражаю, но за наличие настройки уровня базы "как следует сравнивать строки" надо бить, и больно. . в горячо ненавидимом фокспро, после пары часов ночной работы както обнаружил что операция сравнения строк по умолчанию выдает true по включению. ("a" = "ab" ) == true и на 632 странице руководства рассказывалось про параметр, который может сделать сравнение строк общепринятым(рефлексивным, симметричным и транзитивным) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 01:28 |
|
||
|
|

start [/forum/topic.php?fid=16&startmsg=34654556&tid=1345945]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 379ms |

| 0 / 0 |
