Asp to PHP Konvertierung
Geizhals » Forum » Programmierung » Asp to PHP Konvertierung (58 Beiträge, 433 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.............
Re(13): Asp to PHP Konvertierung
26.06.2006, 19:54:51
Lächerlich ;-)


Wenn DU das sagst...

An sich teile ich selten Ardjan's Meinung. Er ist kompetent, engagiert, hat
den Blick "über das Ganze"


Bis auf den "Blick über das Ganze" stimme ich dir zu. Er gehört leider auch zu denen, die blindlings hinschlagen wenn's ums AMS geht. Und er macht sich nicht die Mühe seine festgefahrene Meinung EVENTUELL zu revidieren. Er VERSTEHT auch nicht, warum es manchmal zu diesen von ihm zitierten "Problemen" kommt. Es kommt meistens deshalb dazu, weil viele Menschen verlernt haben zu kommunizieren. Und wenn es dann mangels dieser einseitigen NICHT-Kommunikation zu "vorgeschriebenen" Vereinbarungen kommt, die demjenigen dann eben nicht "passen", dann wird hingedroschen. Mir kommt's manchmal so vor, als WARTEN bestimmte Leute nur darauf, daß wieder einmal etwas (in ihren Augen) "Falsches" passiert nur um dann sofort in den stereotypen Chor der "Hindrescher" einzustimmen.
Extrem kontraproduktiv!

Hier teile ich aber aus allen Berichten übers AMS seinen Punkt... Das alleine mag was heissen


Ich teile seine Ansicht nicht. Siehe oben.
Ich bin weder betriebsblind (kann ohne Übertreibung behaupten, ein wenig mehr vom Leben zu kennen als viele andere, da ich mir die MÜHE mache, Bereiche die ich nicht kenne zu analysieren und Zeit investiere um zu verstehen warum gewisse Dinge so laufen und nicht anders) noch euphorisch wenn es um's AMS geht.
Ich KANN beurteilen ob etwas gut funktioniert oder nicht, aufgrund meiner langjährigen beruflichen Erfahrung - im AMS und auch ausserhalb.

Weiteres interessantes Beispiel sind die in den letzten Jahren wie Pilze aus dem Boden schiessenden Arbeitsloseninitiativen - bis auf wenige Ausnahmen sind sie unnötig und tun nichts anderes als bewusst zu polarisieren und aufzuhussen!
Wenn die ihre Energie in sinnvollere Agenden stecken würden, dann hätten sie eventuell die Aufmerksamkeit die sie gerne hätten und es würden sie eventuell auch die Verantwortlichen ernst nehmen.
Einen Schreihals, der stereotyp immer die gleichen Phrasen runterdrischt kann man im Gegensatz dazu eben NICHT ernstnehmen.
Und genau das wird von vielen blindlings praktiziert ohne die Hintergründe zu durchleuchten oder gar eine ernsthafte Diskussion einzugehen.
Traurig.

. . .
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
........
Re(8): Asp to PHP Konvertierung
26.06.2006, 11:04:18
Pfew.... Das sehe ich ganz anders als Du ;-)

Meine Apps sind so gebaut, daß sie prinzipiell (mit wenigen Ausnahmen) net cachen.
Begründungen:
- Es wird einfacher und damit tendenziell fehlerfreier. Denn nach jedem commit müßtest deinen Cache ja wieder invalidieren, da ja uU ein anderer Benutzer inzwischen deine gecachten Daten modifizierte.
- EIN Lösungsansatz für obiges sind NOTIFYs, die zB PostgreSQL kennt. Das könnte ungefähr so klappen: Beim Erstzugriff cacht jeder Benutzer ab Abfrage zB Metadaten. Gleichzeitig registriert er sich zB für das NOTIFY "HABE_PERSONALTABELLE_MODIFIZIERT" am DB-Server. Sobald ein UPDATE/INSERT/DELETE auf die Tabelle losgeht, stößt ein Trigger das NOTIFY am DB-Server an und jeder Benutzer kann dieses NOTIFY abfangen - durch invalidieren des Cache.
- Performance: Der Witz dabei ist, daß bei großen Datenmengen eine DB bei weitem performanter im Zugriff ist als jede selbstgeschnitzte PHP/Java/...-App. Alleine deshalb, weil kein Schwein von uns freiwillig den Optimizer, Statistiken, ... nachbaut ;-). In C/C++ könntest via der perfect-hash-Lib nahe drankommen, aber in Wirklichkeit kaum

Mein Punkt ist, daß eine sauber designte Datenbank auch bei größten Datenmengen bei weitem performanter ist als jedes Client-Caching, insbesondere da (damit der Client überhaupt cachen kann) die Datenmengen erst mal übers Netz müßten.

Natürlich impliziert das
- ein sauberes Design
- Ausnutzung aller Technologien wie zB
    - Materialized Views
    - Korrekte Indizierung inklusive Wahl des Indextyps (Wann nehme ich B-Tree, wann R-Tree, wann nehme ich einen Hash-Index, wann nehme ich einen Bitmap-Index, wann schreib' ich einen eigenen, wann mach ich einen function-based)
    - korrektes Unterstützen des Optimizers(Statistiken)
    - BitBuckets bzw. Histogramme
    - Gelegentlich Optimizer-Hits mitgeben
    - Beachten der Implikationen der (Nicht-)Verwendung von Bind-Variablen
    - passende Konfig der DB, so zb PCTFREE, ...
    - "Aufrüstung" der DB durch in C formulierte Funktionen
    - Stored Procedures
    - Wenn einige Queries dynamisch generiert werden und du net die Hand drauf hast: Query rewrites
.....

Ich komme aber /vermutlich/ aus einem ganz anderen Eck als Du - eben aus der Systemprogrammierung, net Anwendungsprogrammierung - und habe daher ganz sicher andere Zugänge als Du (und will deine keinesfalls kritisieren).

Optimal ist natürlich eine Synergie von beiden Optimierungen... Wobei:
Wenn die Query langsam ist und der Server für mehrere Sekunden auf 100% geht - dann ist ganz sicher net die Applikation zu tunen (außer dem SQL-Statement natürlich), sondern definitiv im Datenmodell bzw. in der Config des DB-Servers was ganz falsch...

Grundsätzlich sollte IMHO ein DB-Server
- massiv Memory-Bound sein
- ziemlich IO-Bound
- und praktisch nie CPU-Bound.

Alles natürlich nur in der großen IMHO-Klammer und je nach Anwendungsfall unterschiedlich - in meinem Umfeld (=bei den von mir wahrgenommenen Tasks) sieht's i.d.R. so aus. Kein Anspruch auf Vollständigkeit ;-)

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.........
Re(9): Asp to PHP Konvertierung
26.06.2006, 11:18:57

- Es wird einfacher und damit tendenziell fehlerfreier. Denn nach jedem commit müßtest deinen Cache ja wieder invalidieren, da ja uU ein anderer Benutzer inzwischen deine gecachten Daten modifizierte.

Nein bei verwendung einer Identiy Map wird genau das Problem der Nebenläufigkeit Umgangen. Allternativ (im kleineren Ansatz) wäre auch ein SQL-CacheDependency ein Lösungsansatz. (Der Cache wird automatisch invaild wenn Daten geändert werden)


- Performance: Der Witz dabei ist, daß bei großen Datenmengen eine DB bei weitem performanter im Zugriff ist als jede selbstgeschnitzte PHP/Java/...-App. Alleine deshalb, weil kein Schwein von uns freiwillig den Optimizer, Statistiken, ... nachbaut . In C/C++ könntest via der perfect-hash-Lib nahe drankommen, aber in Wirklichkeit kaum

Ich kann zwar nur aus der Microsoft .net Welt reden aber:
Da kann ich dir nur x-Mal widersprechen. Remoteaufrufe sind eigentlich immer um vieles langsamer als interne aufrufe. Besonders Cachezugriffe belasten im besten fall nichtmal den Webserver (wird bereits im Webserver treiber erledigt). Performance gewinn ist oft ein tausendfaches.


ein Punkt ist, daß eine sauber designte Datenbank auch bei größten Datenmengen bei weitem performanter ist als jedes Client-Caching, insbesondere da (damit der Client überhaupt cachen kann) die Datenmengen erst mal übers Netz müßten.

Ich spreche von Serverseitigen Caching und NICHT von Clientcaching. (Beispiel: Laden eines Kunden. Erstellen Des Kundenobjektes. Hinzufügen des Kundenobjectes dem Cache.) Ruft der nächste User den Kunden auf erfolgt ein Arbeitsspeicherzugriff und kein Zugriff auf die Datenbank) Wieviel das schneller ist kannst du dir selbst denken.

Aber ich denke das wird sowieso eine Endlosdiskussion. Ich bin eben der Meinung das die Applikation von der Anwendung von der Datenbank KOMPLETT getrennt werden soll(te). Optimieren kannst dann die Datenbankzugriffe immer noch. Allerdings sollten auf Dinge wie Caching keines falls verzichtet werden. Aber wir können uns gerne drauf einigen, dass sowohl die Anwendung als auch die Datenbankzugriffsidee dahinter schrott ist +ggg+

Die obrigen Aspekte sind übrigens erst zu einem kleinen Teil meine eigenen Erfahrungen sondern eher die Sicht eines (wirklichen) Profis bei Unternehmensanwendungen für große Versicherungen, etc. Wenn dich das Thema interessiert empfehle ich dir Patterns of Enterprise Application Architecture von Martin Fowler. Das Buch ist echt WOW ;-)

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
..........
Re(10): Asp to PHP Konvertierung
26.06.2006, 12:00:47
Naja, die Identity Map kannst aber nur verwenden, wenn es nur genau einen Pfad zur DB gibt - zB durch den Applikationsserver, oder ? Sobald du Statements gegen die DB hast, die direkt fahren sollten (zB vom HOST) wird's stressig (vermute ich mal ;-) ).

Des weiteren ist das Problem eine Frage der Menge - wo ich eben meinte, daß Datenbanken schneller sind:
Angenommen, du hast eine Tabelle mit mehreren 100k Einträgen (zB deine Kundendatenbank) - und möchtest nur mal alle Kunden mit dem Anfangsbuchstaben "M" finden. Da gäbe es nun 2 Wege:
1.) Du hast alle 100K in deinem AppServer gecacht - das bedeutet aber, daß du Memory in den Appserver anstatt in den DB-Server investiert hast.
1a.) Wenn dem so ist - dann hast du den Kundennamen im schlimmsten Fall so hinterlegt, daß du ne lineare Suche brauchst... also durchschnittlich 50k Vergleiche
2.) Du machst eine einfache Query per SQL.
Du hast zwar den Overhead des Parsens/optimizens/..., andererseits gewinnst du massivst durch den eben sehr effizienten Optimizer und die dann nur notwendigen (Hausnummer) durchschnittlich 20 Indexzugriffe plus einem Datenblockzugriff bei rund mehr als einer Mio Datensatzzeilen.

eine preparsed-SQL-Query kostet so ziemlich genau 0... Netterweise kümmert sich dein DB-System ja laufend auch drum, daß es die gerade am häufigsten  verwendeten Statements eh im eigenen Cache läßt und sich so den Parsing und den Optimizer-Run erspart (und genau das sind ja die teuren).

Wenn die Kundentabelle nun oft verwendet wird, so kommen die oft verwendeten Blöcke (=genau die relevanten Kunden) zusätzlich in den Datencache.

Wenn du aber sogar ne Index organized Table verwendet hast, so ist der Datensatz direkt im Indexnode - also nochmal flotter.

Natürlich hast du prinzipiell recht, daß ein Memory-Zugriff um den Faktor 1000+ schneller sein kann als DiskIO (abhängig natürlich von den Storagesystemen. Bei ner IBM-ESS bekommst zB 2GB/s Datenrate - da werden die Potenzen schon weniger). IMHO sollten bei großen Datenbanken die oft benötigten Indizes zumindest tendenziell im Ram liegen - wenn es "Standard"-Queries sind, wo viele Datensätze durchsucht werden und das Resultset eher klein ist, scheint das für mich zielführend zu sein.


Ich bin eben der Meinung das die Applikation von der Anwendung von der Datenbank KOMPLETT getrennt werden soll(te

Das ist ein sinnvoller Design-Ansatz. Wobei DBs derart viel Funktionalität bieten, daß es IMHO fast fahrlässig wäre, auf sie zu verzichten. Es ist IMHO auch fahrlässig, wenn Appentwickler die DB als eine Blackbox betrachten (und bei uns auch untersagt. Ein App-Entwickler, der zB keine Storage-Parameter-definitionen für seine DB liefert, kann sich brausen gehen), andererseits auch fahrlässig, wenn die DB'ler sich nicht nach den Bedürfnissen der App'ler richten. Sowohl Client als auch App-Server als auch DB-Server müssen bei großanwendungen sehr verzahnt sein. Vorteil: Viel kürzere Entwicklungszeit, Massiv performantere Apps. Nachteil: Bindung an ein DB/AppServer-System.

IMHO ist SW-Engineering immer die Kunst der Implementierung des machbaren. Wenn du ne Standard-DB hast (sagen wir 200Gigs komplettstorage) wird's zugegeben fast wurscht sein. Wenn du an die Grenzen der Möglichkeiten gehst, mußt IMHO (und ich meine echt IMHO ;-) ) Kompromisse eingehen - und da gehört auch das Aufgeben des grnudsätzlich brauchbaren Black-Box-Ansatzes.

Wobei ne BlackBox und DB sich IMHO eh net vertragen, denn keine DB hat den SQL99-Standard 100%ig umgesetzt... Und der Ansatz des "kleinsten gemeinsamen Nenners" bietet zwar den Vorteil der Flexibilität, dafür zahlt man halt im Sinne von Mehraufwand bei der Entwicklung bzw. schlicht weniger Möglichkeiten. Es mag aber durchaus zuhauf Anwendungsfälle geben, wo genau der Blackbox-Ansatz absolut zielführend und sinnbringend ist..


Ich spreche von Serverseitigen Caching und NICHT von Clientcaching.

Und ?
Der App-Server (oder Webserver) ist ja auch nur ein Client für den DB-Server, oder ?

26.06.2006, 12:32 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung