Stored Procedures in Rails verwenden

8

Wie ich bereits in einem früheren Post gesagt habe, muss unsere Rails-App mit einer Tabelle vom Typ E-A-V in einer Drittanbieteranwendung verbunden sein, aus der wir Daten ziehen. Ich hatte eine Ansicht erstellt, um die Daten normal zu machen, aber es dauert viel zu lange, um ausgeführt zu werden. Wir haben einen unserer Offshore-PHP-Entwickler eine gespeicherte Prozedur erstellen lassen, um die Geschwindigkeit zu erhöhen.

Nun kommen wir zu dem Problem, dass wir diese gespeicherte Prozedur in der Rails-App aufrufen und Such- und Filterfunktionen bereitstellen müssen. Die Ansicht könnte dies tun, weil Rails es als ein traditionelles Rails-Modell behandelt hat. Wie könnte ich das mit dem gespeicherten Proc machen? Müssten wir benutzerdefinierte Suche und Bestellung schreiben (wir haben Searchlogic verwendet)? Das Management ist nicht in der Lage, die Nachteile der Verwendung eines gespeicherten Procs von Rails zu verstehen; Sie sagen nur, dass die aktuelle Methode zu lange dauert, um die Daten zu laden, und dass sie repariert werden müssen, aber das Suchen und Filtern sind kritische Funktionen.

BEARBEITEN Ich habe den Code für diese Suchanfrage hier veröffentlicht: Optimizing eine seltsame MySQL-Abfrage . Was komisch ist, ist, dass wenn ich diese Abfrage in einer GUI (Navicat) ausführe läuft es in ca. 5 Sekunden, aber auf der Webseite dauert es über eine Minute zu laufen; Die Ansicht ist kompliziert, aus Gründen, die ich im ursprünglichen Beitrag skizziere, aber ich würde denken, dass MySQL Ansichten optimiert und zwischenspeichert wie SQL Server (oder vielmehr, wie ich diesen SQL Server lese), um die Leistung zu verbessern.

    
Wayne Molina 23.12.2009, 14:05
quelle

1 Antwort

4

Sie können gespeicherte Prozeduren von Rails aufrufen, aber Sie werden die meisten Vorteile von ActiveRecord verlieren, da das generierte Standard-SQL nicht funktioniert. Sie können die native Datenbankverbindung verwenden und sie aufrufen, aber es wird eine undichte Abstraktion sein. Vielleicht möchten Sie DataMapper in Betracht ziehen.

Wenn ich auf Ihre letzte Frage zurückblicke, würde ich den DBA dazu bringen, einen Auslöser zu erstellen, um eine relationellere Struktur aus den Daten zu erstellen. Der Auslöser würde die EVA-Daten in eine Tabelle einfügen, was die einzige Möglichkeit ist, materialisierte Ansichten in MySQL zu erstellen. Auf diese Weise zahlen Sie nur eine kleine inkrementelle Hintergrundkosten beim Einfügen, und die Anwendung kann normal ausgeführt werden.

Wie auch immer ...

%Vor%

Aber es gibt ein offenes Ticket da draußen auf dem Leuchtturm , was darauf hinweist, dass dieser Ansatz möglicherweise nicht funktioniert, ohne einige der Parameter zu ändern, um die Verbindung zu nutzen.

    
MattMcKnight 23.12.2009, 15:36
quelle