2009-05-10 4 views
2

Мой опыт использования Adobe ColdFusion, даже если все еще несколько ограниченный, был абсолютно радостным и приятным.Запрос запросов вне ColdFusion

Из всех хороших вещей, которые я мог бы сказать о ColdFusion, одна особенность полностью сбила меня с ног. Это может быть не очень эффективным или полезным в производстве, но в любом случае я говорю о так называемой функции «запроса запросов» или атрибуте dbtype="query"cfquery. Он позволяет запускать SQL-запросы в отношении произвольных наборов данных, а не только для подключения к базе данных. Например, вы можете присоединиться к набору результатов, который вы только что извлекли из базы данных и структуры в памяти (то есть, конечно, с некоторыми ограничениями). Он обеспечивает быстрый и грязный способ получения «постпроцесса» данных, что иногда может быть гораздо более читаемым (и гибким!), Чем, скажем, итерирование через набор данных в цикле.

Однако ColdFusion не очень популярный продукт, и я не собираюсь переходить по причинам, почему это так. Я спрашиваю, есть ли поддержка этой техники на других языках (например, в библиотеке, которая более или менее одинаковая)? Python? Perl? Рубин? PHP? Что-нибудь? Потому что, мне кажется, что потенциал этой функции огромен, может быть, не в производственном коде, но это абсолютная спасательная игра, если вам нужно быстро что-то проверить. Излишне говорить, что SQL ColdFusion использует для этого несколько ограниченные, насколько мне известно, но все же идея по-прежнему велика.

ответ

10

Если вы не найдете ничего, что обрабатывает данные, а также ColdFusion, помните, что он отлично сочетается с другими языками программирования. Вы всегда можете выполнять обработку тяжелых запросов в CF, а затем просто переносить свою логику обработки в удаленные CFC и выставлять их в качестве веб-сервисов, обслуживающих JSON.

Это позволит вам извлечь выгоду из того, что вы находите отличным в ColdFusion, когда пытаетесь освоить некоторые другие языки.

Если вам нужно уйти от CF, попробуйте SqlAlchemy на Python, или, как и другие плакаты, сказали, что Rails и LINQ стоит поиграть.

+0

О да, я читал на SqlAlchemy, и кажется, что это именно то, что я хочу! Что касается использования coldfusion в тандеме с приложениями, которые написаны на других языках, - да, мы это делали раньше, но иногда использование coldfusion просто не вариант. – shylent

+0

Если/когда ColdFusion не является вариантом, это также исключает Railo или OpenBD? (с ними LGPL и GPLv3 соответственно) –

1

Множество фреймворков используют объектно-реляционное сопоставление (ORM), которое преобразует ваши таблицы базы данных в объекты.

Например, используя Rails, вы извлекаете данные из модели, а не напрямую разговариваете с базой данных. Запросы или находки возвращаются как объекты массива, которые, в свою очередь, могут быть запрошены сами.

3

Я не могу использовать python, ruby, perl, php. однако .Net имеет что-то под названием LINQ, которое по существу QoQ на стероидах.

+0

О да, я должен был упомянуть LINQ в моем оригинальном посте. К сожалению, я никогда не получаю код в .Net, поскольку он не используется в среде, в которой я работаю, поэтому у меня нет никакого опыта с этим. – shylent

-14

Этот метод (запрос запросов ColdFusion) является одной из худших идей. Он не только сохраняет бизнес-логику в базе данных, но и берет ту небольшую бизнес-логику, которую вы оставили в своем коде, и выталкивает ее в базу данных только для злобы.

Что вам нужно, это хороший язык, неплохие методы для восполнения недостатков.

Python и Ruby, а также другие языки, не входящие в ваш список, такие как C# и Haskell, имеют исключительную поддержку для записи произвольных и мощных запросов по объектам в памяти. Это фактически тот метод, который вы хотите, а не запросы запросов ColdFusion. Техника написания запросов к объектам в памяти является аспектом общего стиля программирования под названием функционального программирования.

+3

Поскольку QofQs работают с объектами памяти (другие результаты запроса), они делают точно противоположное тому, что вы подразумеваете. –

+0

Они отправляются в базу данных. CF берет в памяти QueryTable и отправляет его в базу данных в качестве подзапроса. Дело в том, что ядро ​​вашего приложения должно быть богатой моделью домена. Это не должна быть база данных. – yfeldblum

+1

QofQs do * NOT * отправляется в базу данных как подзапрос. –

0

Вы также можете выполнить это в .NET с помощью LINQ. LINQ позволит вам запрашивать объекты, а также базы данных.

0

Выполнение анализа производительности Query of Queries, я был удивлен их временем выполнения, я не мог заставить их вернуться менее чем за 10 мс в моих тестах, где просто запросы к реальной базе данных вернутся в 1 мс или меньше. Мое понимание (по крайней мере, в CF MX 7) заключается в том, что, хотя это полезная функция, она не является высоко оптимизированной. Я обнаружил, что намного быстрее выполнить цикл запроса вручную, используя условную логику, чтобы заменить то, что я пытаюсь сделать с моим запросом запросов.

Это, как говорится, быстрее, чем переход к базе данных, если начальный запрос выполняется медленно. Просто не используйте его, думая, что он будет всегда быстрее, чем делать более творческий сорт или исходный запрос, поскольку каждый QofQ далек от мгновенного.

0

Для Java существует три проекта, на которые стоит обратить внимание, каждый из которых имеет свои собственные положительные и отрицательные стороны, а некоторые больше похожи на SQL. JoSQL JoSQL, JXPath и MetaModel.

Возможно, в один из этих дней я выясню, как вызвать QoQ непосредственно из Java под CF. ;)

Смежные вопросы