ActiveRecord-Iterator



Ähnliche Dokumente
Übungen zur Softwaretechnik

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

Installation OMNIKEY 3121 USB

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Professionelle Seminare im Bereich MS-Office

3. Stored Procedures und PL/SQL

Einstellen der Makrosicherheit in Microsoft Word

Sybase Central Dokumentation Aktivierung der Monitoringfunktion

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Internet Explorer Version 6

Datenexport aus JS - Software

Microsoft Update Windows Update

Programmierkurs Java

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

OpenMAP WEBDrive Konfiguration. Oxinia GmbH , Version 1

Webseitenintegration. Dokumentation. v1.0

Installationsanleitung

Diese Daten fließen dann sowohl der Arbeitszeitverwaltung der Mitarbeiter, dem Tätigkeitsnachweis und der Nachkalkulation von Projekten zu.

SILVERBALL MAX. Technische Info V10 Update

GSD-Radionik iradionics Android-App

Java: Vererbung. Teil 3: super()

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

teischl.com Software Design & Services e.u. office@teischl.com

Artikel Schnittstelle über CSV

Kommunikationsübersicht XIMA FORMCYCLE Inhaltsverzeichnis

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

Die integrierte Zeiterfassung. Das innovative Softwarekonzept

Fachapplikationen in heterogenen IT Landschaften

Anzeige von eingescannten Rechnungen

A-CERT ADVANCED pdf-signaturprüfung einrichten 2008

INSTALLATION DES SQL SERVER 2008r2 für rza fakt

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

Import und Export von Übergängern

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Upgrade-Leitfaden. Apparo Fast Edit. Wechsel von Version 2 auf Version oder Wechsel von Version auf Version 3.0.

Technische Hinweise zur Installation und Freischaltung von Beck SteuerDirekt mit BeckRecherche 2010

Vorlesung Betriebstechnik/Netzplantechnik Operations Research

VERWALTUNG. Postfächer, Autoresponder, Weiterleitungen, Aliases. Bachstraße 47, 3580 Mödring

SANDBOXIE konfigurieren

Installationshilfe und Systemanforderungen. Vertriebssoftware für die Praxis

Terminabgleich mit Mobiltelefonen

Robot Karol für Delphi

Raiffeisen-Volksbank Wemding eg

Gambio GX2 FAQ. Inhaltsverzeichnis

ecaros2 Automatische Katalogaktualisierung

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

EASYINSTALLER Ⅲ SuSE Linux Installation

K-TAG Master. Dateientschlüsselung/ Dateiverschlüsselung für Slaves. Version 1.0

Fernwartung. ICT-Systeme. 1. Computer mit ISDN-Karte (z.b. AVM-Fritz!Card) und korrekt installiertem CAPI2.0-Treiber.

IRF2000 Application Note Eingeschränkter Remote Zugriff

Grundlagen von Python

Umstieg auf Microsoft Exchange in der Fakultät 02

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

Elektronischer Kontoauszug

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Internet online Update (Mozilla Firefox)

SMS/ MMS Multimedia Center

HWP-WIN Update Argumente für eine Aktualisierung Präsentiert durch Sage Business Partner Johann König

Backup der Progress Datenbank

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

Gezieltes Kontakt- und Kundenmanagement. Die Software für Ihren Erfolg 2,8 Millionen Anwender weltweit! Installationsleitfaden

Überprüfung der digital signierten E-Rechnung

Gussnummern-Lesesystem

Zwischenablage (Bilder, Texte,...)

Objektorientierte Programmierung

Upgrade-Leitfaden. Apparo Fast Edit 1 / 7

LabTech RMM. Monitoring von MDaemon. Vertraulich nur für den internen Gebrauch

So funktioniert die NetWorker 7.5 Eigenschaft zum Sichern umbenannter Verzeichnisse ( Backup renamed Directories )

Einbindung einer ACT!12-16 Datenbank als Datenquelle für den Bulkmailer 2012

Anleitung SEPA-Lastschriften mit VR-NetWorld Software 5

Automatische Installation (wenn das SSO-Applet nicht vorhanden ist)! Abbildung 1:Auswahldialog für Installationslaufwerk

Kurzeinweisung. WinFoto Plus

Elektronischer Kontoauszug

Leitfaden zum Update von sofortüberweisung.de in xtcmodified ecommerce

1. Legen Sie die mitgelieferte CD in ihr Laufwerk des PC, diese startet dann automatisch mit folgenden Fenster, klicken Sie nun English an.

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Task: Nmap Skripte ausführen

PDS Terminkalender Anwender-Dokumentation

Der richtige Start mit Exact Online

SF-RB. Modul Provisionsabrechnung & Planung Reiseagentenprovisionsabrechnung & Planung. SF-Software Touristiksoftware

Hinweise zur -Nutzung für Studierende

BlueEvidence Services in Elexis

Programmablauf für die Batch Wlan Komplettpakete mit Windows CE

Systemeinstellungen im Internet Explorer für WEB-KAT

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

OBU 2.0. Wer zuerst kommt, fährt am besten. Jetzt kommt die Software-Version. Nutzerflyer_1606_RZ :10 Uhr Seite 1

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Tagesprogramm

Anleitung: Sammel-Rechnungen für Lizenzen bei Swiss Basketball

Vorgehensweise bei Lastschriftverfahren

Anleitung Redmine. Inhalt. Seite 1 von 11. Anleitung Redmine

Installationsanleitung Webserver - Datenkommunikation

Erfahrungen mit Hartz IV- Empfängern

Windows-Sicherheit in 5 Schritten. Version 1.1 Weitere Texte finden Sie unter

Sage Customer View für Windows 8 Funktionen

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Transkript:

ActiveRecord-Iterator Batch-Verarbeitung mit ActiveRecord Andreas Gungl OTTO Software Partner GmbH 1

OTTO Software Partner Mainframe (ASM / Cobol) C / C++ Java SE und Java EE Seit 2005 Ruby und Rails Call Center Software Logistik-Steuerung in Lagern (bis 700.000 Sungen/Tag) Fakturiersysteme (tgl. 1,5 Mio. Auftragspos. zu bewerten) Komplettsystem für Versandhandel (AMOS) 2

Module für: AMOS - Versandhandelssystem Einkauf Auftragsverwaltung (mit Erfassung im Call Center und Webshop-Online-Anbindung) Fakturierung Debitorenmanagement Lagerverwaltung Bis 20.000 Aufträge pro Tag, ca. 2,5 Mio. Kundaten Entstanden 1996-98 auf Basis von Linux (Oracle- DB, C/C++, Tcl/Tk, seit 2006 Rails sowie RubyQt) 3

Warum Rails? Einfachheit und Komfort von Rails (Convention over Configuration, Test First) Fasziniere Möglichkeiten von ActiveRecord Zeitspare Implementierung von DB-Zugriffen und Webservices Migrationspfad im Call Center bedingte Einsatz von RubyQt Synergien bei den Modelklassen (Nutzung im Call Center, in Online-Schnittstellen und in Batches) 4

Beispiele für Batches: Batches in Ruby Bestandszuteilung Mahnwesen Vorbereitung der Lagerentnahmen (Picking) Alternative Implementierungen: PL/SQL C/C++ mit OCI Beide Alternativen generieren erheblichen Mehraufwand! 5

Hauptproblem: ActiveRecord und Batches Extremer Speicherverbrauch bei ActiveRecord#find :all mit tausen Objekten Existiere Lösungen für Rails Iterate over the records in groups http://snippets.dzone.com/posts/show/5461 Faking cursors in ActiveRecord http://weblog.jamisbuck.org/2007/4/6/faking-cursors-in-activerecord Nachteile: Transaktionen werden u.u. gesplittet Keine Read Consistency Suche nach einer Lösung, die die ResultSet- Iteration in ActiveRecord erlaubt 6

ActiveRecord-Iterator Schnittstelle: MyTable.find_each(:conditions => ) do record # do something with record MyTable.find_each_by_sql(...) do record # do something with record ActiveRecord::Base soll erweitert werden. Die Methodennamen deuten auf die Iteration hin. 7

Anpassung in ActiveRecord::Base ActiveRecord-Iterator module ActiveRecord class Base class << self def find_each_by_sql(sql, &block) connection.select_each(sanitize_sql(sql), #{name} Load ) do record yield instantiate(record) Problem: DatabaseStatements#select_all funktioniert nicht wie nötig! 8

ActiveRecord-Iterator Anpassung in DatabaseStatements um den Block weiterzureichen: module ConnectionAdapters module DatabaseStatements def select_each(sql, name = nil, &block) select_each_row(sql, name = nil) { row_hash yield row_hash } Anpassung der Datenbank-Adapter für die Verarbeitung des Blocks ist nötig! 9

Vorbild: Anpassung am MySQL-Adapter class MySQLAdapter < AbstractAdapter def select_rows(sql, name = nil) @connection.query_with_result = true result = execute(sql, name) rows = [] result.each_hash { row rows << row } result.free rows 10

Anpassung am MySQL-Adapter Neue Iterator-Methode: class MySQLAdapter < AbstractAdapter def select_each_row(sql, name = nil) @connection.query_with_result = true result = execute(sql, name) result.each_hash { row yield.row } result.free nil Der Aufruf aus DatabaseStatements#select_each_row erfolgt mit Block, der nun für jede Zeile im ResultSet ausgeführt wird. 11

Unterstützte DB-Adapter: ActiveRecord-Iterator Oracle MySQL JDBC (bis 0.9 und für 0.9.1) Für den JDBC-Adapter sind Patches nötig, um die in Java liege Implementierung anzupassen. Ab Version 0.9.1 des Adpaters hat dieser eine veränderte innere Struktur. Daher war der alte Patch nicht mehr verwbar. Die Anpassung weiterer Adapter ist möglich... 12

Speicherverbrauch Verarbeiten von 80.000 Kundaten mit JRuby 1.1.4 2 GB ohne Iterator (mit massiver Garbage Collection), 128 MB mit Iterator 2500 2000 1500 1000 ohne Iterator mit Iterator 500 0 MB 13

Schwachstellen Nicht alle Datenbanken sind unterstützt. Problem beim iterativen Verarbeiten von Mastermit Detailtabellen im JOIN :include Option lädt nicht wie eventuell erwartet automatisch alle Details des Masters Ausgeh von Detailtabellen mit dem Master im JOIN besteht das Problem nicht. 14

ActiveRecord-Iterator Ideal wäre sicherlich die Aufnahme der Iterator- Funktionalität in das ActiveRecord-Framework mit dann gesicherter Unterstützung für alle Datenbanken. 15

ActiveRecord-Iterator Fragen? 16

ActiveRecord-Iterator Danke für Ihr Interesse! 17