8
votes

Marrinisseur d'URL sans base de données

J'aimerais écrire un raccourpateur d'URL qui n'a pas à utiliser une base de données. Au lieu de cela, d'avoir aussi peu de pièces mobiles que possible, le script créerait simplement un hachage unique pour mon URL basée sur un algorithme (comme MD5, à l'exception d'un MD5 serait trop long). Je ne sais pas vraiment comment j'irais faire ça. Tout conseil?

Si cela compte, je préférerais écrire cela dans Ruby.


3 commentaires

Ne compute pas. Un HASH ne peut pas être résolu au contenu d'origine. :-) En outre, essayez de le faire sans base de données ou (mieux encore) Key / Value Store est une folie.


Mon objectif final est d'avoir le raccourpateur URL le plus simple possible. Un magasin de clé / valeur sonne bien. Comment recommanderiez-vous que je vais faire cette partie de cela?


J'ai ajouté une réponse avec des liens qui sauront espérer être utiles. (Ne faites pas vraiment de rubis, alors je ne suis pas sûr de quels liaisons il y a une utilisation avec de telles choses.) Incidemment, j'ai l'amour de savoir pourquoi quelqu'un a voté pour fermer cette question - c'est parfaitement légitime.


4 Réponses :


0
votes

Vous ne pourrez pas résoudre l'URL d'origine à partir d'un code de hachage sans la regarder dans une base de données.

À propos de la seule chose que vous puissiez faire sans une base de données ne compresse l'URL puis de le décompresser lorsque vous résolvez l'URL.

Strictement parler, je suppose que vous pourrait juste hachage l'URL. Mais de quelle valeur possible serait-ce si vous ne pouvez pas la résoudre à l'URL d'origine?


2 commentaires

C'est ce que j'allais, mais je n'ai pas dit à droite: je veux compresser et décompresser l'URL.


Je pense que c'est une mauvaise idée. Vous pouvez consulter les nombreux algorithmes de compression, mais beaucoup seraient plus longs que l'URL d'origine lorsque vous travaillez avec une telle entrée courte. De plus, beaucoup nécessitent de stocker des caractères qui ne sont pas valides dans une URL. Il y a une très bonne raison que tous les raccourcisseurs d'URL utilisent une base de données.



2
votes

Vous pouvez le faire avec plusieurs des outils de manipulation de chaîne disponibles pour transformer une URL en quelque chose d'obscurci comme vous l'avez noté dans votre question L'URL que vous obtiendrez de cela serait plus long que celui d'un raccourpateur URL.

Les URL ne compressent pas très bien.


0 commentaires

1
votes

En fin de compte si vous êtes après une courte liaison, vous devez simplement générer un code unique lisible (essayer d'omettre des lettres / chiffres similaires tels que zéro et 'O', au cas où des pauvres Bugger doit réellement le taper) et associer ce code avec l'URL d'origine sous une forme de magasin.

Alors que je peux comprendre pourquoi vous ne voulez pas utiliser une base de données, c'est la forme de stockage parfaite, surtout si vous regardez l'un des magasins de clé / valeur dédiés tels que Cassandra , Redis , mongodb , etc. (qui dit, une simple base de données SQL "traditionnelle" peut être une première étape facile si vous n'êtes pas mal connu territoire.)


0 commentaires

2
votes

Ce dont vous avez besoin, c'est un moyen de comprimer et de décompresser une chaîne. Où la version compressée résultante est également une chaîne. C'est presque impossible, car une URL est déjà très courte. Le codage et la compression sans perte ajoutent toujours une surcharge minimale, ce qui entraînera une chaîne supérieure à celle d'origine, pour la plupart des URL.

Pour les très longues URL, cependant, cela peut fonctionner.

Donc, à la fin, vous aurez presque toujours besoin d'une table de recherche dans le stockage (base de données).

base64 est la solution la plus logique. Cependant, sur lui-même, le codage de base64 renvoie des chaînes plus longues que l'originale, pour des chaînes courtes (dont l'URL est généralement); En raison du rembourrage, surtout. Nous allons donc essayer également avec zlib, de compresser la chaîne. xxx

Remarque sur stripping: peut supprimer "https: //". Une réelle implémentation devrait ajouter une pièce à la chaîne, pour déterminer https ou http: '1' + résultat pour HTTPS, '0' + résultat pour http. Un autre "hack" serait de rendre le service de raccourcissement de l'URL utiliser http pour les URL HTTP et HTTPS pour les URL HTTPPS.

Si vous avez toujours le même domaine, vous pouvez également évoquer la partie de domaine.

Si vous avez beaucoup de barres obliques ou d'autres caractères répétés tels qu'un tiret, la compression fonctionne mieux.


0 commentaires