Beiträge von SoulSpirit

    hi, ja danke für die hilfe. ich verwende postgres. ich hab noch ein paar tests gemacht. wenn ich mir aus den ganzen badwords eine einzige regex zusammenschustere, dann braucht die wirklich rellativ wenig zeit. nur ein paar minuten :) hätte ich mir wirklich nicht gedacht.

    ja das mit der überprüfung direkt bei den inserts/updates hab ich mir auch überlegt. das problem ist aber hier, dass diese in möglichst kurzer zeit passieren müssen, da hab ich nicht viel spielraum für zusätzliche überprüfungen..

    also werd ichs mit batchupdates versuchen :thumb: da wir aber grad beim thema sind, vlt könnt ihr mir bei einer regex helfen. was rellativ einfach scheint und auch hier so steht, scheint nicht ganz zu funktionieren:

    gib mir alle datensätze in denen kein buchstabe oder keine zahl steht:

    select * from mytable where field ~* '[^a-z|^0-9]'
    bzw.
    select * from mytable where field ~* '[^\w]'

    allerdings spuckt er mir hier beinahe alle datensätze aus. ich würd mal sagen, die regex drückt viel mehr die bedingung:
    alle datensätze bei denen mindestens ein zeichen kein buchstabe und keine zahl ist aus.

    mit der bedingung "von anfang bis ende nur andere zeichen als buchstaben und zahlen" funktioniert es, aber die abfrage dauert dafür sehr lange:
    select * from mytable where field ~* '^[^a-z|^0-9]+$'

    habt ihr vlt bessere vorschläge?

    hi,
    ich brauche vorschläge wie ich folgendes am besten realisieren könnte:

    hab eine SQL-Datenbank mit personendaten. jetzt soll auf jeden datensatz eine plausibilitätskontrolle ausgeführt werden. zu überprüfen sind 2 millionen datensätze mit je 4-5 feldern.

    dazu habe ich config-files mit einigen regex wie z.b. alle strings die 3 gleiche buchstaben hintereinander haben, oder namen mit zahlen und sonderzeichen usw.. dazu noch eine badwords-datei wo regex drinnen stehn wie

    Code
    fut[ ]
    nigger
    schei(\u00DF|ss)
    sage *ich
    s[ao]g i
    ich *nicht
    geht *euch
    frag *doch



    jetzt will ich diese pattern auf die datensätze in der datenbank anwenden. dazu hab ich 3 lösungsansätze die alle ihre schwächen haben:

    1. überprüfung auf jedes datensatzes in meinem programm. jeden datensatz einzeln laden. in meinem programm dann alle pattern anwenden und das ergebnis zurückschreiben.
    nachteil: mit sicherheit extrem langsam, da jeder datensatz (oder wenn ich sie in blöcken lade alle 100 Datensätze) eine eigene transaction benötigen.
    vorteil: keine externen datenfiles nötig zum zwischenspeichern

    2. ein batchupdate auf alle datensätze. hierzu könnte ich alle regex in ein einziges update-statement packen. die where-clausel würde dann die regex übernehmen.
    nachteil: wahrscheinlich auch extrem langsam aufgrund der sehr komplexen where klausel. datenbank über den gesamten zeitraum ausgelastet und quasi nicht benutzbar durch eventuelle locks die blockieren.
    vorteil: rellativ einfach zu implementieren, das aufrufende programm muss nicht einmal zwingend über den ganzen zeitraum mitlaufen. nicht fehleranfällig.

    3. export der daten in ein datenfile, z.b. ein csv. das überprüfen übernimmt dann ein eigenes script, dass das csv ausliest und ergebnisse in ein weiteres file liest.
    nachteil: fehleranfällig durch externe datenfiles. arbeitsspeicher auf der maschine die das script ausführt wird ziemlich ausgelastet sein, da ziemlich viele datensätze im speicher gehalten werden müssen. läuft asyncron mit der datenbank, d.h. es können wärend der überprüfung änderungen an den datensätzen passieren -> das dürfte aber das kleinste problem sein.
    vorteil: entlastung der datenbank. für das zurückspielen der ergebnisse können die PKs verwendet werden was auch ziemlich performant sein dürfte.
    ich schätze diese variante ist die schnellste wenn auch fehleranfälligste


    was meint ihr?

    na, eigentlich für ein produktivsystem :P hab im netz inzwischen auch literatur zu dem thema gefunden und soweit ich das auf den ersten blick sehen konnte (hatte keine zeit bis jetzt genauer nachzulesen) decken sich die lösungvorschläge dort mit deinem :)

    ich weiß ist eine etwas zusammenhangslose frage, aber kann mir jemand etwas zum thema n-dimensionale hierarchien erzählen bzw. lektür-vorschläge geben? hab grad leider keine zeit breit den zusammenhang zu erklären, aber ich hols bei bedarf gern nach :shinner:


    Ganz auf die schnelle ohne großartig darüber nachzudenken: Ich würde eine EINZIGE Tabelle für alle Staaten/Regionen machen. Eine Spalte mit der ID, eine Spalte "parent_region" (NULL erlaubt, foreign key auf sich selbst) + weitere notwendige Attribute.

    Der Ansatz ist mir klar, nur befürchte ich, dass er an seine Grenzen stößt, sobald es mehrere Staaten mit parallelen Organisationstrukturen gibt.

    Beispiel Deutschland: Nielsen Gebiete.
    Zu der oben gezeigten Struktur der den Staat in Bundesländer, Bezirke etc. gliedert gibt es noch eine andere Einteilung, nämlich der Nielsen Gebiete welche ich auch unbedingt berücksichtigen muss. Durch den Foreignkey auf sich selbst kann ich jeder Hierarchiestufe eine "parent_region" zuweisen.

    Da jedes Nielsen-Gebiet nur vollständige Bundesländer enthält, könnte ich dieses als Parent von Bundesländer definieren, und Parent von Nielsen wäre Deutschland. Das bedeutet aber, dass ich die Ordnung der Länder nach Nielsen- Gebiete nicht optional verwenden kann, sondern immer den weg über Nielsen machen muss um auf ein Bundesland zu kommen.

    Ok ich gebe zu der Aufwand diesen kleinen Umweg in einem Userinterface zu umgehen wäre sehr gering. Was aber wenn sich in anderen Ländern weitere parallele Ordnungsstrukturen auf einer unteren Hierarchiestufe zeigt. Ein Beispiel dazu wäre der Hinweis im obigen Wikipedia - Artikel:

    "Eine Zuordnung zu Nielsen-Gebieten über die fünfstelligen Postleitzahlen ist nicht vollständig automatisch möglich, da es einige Postleitbereiche gibt, die bundesländerübergreifend vergeben wurden."

    Hier gibts dann mit dem einen Verfügbaren Foreign-Key Probleme, da ein Postleitbereich mehrer Bundesländer besitzt - obwohl ich noch nicht rausgefunden habe welche Postleitbereiche hier gemeint sind.


    Außerdem finde ich, dass die Haltung der Adressdaten in ausschließlich dieser Form einige Nachteile hat:

    • Änderungen an den Attributen betreffen immer alle Staaten, auch wenns nur einen betreffen sollte
    • Wartung der Datensätze stell ich mir ziemlich aufwendig vor, da aus dem Datenmodell der Inhalt nicht ersichtlich ist
    • Extraktion von Informationen macht immer ein vollständiges durchsuchen des Tables notwendig. z.b. finden des Obersten Knoten: select * from bla where parent is null;

    Hi,

    ich arbeite gerade an einer Datenbankstruktur mit der ich verschiedene Staaten hierarchisch unterteilen kann bis hin zur Postleitzahl. Dazu hab ich für jeden Staat einen eigenen Table.

    Erster Schritt ist es, die Staaten in ihre Verwaltungseinheiten zu zerlegen. Bei Deutschland steh ich jetzt aber an. Wikipedia zeigt mir folgende Grafik:

    Spoiler anzeigen




    Ich hab bis jetzt die Ebenen:
    Bundesland, Regierungsbezirk, Landkreis - aber ich überleg mir grad inwiefern man Deutschland überhaupt einheitlich unterteilen kann, da es ja Kreisfreie Städte etc. gibt.

    Aber 1. bin ich nicht aus Deutschland und weiß nicht inwieweit sich die verschiedenen Bundesländer in ihrer Verwaltung unterscheiden und es daher sinnvoll ist alle Ebenen in der Datenbank abzubilden.

    Und 2. hoff ich dass jemand schonmal so eine Unterteilung gemacht/gesehen hat und mir hier weiterhelfen kann.


    Das ganze soll in einem Userinterface Verwendung finden, in dem man sich durch die verschiedenen Ebenen durchklickt und die Anzahl der Datensätze pro Stufe sieht. Die Hierarchie selbst wird auch noch einmal abgebildet, hier geht es aber nur mal um die Erfassung der Ebenen.

    ps:
    wer auch Lektüre zur Abbildung von Hierarchien (auch n-Dimensionale Hierarchien) in relationalen Datenbanken im I-Net anzubieten hat immer her damit [Blockierte Grafik: http://board.gulli.com/images/smilies/smile.gif]

    Hallo,

    hatte bis jetzt eine Windows-Version, die sagen wir mal, nicht ganz original war :p

    Naja, jedenfalls brauche ich jetzt um das Platform-SDK zu installieren eine gültige Version. Ich renn also schnell ins LMZ und hol mir eine, nur die Frage:
    reicht es, den Product-Key mittels der msoobe.exe zu ändern, oder muss ich unbedingt neu aufsetzen?

    Hi,

    ich leg mir grad ein neues PC-System zu und JA es sollte auch zum spielen zu gebrauchen sein ;)

    Mein Preislimit liegt so um die 1000€. Bis jetzt hab ich mir mal folgendes zusammengestellt:

    Code
    ASUS P5B
    Intel Core 2 Duo E6400 Sockel-775 , 2x 2.13GHz
    Arctic Cooling Freezer 7 Pro (Sockel 775)
    Samsung SpinPoint P120 250GB SATA II
    be quiet Straight Power 400W ATX 2.2
    Blacknoise NB-UltraSilentFan S1 retail, 80x80x25mm, 38m³/h, 1500rpm, 11dB(A)
    Cooler Master Centurion 5 Midi-Tower (ohne Netzteil)
    LG Electronics GSA-H22L schwarz
    Gainward BLISS GeForce 7600 GT SilentFX, 256MB GDDR3 (passiv Kühlung)
    MDT DIMM Kit 2048MB PC2-5300U CL4-4-4-12


    Ich komm damit ziemlich genau auf 1000€. Was sagt ihr dazu? Vor allem: lieg ich bei Grafikkarte und Mainboard richtig? Was würdet ihr ändern/verbessern?

    Danke!