Avantages et inconvénients des moyens de stockage d'un unsigned int sans un type de données unsigned int

StackOverflow https://stackoverflow.com/questions/2288881

Question

J'ai des valeurs qui sont ints 64 bits non signé, et je dois les stocker dans MongoDB, qui n'a pas de type unsigned int. Je vois trois principales possibilités pour les stocker dans d'autres types de champs, et la conversion en cours et sur:

L'utilisation d'un entier signé est probablement efficace la plus simple et l'espace, mais a l'inconvénient qu'ils ne sont pas lisibles par l'homme et si quelqu'un oublie de faire la conversion, certains d'entre eux travailleront, ce qui peut obscurcir les erreurs.

binaire brut est probablement le plus difficile pour les programmeurs inexpérimentés à traiter, et souffre également de non-lisibilité humaine.

Une représentation de chaîne est le moins efficace de l'espace (~ 40 octets unicode vs 8 octets par champ), mais au moins toutes les valeurs possibles tracera correctement, et pour effectuer des requêtes seulement une conversion en chaîne est nécessaire au lieu d'un conversion plus complexe.

J'ai besoin que ces valeurs sont disponibles à partir de différentes plates-formes, donc une seule solution spécifique au pilote n'est pas une option.

Les principaux avantages et les inconvénients que j'ai manqué? Lequel utiliseriez-vous?

Était-ce utile?

La solution

Je venais de fourrer les chiffres dans les chaînes. Il est la plus simple et la solution la plus compatible. La plupart des langages de programmation courants fournissent chaîne à la conversation numérique dans leurs bibliothèques standard. Si quelqu'un d'autre a besoin de lire la suite de votre base de données avec un autre programme, ils ne ont pas besoin de comprendre le format de stockage binaire. Un autre bonus est que vous pouvez stocker un plus grand nombre qu'un int64 non signé si vous avez besoin.

Autres conseils

Je dirais aller avec binaire - c'est la seule solution ci-dessus où obtenir des commandes de tri sur les requêtes est juste va être trivial

.

Pourquoi une valeur de chaîne devrait être en unicode? Vous connaissez la valeur sera toujours les chiffres afin que vous puissiez utiliser un varchar standard qui ne signifie pas plus de 20 octets. Pour être honnête, cela dépend vraiment de la façon dont sera utilisée la valeur. Est-ce que ça va être utilisé dans beaucoup de jointures à la source qui utilise 64 unsigned ints? Dans ce cas, il devra y avoir une conversion sur chaque ligne. Est-ce que va être utilisé pour référence ou pour filtrer des valeurs spécifiques (par opposition à une jointure au MongoDB)? Si oui, alors une valeur de chaîne se produira assez bien.

Une autre solution, si elle est possible, serait d'ajouter une colonne int 64 signé dans le mongodb qui représente la version signée du 64 unsigned int, puis utilisez l'int signé dans votre base de données. De cette façon, vous pouvez vous joindre sur les pommes et les pommes et peut comparer les valeurs d'un système à un autre.

Étant donné ce que vous avez dit, je soutiens encore qu'une colonne varchar se produira assez bien et rend la valeur lisible par l'homme.

EDIT Une autre solution serait de stocker la valeur dans un 64 bits signé int et ajouter une méthode à votre article qui calcule la valeur non signée 64 bits afin que les utilisateurs peuvent vérifier la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top