Лучший способ пройти прокси, который требует аутентификации, использует urllib2 для создания пользовательского новичка URL, затем с помощью этого для выполнения всех запросов, Вы хотите пройти прокси. Отметьте, в частности, Вы, вероятно, не хотите встраивать пароль прокси в URL или исходный код Python (если это не просто быстрый взлом).
import urllib2
def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, proxyurl, proxyuser, proxypass)
proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)
return urllib2.build_opener(proxy_handler, proxy_auth_handler)
if __name__ == "__main__":
import sys
if len(sys.argv) > 4:
url_opener = get_proxy_opener(*sys.argv[1:4])
for url in sys.argv[4:]:
print url_opener.open(url).headers
else:
print "Usage:", sys.argv[0], "proxy user pass fetchurls..."
В более сложной программе, можно разделить эти компоненты как соответствующие (например, только с помощью одного менеджера паролей в течение времени жизни приложения). Документация Python имеет [еще 112] примеры того, как сделать сложные вещи с urllib2, который Вы могли бы также найти полезным.
аналитические функции не лишены затрат: они должны хранить данные для промежуточных результатов (промежуточные итоги, оконные функции ...), для которых требуется память, а также они требуют некоторой вычислительной мощности. Некоторым функциям потребуется перейти к последней строке набора результатов, чтобы иметь возможность возвращать результат (например, MIN / MAX). Большинство функций также будут иметь неявную операцию SORT.
Поэтому они не являются бесплатными с точки зрения ресурсов, но являются операциями SET, и поэтому в большинстве случаев они намного эффективнее, чем написание пользовательской процедуры plsql построчно или традиционный SQL.
Вам придется сравнивать и тестировать тесты в вашем конкретном случае, но если вы будете использовать их с умом, вы увидите, что они являются мощным инструментом повышения производительности, а не помехой.
Некоторые подробности об этом доступны в блоге Джонатана Льюиса здесь .
. На самом деле вопрос должен заключаться в том, являются ли они более или менее дорогостоящими, чем альтернатива, и это будет зависеть от конкретной ситуации. В некоторых случаях вы можете предпочесть вытащить данные на сервер приложений и обработать их там только потому, что обычно дешевле / проще иметь дополнительное оборудование на этом уровне.
Но есть выбор между выполнением этого в SQL и добавлением PL / Обработка SQL,
Это зависит от того, как индексируется ваша таблица и какие функции вы используете.
ROW_NUMBER ()
, например, кажется менее эффективным, чем ROWNUM
, даже если используются индексы. См. Эту статью в моем блоге для сравнения производительности:
Оптимизатор Oracle
знает о оконных функциях и может использовать несколько приемов, например STOPKEY
и PUSHED RANK
, которые делают их более эффективными.
План объяснения указывает, что полное сканирование таблицы выполняется для таблицы, для которой использовалась аналитическая функция оракула.
Само по себе сканирование таблицы неплохое.