2009-05-10 4 views
2

Meine Erfahrung mit Adobe ColdFusion, auch wenn noch etwas begrenzt, war absolut fröhlich und angenehm.Abfrage von Abfragen außerhalb von ColdFusion

Von allen guten Dingen, die ich über ColdFusion sagen konnte, hat mich eine Funktion völlig umgehauen. Es ist möglicherweise weder sehr effektiv noch nützlich in der Produktion, aber ich spreche trotzdem von der so genannten "Query of Queries" -Funktion oder dem dbtype="query"-Attribut von cfquery. Es ermöglicht Ihnen, SQL-Anweisungen für beliebige Datasets auszuführen, nicht nur für eine Datenbankverbindung. Sie können z. B. einem Resultset, das Sie gerade von der Datenbank abgerufen haben, und einer speicherinternen Struktur beitreten (das heißt, unterliegt bestimmten Einschränkungen). Es bietet eine schnelle Möglichkeit, die Daten "nachzubearbeiten", die manchmal viel besser lesbar (und auch flexibler!) Sein können, als beispielsweise das Durchlaufen des Datensatzes in einer Schleife.

Allerdings ist ColdFusion kein sehr beliebtes Produkt und ich werde nicht die Gründe dafür ansprechen. Was ich frage ist, gibt es irgendeine Unterstützung für diese Technik in anderen Sprachen (wie eine Bibliothek, die mehr oder weniger das gleiche tut)? Python? Perl? Rubin? PHP? Etwas? Es scheint mir, dass das Potenzial dieses Features enorm ist, vielleicht nicht im Produktionscode, aber es ist ein absoluter Lebensretter, wenn Sie etwas schnell testen müssen. Es ist unnötig zu sagen, dass die SQL ColdFusion dafür verwendet wird, ist meiner Meinung nach etwas eingeschränkt, aber dennoch ist die Idee immer noch großartig.

Antwort

10

Wenn Sie nichts finden, was sowohl Daten als auch ColdFusion behandelt, dann denken Sie daran, dass es sehr gut mit anderen Programmiersprachen spielt. Sie können immer die umfangreiche Abfrageverarbeitung in CF ausführen, dann wickeln Sie Ihre Verarbeitungslogik in Remote-CFCs ein und setzen sie als Webdienste für JSON zur Verfügung.

Damit können Sie von den Vorteilen von ColdFusion profitieren, während Sie andere Sprachen ausprobieren.

Wenn Sie weg von CF müssen versuchen SqlAlchemy in Python oder wie andere Plakate sagte Rails und LINQ sind es wert, mit zu spielen.

+0

Oh ja, ich habe auf SqlAlchemy gelesen und es scheint, dass es genau das ist, was ich will! Was die Verwendung von Coldfusion zusammen mit Anwendungen betrifft, die in anderen Sprachen geschrieben sind - ja, wir haben es schon früher gemacht, aber manchmal ist die Verwendung von Coldfusion keine Option. – shylent

+0

Wenn ColdFusion keine Option ist, schließt das auch Railo oder OpenBD aus? (wobei sie LGPL bzw. GPLv3 sind) –

1

Viele Frameworks verwenden objektrelationales Mapping (ORM), das Ihre Datenbanktabellen in Objekte konvertiert.

Mit Rails beispielsweise holen Sie Daten von einem Modell, anstatt direkt mit der Datenbank zu sprechen. Abfragen oder Funde werden als Array-Objekte zurückgegeben, die wiederum selbst abgefragt werden können.

3

ich kann nicht für Python, Ruby, Perl, PHP. jedoch. NET hat etwas namens LINQ, die im Wesentlichen QoQ auf Steroiden ist.

+0

Oh ja, ich hätte LINQ in meinem ursprünglichen Beitrag erwähnen sollen. Leider kann ich nie in .Net Code einprogrammieren, da es nicht in der Umgebung verwendet wird, in der ich arbeite, so dass ich keinerlei Erfahrung damit habe. – shylent

-14

Diese Technik (ColdFusion Query-of-Abfragen) ist eine der schlechtesten Ideen da draußen. Es bewahrt nicht nur die Geschäftslogik in der Datenbank, sondern auch die kleine Geschäftslogik, die Sie in Ihrem Code hinterlassen haben, und schiebt es aus Verzweiflung in die Datenbank.

Was Sie brauchen, ist eine gute Sprache, nicht schlechte Techniken, um Mängel zu beheben.

Python und Ruby, sowie andere Sprachen, die nicht auf Ihrer Liste stehen, wie C# und Haskell, haben eine außergewöhnliche Unterstützung für das Schreiben von beliebigen und mächtigen Abfragen gegen In-Memory-Objekte. Dies ist in der Tat die Technik, die Sie wollen, nicht die Query-of-Queries von ColdFusion. Die Technik des Schreibens von Abfragen gegen speicherinterne Objekte ist ein Aspekt eines allgemeinen Programmstils, der funktionale Programmierung genannt wird.

+3

Da QofQs gegen Speicherobjekte (andere Abfrageergebnisse) arbeiten, tun sie genau das Gegenteil von dem, was Sie andeuten. –

+0

Sie werden an die Datenbank gesendet. CF nimmt eine im Speicher befindliche QueryTable und sendet sie als Unterabfrage an die Datenbank. Der Kernpunkt Ihrer Anwendung sollte ein reiches Domänenmodell sein. Es sollte nicht die Datenbank sein. – yfeldblum

+1

QofQs werden * NICHT * als Unterabfrage an die Datenbank gesendet. –

0

Sie können dies auch in .NET mithilfe von LINQ erreichen. Mit LINQ können Sie sowohl Objekte als auch Datenbanken abfragen.

0

Bei der Durchführung der Analyse der Abfrage von Abfragen war ich überrascht von ihrer Ausführungszeit, konnte ich nicht in weniger als 10ms in meinen Tests zurückkehren, wo einfach Abfragen an die tatsächliche Datenbank in 1ms oder weniger zurückkehren würde. Mein Verständnis (zumindest in CF MX 7) ist, dass dies zwar eine nützliche Funktion ist, aber nicht sehr optimiert ist. Ich fand es viel schneller, die Abfrage manuell zu durchlaufen, indem ich bedingte Logik manuell durchführte, um zu ersetzen, was ich mit meiner Abfrage von Abfragen zu tun versuchte.

Das heißt, es ist schneller als in die Datenbank gehen, wenn die erste Abfrage langsam ist. Verwenden Sie es einfach nicht und denken Sie, dass es immer schneller sein wird, als eine kreativere Sortierung oder eine anfängliche Abfrage durchzuführen, da jedes QofQ weit entfernt von sofortigen ist.

0

Für Java gibt es drei Projekte, die einen Blick wert sind, jeder mit seinen eigenen positiven und negativen, einige mehr SQL als andere. JoSQL JoSQL, JXPath und MetaModel.

Vielleicht eines dieser Tage werde ich herausfinden, wie man einen QoQ direkt aus dem Java unter CF. ;)