Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1.276
  • Benutzer seit

  • Letzter Besuch

Beiträge von dr.dimitri

  1. Olymp und Seidensticker sind aber aus eigener Erfahrung spitze weil man die sogar als Mann super bügeln kann xD

    Die musst Du überhaupt nicht bügeln wenn Du es richtig machst. Ohne schleudern einfach tropfnass auf einen Kleiderbügel und dann (z.B. in der Dusche) aushängen lassen bis sie trocken sind. Dauert ca. 7-8 Stunden, die kleinen Unebenheiten gehen dann beim Tragen mit der Körperwärme raus.

  2. Ich arbeite bei einer Versicherung. Für die IT würde ich bei der Vorstellung zu sauberer Jeans, Businesshemd (Olymp, Seidensticker, Eterna, Eton :D etc.) und, falls vorhanden und man es persönlich auch möchte, noch ein passendes, sportlich-legeres Sakko raten.

    Statt Jeans wäre natürlich auch eine Chino (dunkelblau, kamel, braun, schwarz) oder eine äquivalente Stoffhose möglich. Schwarze oder dunkelbraune Halbschuhe/Stiefel (je nach Wetterlage). Sneaker und Turnschuhe würde ich erstmal daheim lassen, bis ich einschätzen kann wie das ankommt.

    Kein Sweatshirt, Kaputzenpulli, Oversizehose aber das muss ich einem Bankkaufmann eh nicht sagen ;)

  3. Ich kann zum Thema fachlich nicht viel beitragen, finde die Präsentation aber inhaltlich erstmal gut. Du verzichtest weitgehend auf nerviges "hereinfliegen" von Text und die Textdichte ist, bis auf ein paar Ausnahmen, angemessen.

    Die dunkle Hintergrundfarbe könnte beim Ausdrucken zu lesbarkeitsproblemen führen. Schon mal getestet?

    Die Netzabdeckungskarte von Vodafone kann man schon so drinnen lassen, wenn man z.B. den Schluss zieht, dass die Netzabdeckung momentan hauptsächlich die Ballungszentren betrifft.

  4. Hi,

    beide Lösungswege sind nicht sauber, da sie keine Multiuserzugriffe berücksichtigen. Es ist also nicht sichergestellt, dass plötzlich zwei Revisionen auf aktiv stehen.

    Um das zu gewährleisten, gehst Du wie folgt vor:

    - In der Entität Revision legst Du dein neues Feld active an, und definierst darauf einen CHECK-Constraint, der nur NULL oder 1

    erlaubt.

    - Auf das Feld, welches die Verbindung zum Dokument herstellt und dem Feld active legst Du einen Unique Index

    Damit hast Du sichergestellt, dass nie zwei Dokumente den Wert 1 in dieses Feld bekommen, denn die DB würde das verhindern.

    Möchte deine AW jetzt die aktive Revision ändern, so lockt sie zuerst die aktuelle und zukünftige Revision per SELECT ... FOR UPDATE dann setzt sie in der aktiven Revision das Feld active auf NULL und in der neuen Revision auf 1. Dann COMMIT.

    Deine Anwendung muss des weiteren damit zurecht kommen, dass der SELECT ... FOR UPDATE fehlschlägt, weil eine andere AW schon darauf zugreift, bzw. dass eine Unique Constraint Violation auftritt (was bei korekter Implementierung eigentlich nicht der Fall sein sollte, aber welche Anwendung ist schon 100%ig fehlerfrei)

    Dim

  5. Wieso muss man denn bei einer solchen Datenübertragung gleich eine dicke Middelware auffahren?

    Es muss ja nicht gleich MQSeries sein. Es gibt auch schlankere Alternativen.

    Was ist an meine Queue besser als an einer Dateiübertragung mit anschließender Überprüfung auf Vollständigkeit?

    Eine Queue ist asynchron, der Client kann die Daten abschicken und sich dann sicher sein, dass sie am Server angekommen sind. Aber natürlich sind auch andere Methoden möglich. Auf einen Queue kann ich z.B. auch einen lsitener setzen, kann die Reihenfolge der Abarbeitung einstellen etc. das müsste ich ansonsten noch selbst programmieren.

    Um mit einer Queue reden zu können brauche ich auch wieder Client Bibliotheken wo ich mich mit Versionen rum schlagen muss.

    Das brauchst Du auch, wenn du die Daten per FTP etc. überträgst.

    Dim

  6. Nun zur Frage, ist es sinnvoller eine direkte Verbindung zwischen Client und Datenbank aufzubauen oder einen zwischenschritt in dem nur die reinen Daten in das Firmennetz übertragen werden und nachdem die Daten separat in die Datenbank eingelesen werden. Es geht mir hierbau um die Geschwindigkeit. Der Client soll sich alle 4 Std. mit der Datenbank verbinden und schreiben oder die reinen Daten übertragen.

    Das ist ein klassischer Anwendungsfall für eine Middleware sprich Queueing. Deine Anwendung packt die zu übertragenden Informationen, übertragt diese in die Queue und von dort aus werden sie asynchron von einem weiteren Programm abgeholt und abgearbeitet.

    Deine dezentrale AW muss nicht warten, bis die Daten wirklich in der DB persistiert sind, sie kann aber davon ausgehen, dass die Pakete übertragen wurden, wenn der Vorgang fehlerfrei abgeschlossen wurde.

    Dim

  7. Wofür braucht man einen Webservice um die Daten zu validieren? Man kann mit Hilfe von Constraints, Trigger und Stored Procedures direkt auf der Datenbank dies machen. Ein Webservice ist durchaus ein Angriffspunkt, wenn er nicht entsprechend für die Datenmenge konzipiert ist.

    Ohne Worte. :old

  8. Das wird / wurde oft für row-versioning benutzt wie man das bei Datawarehouse und replications braucht (heute würde man da ROWVERSION benutzen, alles andere ist legacy code).

    Nur, wenn man in einer perfekten Welt lebt, und davon ausgeht, dass man niemals den Server wechselt, niemals restoren muss, niemals die DB wechselt...

    Legacy code... :rolleyes:

    Dim

  9. Das verstehe ich nicht. Wenn da ein "SQL reverse proxy" auf der einzigen Strecke zur Datenbank eben kein "drop table" (z.B.) durchreicht, wie soll dann Schaden entstehen?

    Ein Apache-basierter reverse proxy (für einen Webserver) kann ja einfach sagen dass Anfragen nach "/Nacktbilder_vom_Vorstand.jpg" einfach nach 404.html umgeleitet werden.

    Ich bin aber schon längst nicht mehr auf dem Webserver. Der Apache interessiert mich nicht. Ich bin lokal auf dem Datenbankserver, Mitglied der ORADBA Gruppe und kann mich damit ohne Passwort als SYS an die Datenbank anmelden.

    Wenn Du also befürchtest, dass jemand den unverschlüsselten Netzwerkverkehr innerhalb eures Netzes ausließt, dann schafft er es auch früher oder später sich das Passwort für einen root oder root ähnlichen Account für den Server seiner Wahl zu besorgen.

    Aus diesem Grund muss das eben verhindert werden.

    Dim

  10. Genau DAS meinte ich in Beitrag #3 als ich schrieb "ein bösartiger Mensch der den Webserver kapert, _muss_ diese Nutzer aber nicht verwenden, oder?"

    Richtig, aber da hilft dir auch keine Filterung vom webserver zur Datenbank, wenn ich mir einfach den sys Account für die DB selbst beschaffe. Da kannst Du DMLs filtern bis Du schwarz wirst :D

    Im übrigend: Wieso besteht Panik vor dem Verändern der Daten? Mindestens genauso schlimm kann auch Datendiebstahl sein. Den läßt Du bei deinen bisherigen Szenarien aber ausser acht.

    Flashpixx hat ja schon gute Ansätze genannt das zu verhindern.

    Dim

  11. Der mögliche Angreifer könnte ja einen Netzwerksniffer installieren und so an Username und Passwort kommen, egal in welchen Format die auf dem Anwendungsserver hinterlegt sind.

    Also. Dein Angreifer hat Zugriff auf Dein Netzwerk und kann dort seelenruhig den Netzwerkverkehr untersuchen? Warum sollte er sich die Mühe machen diese ganzen Umwege zu gehen? Ich hol mir die Accounts von einem Sysadmin für einen der DB-Server und dann reicht ein sqlplus / as sysdba und das wars. Da geb ich mich doch nicht mit normalen Useraccounts ab.

    Dim

  12. Spezielle Hardware ist doch nur sinnvoll, wenn es die Problemstellung erfordert.

    Z.B. eine Oracle Datenbank, die Java Stored Procedures verwendet. Ist ja durchaus verbreitet. Den PL/SQL Code kann ich bei Bedarf bereits jetzt nativ kompilieren, für Java bin ich noch auf die integrierte JVM angewiesen.

    Dim

  13. Warum soll ich dann einen "Umweg" über Java machen, wenn ich eben "perfekten Code für meine Architektur brauche" !?

    Für eine echte Java-CPU ist Bytecode der native Code. Oder hab ich das falsch verstanden?

    Ich muss eben mir nur vorher Gedanken darum machen und dann meinen Code passend organisieren.

    Ja, aber deutlich mehr. 16 Bit, 32 Bit, 64 Bit? Ggf. Endianness, einbinden von Libs (DDL, .so ...), ich brauche für jedes System eine komplette Buildumgebung und wehe ich benutze OS spezifische Erweiterung (z.B. Windows Threads vs. Unix Prozesse).

    Wir haben hier RedHat 64Bit in den Versionen 4 und 6, WinXP 32Bit und Win7 64 Bit, auf dem unsere Anwendung läuft. Da bin ich ganz froh drum, dass ich keine Compilerdirektiven mehr sehen muss :D

    Ideal wäre natürlich eine CPU mit dedizierte Java Cores, die für den Bytecode zuständig sind und somit sowohl als auch kann.

    Dim

  14. Das ist richtig. Die Frage ist nur, würde irgendetwas den Einsatz eines solchen CPUs rechtfertigen. Meines Erachtens nicht, denn sowohl Java wie auch C/C++ sind bei richtiger Anwendung durchaus auf einem handelsüblichen CPU extrem performant. Performanceprobleme sind meist nicht auf der CPUbasis vorhanden, sondern liegen oft an anderer Stelle.

    Davon ausgehend, dass handelsübliche PCs immer mehr von Tablets etc. verdrängt werden, ist nicht mehr die theoretisch verfügbare Rechenleistung das Limit, sondern andere Kriterien wie Akku, Abwärme, Größe und Gewicht.

    Eine CPU, die speziell dafür ausgerichtet ist eine spezielle Sprache zu unterstützen, hat da natürlich Vorteile gegenüber eine konventionellen Hardware. Alleine der Overhead für die JVM wäre im Java Bereich schon eine erhebliche Einsparung.

    Haben nicht z.B. BluRay Player einen speziellen Chip, in dem die JVM hartverdrahtet ist?

    Dim

  15. Hi,

    in diesem Fall würde ich mir eine temporär genutzte Zwischentabelle anlegen, in die jeweils eine Datei geladen wird.

    Dann machst Du deinen Abgleich und ermittelst, welche Daten geändert bzw. eingefügt werden sollen und hältst dies über ein extra Kennezichen in besagter Tabelle fest.

    Anschließend gibt es zwei SQLs bzw. Verarbeitungsschritte, welche die Daten entsprechend diesem Kennzeichen weitergeben.

    Falls Deine DB den MERGE befehl kennt, kannst Du den INSERT/UPDATE Schritt evt. auch zusammenfassen.

    Dim

  16. Sorry, dass ich nochmal drauf rumhacken muss!

    Aber aus welcher fachlichen Literatur hast du diese Aussage (oder nur so ein Ding von: Ich mach das so!). Und vor allem mit welcher Begründung.

    Wenn du eine Behauptung aufstellst, dann solltest du sie auch begründen!

    Ich dachte, dass hätte ich schon in meinem ersten Post gemacht.

    Also jetzt ausführlich:

    Ausgangslage: Entwickler A verwendet, aus welchem Grund auch immer, fachliche Werte als PK.

    Fall 1: Der fachliche Wert wird inhaltlich geändert.

    Folgen: Alle abhängigen Werte müssen ebenfalls angepasst werden. Unterstützt die DB ON UPDATE CASCADE wird das zwar automatisch erledigt, benötigt aber auch Zeit (Performance). Bei hunderttausenden oder Millionen Datensätzen könnte da schon mal die ein oder anderen Nachfrage kommen...

    Daten, die nicht per FK-Constraint am übergeordneten Satz hängen können, sind jetzt Leichen. Auch in diesem Fall dürfte das früher oder später jemandem auffallen.

    Fall 2: Der Datentyp des PK ändert sich.

    Sofern Entwickler A noch im Unternehmen tätig ist, hat er jetzt ein echtes Problem, denn ON UPDATE CASCADE hilft jetzt auch nichts mehr. Alle abhängigen Daten müssen per Hand migriert werden.

    Fall 3: Der fachliche Wert alleine ist nicht mehr unique, weil sich fachliche Anforderungen/Prozesse geändert haben.

    Folge: Uuuuuups -> Mal wieder Migration per Hand

    Fall 4: Die Daten sollen mit Daten aus einem anderen System zusammengeführt werden.

    Jetzt hat unser Entwickler A ein echtes Problem, denn Fall 1, 2 und 3 können jetzt gemeinsam auftreten. Er hat nun Gelegenheit nachzudenken, was er falsch gemacht hat, während er Migrationsskripte schreibt, die in allen möglichen Tabellen die PKs und FKs anpassen. Hätte er nur mal auf den alten Dim gehört, damals im Forum

    Und ja: Ich mach das so, den ansonsten wären die Daten in "meiner" Datenbank (operatives System einer großen Versicherung, 3TB, ca. 2,5Mrd Datensätze, ca. 500 Tabellen) bald nur noch Kraut und Rüben.

    Daher nochmal: Nie, nie, nie einen fachlichen Wert als PK verwenden. Immer einen rein technischen benutzen. Es kostet nichts, schadet nichts, der Nutzen ist unbezahlbar.

    Immer im Auge behalten: Daten leben länger als man denkt.

    Dim

  17. Subjektive Meinung! -> ON UPDATE! Des weiteren steht dort überall Nummer.

    Ich kann es nur wiederholen:

    Niemals einen fachlichen Wert als PK verwenden. Spalten sind billig, ON UPDATE wird nicht von allen Datenbanken unterstützt, des weiteren können nicht immer alle Abhängigkeiten mit einem FK Constraint abgebildet werden.

    Ob dort eine Nummer steht oder nicht ist vollkommen egal.

    Dim

  18. Fallen euch noch weitere Dinge ein?

    Ja. Verwende niemals einen fachlichen Wert als Schlüssel. Ändert sich der Abteilungsname hast Du ein Problem, gleiches bei Mitarbeiternummer und SO Nummer. Verwende immer rein technische Werte, die von den fachlichen Werten unabhängig sind. Des weiteren macht es das Handling deutlich einfacher, wenn die PK-Spalte in allen Tabellen immer gleich heißt, z.B. ID.

    Sollte man das Attribut Adresse in Strasse,Hausnummer,PLZ und Ort aufteilen?

    Unbedingt. Ansonsten kommt da nicht mehr zu prüfender Freitext rein, der nicht mehr vernünftig anzeigbar und selektierbar ist.

    Der Mitarbeiter hat das Attribut "Abteilung". Es gibt aber schon die Entität "Abteilung". Soll man dann nicht eher die Abteilung von dem Arbeitsplatz ableiten?

    Was soll denn in dieses Feld rein? Eine Zimmernummer? Freitext?

    Dim

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...