Kurzadressen machen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von theQuest, 25. April 2009 .

  1. 25. April 2009
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    Hallo, ich wollte mal fragen, wie man sowas macht wie [urlmore/kurze-url/]hier[/url].

    Die Seite macht aus langen Adressen wie newthread: RR:Board so kurze Adressen (http://osob.de/g-dntrxu). Ich wollte sowas auch für meine Website bauen (meine Clanseite).

    Ich wollte dabei aber auch daran denken, dass sich keine Adressen wiederholen. Also ich meine, nicht das eine solche Kurzadresse dippelt belegt wird. Wenn ich die Zeichenzahl gering halten will, kommt es irgendwann ja zu überschneidungen. Wie kann ich sowas prüfen, bevor ich das Ergebnis ausgebe?
     
  2. 25. April 2009
    AW: Kurzadressen machen

    Ich weiß nicht, wie die Kollegen es konkret umgesetzt haben, aber ich würde folgendermaßen vorgehen:

    Du nimmst die Ursprungs-URI entgegen, prüfst dann, ob diese bereits einen Eintrag in der Datenbank hat. Wenn nicht, generierst du einen kurzen Zufalls-String und speicherst den in Verbindung mit der Ursprungs-URI in die Datenbank. Du könntest dem Feld für den Zufalls-String einfach einen Unique-Index geben, sodass dein INSERT-Statement fehlschlägt, wenn du versucht, einen Wert doppelt zu speichern. Das musst du dann entsprechend abfangen und daraufhin einen neuen String generieren - dann geht das Spiel quasi wieder von vorne los.
    Sollte für die Ursprungs-URI schon ein Datensatz eingetragen sein, weißte ja, was zu tun ist .

    MfG Chronos
     
  3. 25. April 2009
    AW: Kurzadressen machen

    Chronos hat es im Grunde schon beschrieben, ist eigentlich keine aufwendige Programmierarbeit und sollte schnell über die Bühne gehen.

    Kannst du selbst ein wenig PHP, dann sollte das eigentlich kein Problem sein (Google ist ja schließlich dein Freund).
     
  4. 25. April 2009
    AW: Kurzadressen machen

    wieso zufall?!

    machs einfacher und mach sie fortlaufend.
    bei zufall-string musst du nämlich nach der generierung nochmal nachschauen, ob die url schon belegt ist und ggf. noch mal würfeln...

    außerdem ergibt sich bei der zufallsvariante ein laufzeitproblem: wann ist es sinnvoll eine weitere stelle für die url generieren zu lassen...
    also im schlimmsten fall, wirst du unendlich oft würfeln und keine freie url finden...
    im anderne ungünstigen fall, machst du dir die urls unnötig lang

    wenn du die urls fortlaufend generierst hast du eine konstante laufzeit.
     
  5. 25. April 2009
    AW: Kurzadressen machen

    hehe, wenn du es programmieren willst, mach es nicht so ;-)! Erzeugt doch nur unnötig Last und wenn du Pech hast zerschiests dir sowieso irgendwann den ganzen server.

    kannst das ganze auch einfach hochzählen, nur statt zahlen halt auch noch buchstaben und zeichen, ähnlich wie bei hex (nur eben mit mehr als 16 ) wenn du das ganze mit klein / groß buchstaben machst hast du einen relativ rießigen spielraum bei wenig zeichen.

    0-9 = 10 Möglichkeiten
    a-z = 26 Möglichkeiten
    A-Z = 26 Möglichkeiten
    Sonderzeichen (. , - ) = sagen wir mal 10

    Heißt, du kannst mit einem character 72 Urls speichern.

    g-dntrxu hat 8 stellen, könntest mit 8 stellen also ~722.204.136.308.736 urls generieren und speichern ;-)! bei 10 stellen sind es schon 3 trillionen urls. dann macht sowieso die datenbank schlapp
     
  6. 25. April 2009
    AW: Kurzadressen machen

    mhh... rein technisch würde ich mich auf zahlen und kleinbuchstaben beschränken!

    sondernzeichen würde ich nicht nehmen... schon garnicht ",()."

    bei nem zeichensatz von 36 zeichen und 5 stellen wären das 60millionen urls, bei 8 stellen knapp 3 trillionen urls.

    wenn man diese größenordnung sieht, dann muss man sich fragen, ob man überprüfen soll, ob eine url schon einen code erhalten hat. ich glaube das hat in dem fall keinen sinn...

    dürfte ausreichen... wenn das dann im nachhinein zu knapp wird, könntest du urls der form 0-xxxxxxxx bis z-xxxxxxxx machen -> 36*3 trillionen urls, oder die stellenanzahl dann auf 10 stellen erhöhen

    das dürfte dann endgültig genug sein.

    damit das ganze auch noch schön als url angegeben werden kann, solltest du dich auch noch mit mod_rewrite unter apache/lighttpd auseinandersetzen...
     
  7. 25. April 2009
    AW: Kurzadressen machen

    oder einfach zufällig und wenn die gerade schon existiert (wo die wahrscheinlichkeit ja je nach länge immer unwahrscheinlicher wird) dann neuen zufallsstring mit einer stelle mehr und das solange bis es fre ist.
     
  8. 25. April 2009
    AW: Kurzadressen machen

    zufällig ist nicht gut!
     
  9. 26. April 2009
    AW: Kurzadressen machen

    13 stellen halte ich für arg lang und nicht kurz...

    diese funktion ist zwar schön und nett, aber in meinen augen nicht sehr praktikabel, da man 60 millionen urls alleine mit 5 stellen kodieren kann.
     
  10. 26. April 2009
    AW: Kurzadressen machen

    so schlecht ist die idee von murdoch aber keineswegs (unique values), dürfte wohl mit am schnellsten, sichersten und (technisch gesehn) einfachsten klappen. welche funktion letztendlich dafür verwendet wirst (und wie lang somit der string ist) ist ja egal. möglich wäre z.b. auch md5 .

    bei inkrementellen werten wirst du immer das problem von gleichzeitigen anfragen haben (mir fällt leider der passende fachausdruck nicht ein).

    den letzten hohen wert lesen
    -> erhöhen
    -> speichern.

    wenn du pech hast passiert das zeitgleich mehrmals und du erhälst ne exception und musst es wieder machen. erzeugt wohl weniger zusätzliche load wie die zufallszahlen ist aber auch nicht perfekt ;-).



    p.s. 36 zeichen â 8 stellen sind 'nur' billionen.
    wie geschrieben, 72 zeichen â 10 stellen wären trillionen.


    aber die zahl ist einfach nur unlogisch ... 1 recht guter server wird für 3 trillionen generierte urls unter dauervolllast trotzdem ~20Mio. Jahre rechnen (bei 5000req / sek). dazu noch ein 3 millionen terabyte großes storage system (wenn man pro url nur 1 byte brauchen würde) . die zahl ist vermutlich auch noch etliche millionen mal größer als alle indizierten dateien von google
     
  11. 26. April 2009
    AW: Kurzadressen machen

    ich glaube, du suchst "kollision"

    dessen bin ich mir bewusst, jedoch kann dir das im falle der zufallszahl auch passieren. beim inkrementieren kannst du dir aber sicher sein, dass du nur den minimalsten speicherplatz verbrauchst. wenn ich mich an den java-hashmaps orientiere, dann ist es von vorteil, bei 75% belegung der hashtable einen rehash zu machen (in unserem falle unnötig) und die größe der hashmap zu verdoppeln. andernfalls wird die häufigkeit von kollisionen zu groß. was bedeutet, dass man nur effektiv 75% von z.b. 36^5 nutzen kann und unnötig vorzeitig die urls verlängern muss...

    ein problem allerdings, welches man bedenken sollte und mir eben erst in den sinn kommt: inkrementelle urls sind (natürlich) vorhersagbar. es könnte daher zu sicherheitsproblemen bei diesen leicht zu erratenen urls kommen. z.b. wenn man so den login zu ner adminseite speicher etc.



    so, nun warum ich murdocs idee ebenfalls nicht für praktikabel halte:
    13 zeichen für ne kurzurl?!


    schande über mein haupt, da hab ich mich verzählt
     
  12. 26. April 2009
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Kurzadressen machen

    kurz ist relativ im vgl. zu newreply: RR:Board ist http://www.kurz.cc/1234567890123 schon kurz^^
     
  13. 26. April 2009
    AW: Kurzadressen machen

    Und diese 13 Zeichen kann man doch problemlos mit substr kürzen?
     
  14. 26. April 2009
    AW: Kurzadressen machen

    dann is sie aber nicht mehr eindeutig... (zumindest ab und zu)
     
  15. 27. April 2009
    AW: Kurzadressen machen

    Und das ja das Problem. Es sollen ja kurze Strings sein, die man sich u.U. sogar merken kann. Ich glaube ich werde wirklich mit nem Counter arbeiten (also A01, A02, A03 ... Z99). Das sind dann 26*99 Mögliche URLS wo 100%ig keine doppelt ist. Und wenn die voll sind, kann ich ja mit doppeltem Buchstaben weitermachen (AA-01).
     
  16. 29. April 2009
    AW: Kurzadressen machen

    Hab noch nen neues Problem gefunden. Ich möchte nicht, dass man andere URLs einfach so eraten kann. Also muss es bei einen zufälligem String mit Buchstaben und Zahlen bleiben.
     
  17. 29. April 2009
    AW: Kurzadressen machen

    ugly-code, sollte aber funktionieren:
    PHP:
    function  getID () {
        if(
    file_exists ( 'range.tmp' ) {
            list(
    $first $last ) =  explode ( '|' file_get_contents ( 'range.tmp' ));
            if(
    $last  ==  '99' ) {
                
    $chars  = array(
                    
    'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H'
                    
    'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' ,
                    
    'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'
                
    );

                
    $next  array_search ( $first $chars );
                if(
    $next  ==  count ( $chars )) 
                    exit(
    'no more combinations available' );
                
                
    $first  $chars [ $next  1 ];
                
    $last  = - 1 ;
            }
        } else {
            
    $first  'A' ;
            
    $last  = - 1 ;
        }

        
    file_put_contents ( 'range.tmp' $first  '|'  . ++ $last );
        return 
    $first  $last ;
    }
     
  18. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.