Mittwoch, 22. Oktober 2008
Zend_Db_Adapter, MySQL und Master/Slave
Solar kann es, händisch geht es ... leider kann es das ZF nicht. Kriterienbasierte Unterscheidung von Datenbank Servern. Bei einem unserer Kunden arbeiten wir mit einem MySQL Replikationsserver, wobei die SELECT Statements auf eine Datenbank geleitet werden, die DML Statements auf eine Andere. Kriterium für diese Unterscheidung ist schlicht und ergreifend der Inhalt der Query bis zum ersten Space.
In der manuellen Variante der Query, bzw. der funktionsorientierten Version, ist diese Unterscheidung durchaus einfach. Hier hilft ein strpos() oder ein regulärer Ausdruck problemlos weiter. Bei einem komplexeren Produkt, wie dem Zend Framework, ist dies durch die Adapter Regelung nur durch das Ableiten des jeweiligen, framework-eigenen, Adapters möglich. Hinzu kommt, dass man nicht mehr "so einfach" an die Query heran kommt, da es sich auch um ein Zend_Db_Select Objekt handeln könnte.
Ein weiterer Punkt sind die Kriterien, die zur Auswahl eines Server benötigt werden. Hier bot es sich an, einen allgemeinen Ansatz zu verfolgen, welcher verschiedenartige Kriterien erlaubt und dem Framework Ansatz getreu die Bedingungen in Objekte kapselt.
Heraus gekommen ist aktuell ein abgeleiteter Zend_Db_Adapter_Pdo_MySQL, in welchem die Methoden _connect und _query überladen sind. Hinzu kommen zwei Klassen Db_Adapter_Pdo_Mysql_Connection_Criteria und Db_Adapter_Pdo_Mysql_Connection_CriteriaStack, wie auch eine Klasse Db_Adapter_Pdo_Mysql_Connection_CriteriaAssembler. Criteria und Criteria Stack evaluieren die vom CriteriaAssembler zusammengefügten Bedingungen für die Entscheidung des Servers. Im obigen Beispiel ist es die Bedingung "Starts with SELECT", welche für den Slave spricht.
Karsten hatte noch die nette Idee, einen Observer auf den Event "onForce" zu setzen und während der Laufzeit noch in dieses Verhalten eingreifen zu können. Klingt nicht übel ;)
Quellcodes muss ich nachliefern, ich hab momentan kein autarges Beipiel hier. Denke mal es gibt am Sonntag die Quellen dazu.
Dienstag, 14. Oktober 2008
PHP 5.3 unter Ubuntu
Yehaa. PHP 5.3 unter Linux System selbst zu kompilieren ist schon fast lustig. Debian basierte Systeme eignen sich da besonders gut. Dank APT hat man die meisten (ich bin bisher noch auf keine gestoßen, die nicht verfügbar wäre) development Bibliotheken zur Verfügung. Vom Setup her empfiehlt sich ein ebenfalls selbst kompilierter Apache Server, da man so recht angenehm "neben" der Debian üblichen Paketierung arbeiten kann.
Die PHP 5.3-alpha2 bringt unter Anderem den MySQL native driver mit, den immer noch diskutierten Namespace Support, Late Static Binding und die von PHP6 herunterportierte Abhängigkeit zur libicu (wenn man denn möchte ;) )
- ./configure --prefix=/srv/php5.3 --with-openssl --with-zlib --enable-bcmath --with-bz2 --with-curl --with-curlwrappers --enable-exif --enable-ftp --with-gd --enable-gd-native-ttf --with-gettext --with-gmp --with-mhash --enable-intl --with-ldap --enable-mbstring --with-mysql --with-mysqli --with-pdo-mysql --enable-soap --enable-zip --with-apxs2=/srv/apache2/bin/apxs
Performancetests folgen...
Montag, 13. Oktober 2008
ForkLift - Midnight Commander für Mac
So, nachdem ich nun den dritten Anlauf starte diesen Artikel zu schreiben, hoffe ich Ihn beenden zu können.
Ich denke nur wenige kennen noch den Urvater der Dual-Panel Dateisystem-Navigatoren ... Peter Nortons's Norton Commander. Spätere Ausführungen und Clone finden sich auf beinahe jedem Betriebssystem. Seien es SpeedCommander, TotalCommander unter Windows oder auch der MidnightCommander oder Krusader unter Linux. Nun vermisste ich seit meinem Wechsel zum ein solches Tool. Ich arbeite recht häufig mit SFTP Verbindungen, welche mir unter Mac OS X 10.5 recht umständlich vorkommen. Ich suchte daher nach einem Clone auf dem Mac und wurde, (danke an Imo) bei der Firma BinaryNights fündig. ForkLift heisst das bisher einzige Produkt der Firma. Die 44,95 USD teure Software sollte als die Lösung meiner Probleme sein... Und sie war es auch. Ich habe den Betrag gern investiert, denn ich habe eine stabile Software mit gutem Funktionsumfang erhalten.
ForkLift kann Verbindungen über verschiedene Protokolle aufbauen, darunter auch das von mir benötigte SFTP, aber auch FTP und Amazon's S3. Hinzu kommen eine aktuelle Codebase des Produkts selbst und die von mir sehr liebgewonnenen Growl Notifications, welche einen z.B. über Dateiübertragungen im Hintergrund informieren.
eine Möglichkeit Dateisysteme oder einzelne Dateien miteinander zu vergleichen fehlt mir leider, ebenso wie die Möglichkeit die Software mit eigenen Plugins zu erweitern. Hier würde sich ein SVN/CVS/SCM Client anbieten.
Die FeatureRequest habe bereits eingereicht ;)
Sonntag, 12. Oktober 2008
Google Performance Tools und MySQL
Vor einiger Zeit schrieb Guillaume in seinem Blog zu DotDeb einen Artikel über die Google Performance Library und deren Einbindung in eine Debian Etch -> MySQL 5.0.x Kombination.
Ich teste diese Konstellation seit einiger Zeit auf meinen Live Server (Bitte kein Gemecker über die Kombination "Live Server" und "teste" ;) ) und kann bei erhöhter Last einen Performance Gewinn von knapp 20% feststellen. Testgrundlage sind Apache's ab und mysql_bench, sowie zwei s9y Blogs im Livebetrieb.
Nebenwirkungen konnte ich bisher keine Feststellen, wobei ich bisher nicht über eine DB Größe von 100 Mbyte hinaus gegangen bin. Sofern ich es schaffe unsere Admins bei TWT zu überzeugen, dass diese Library einen Testlauf mit einer Kopie einer Kundendatenbank (ca. 17 Gbyte ;) ), sinnvoll ist, kann und werde ich die Ergebnisse hier ergänzen.
Startup
Nachdem ich nun den zweiten Blog aufgesetzt habe (MovableType war irgendwie nicht mein Ding), kann ich nun endlich loslegen über meine Erfahungen und Erkenntnisse in Puncto Mac und PHP zu schreiben. Ich besitze erst seit zwei Monaten ein (mittlerweile sehr lieb gewonnenes) MacBook Pro (2,4 GHz Variante, 15").
Ich arbeite seit einiger Zeit für die TWT Interactive als Web Entwickler und darf dort mit diesem MacBook meine tägliche Entwicklungsarbeit voran treiben. Ich kündige gleich mal einen kleinen Vergleich zwischen einigen Entwicklungsumgebungen an dieser Stelle an.Im Vergleich werden Eclipse PDT und Zend Studio for Eclipse sein, ebenso wie Smultron und BBEdit. Auch wenn es einige IDEs mehr auf dem Markt gibt, sind dies m. M. n. die Primären.



