Concernant le stockage Lat / Lng coordonnées dans Postgresql (type de Colonne)
Je suis relativement nouveau à postgresql, ce qui est pourquoi je me tourne vers ceux qui sont plus expérimentés que I.
Je suis le stockage des coordonnées dans une base de données postgresql.
Ils ressemblent à ceci: 35.21076593772987,11.22855348629825 35.210780222605616,11.22826420209139 35.210777635062875,11.228241328291957 35.210766843596794,11.228219799676775 35.210765045075604,11.228213072050166 35.21076234732945,11.228200962345223 35.21076324691649,11.228186161764323 35.21077314123606,11.228083902231146 35.210863083636866,11.227228492401766
Ils peuvent avoir une durée de autour de 800 les caractères jusqu'à 7000.
Ils incluent toujours:
- Numéros (
0-9
) - Espaces (
)
- Des signes de ponctuation et des virgules (
. ,
)
Mais ils peuvent également inclure:
- Barres verticales (
|
)
Maintenant je suis à la stockant comme TEXTE, mais à ma connaissance TEXTE est stocké de manière externe qui a un effet sur la performance. Voulez-vous recommander de passer à un autre type de colonne? Si oui, laquelle?
Merci beaucoup.
double
et de retour à nouveau, vous pouvez modifier certains des bits de poids faible); 3) comment avez-vous l'intention d'utiliser le résultat - comme des chaînes de caractères ou de chiffres? Enfin performances deviendra un problème avec de très grandes bases de données - comment pensez-vous que cela soit? Oh et encore une chose: vous pourriez être mieux de ranger la différence entre chaque paire et la première paire (vous êtes évidemment le stockage de certains souligner ici la différence est plus précis et permet d'économiser beaucoup d'espace).Considérons un
GEOGRAPHY
colonne si celles-ci représentent des formes. Sinon LINESTRING
ou POLYGON
. stackoverflow.com/questions/4166529/...OK, cette idée de la vôtre pour stocker la différence - je n'avais même pas pensé à ça, ça semble très logique et c'est probablement quelque chose que je devrais faire à la place. Impressionnant de penser!
Taille maximale de la chaîne seraient de l'ordre de 7000 caractères. Je fais des soins sur la précision. Je vais utiliser le résultat sous forme de chaîne et exploser chaque paire dans un tableau. Je suppose que autour de 2000 lignes distribué plus de 20 tables.
D'abord déterminer rationnelle de la précision. Les coordonnées géographiques avec+ de 13 points décimaux sont sub-atomique. gis.stackexchange.com/a/8674
OriginalL'auteur alexisdevarennes | 2014-01-26
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas utiliser PostGIS pour cela?
Vous êtes donnant sur ce qui est peut-être le stockage idéal pour ce genre de données PostGIS de types de données, en particulier la
geography
type.En utilisant
geography
vous êtes le stockage de vos données dans un type représentatif qui prend en charge toutes sortes de puissantes opérations et des indices sur le type. Bien sûr, c'est seulement l'unpoint
; je soupçonne fortement de vos données est en fait un ligne ou un forme dans ce cas, vous devez utiliser approprié PostGIS géographie constructeur et le format d'entrée.Le grand avantage de l'utilisation de
geography
est que c'est un type conçu spécifiquement pour poser du monde réel à des questions sur des choses comme la distance "à l'intérieur", etc; vous pouvez utiliser des choses commeST_Distance_Spheroid
pour obtenir la vraie terre-distance entre les points.Éviter PostGIS?
Si vous voulez éviter de PostGIS, et juste de le stocker avec des types natifs, je vous recommande un tableau de
point
:... à moins que vos points représentent en fait un ligne ou forme dans ce cas, utiliser le bon type
path
oupolygon
respectivement.Cette demeure utile représentation compacte - beaucoup plus que
text
en fait - qui est toujours facilement travaillé au sein de la DB.Comparer stockage:
path
est encore plus compact, et probablement plus vrai une sorte de modèle de ce que vos données vraiment est:sauf si c'est une forme fermée, dans quel cas utiliser
polygon
.Ne pas...
De toute façon, merci de ne pas juste le modèle de ce texte. Il va vous faire pleurer plus tard, quand vous essayez de résoudre des problèmes tels que "comment puis-je déterminer si ce point se trouve à l'intérieur de la distance x du chemin dans cette colonne". PostGIS fait ce genre de chose facile, mais seulement si vous stockez vos données de façon raisonnable dans la première place.
Voir cette étroitement liés à la question, ce qui explique les bonnes raisons pas de pousser les choses dans
text
champs.Aussi, ne pas trop s'inquiéter en ligne vs hors-ligne de stockage. Il n'y a pas des tonnes, vous pouvez faire à ce sujet, et c'est quelque chose qu'il faut traiter avec seulement une fois que vous obtenez la sémantique de votre modèle de données à droite.
OriginalL'auteur Craig Ringer
Tous les types de caractère (TEXT, VARCHAR, CHAR) se comportent de la même façon à partir d'un point de vue des performances. Ils sont normalement stockés en ligne dans la ligne de la table, sauf si elles sont très grandes, dans ce cas, ils peuvent être stockées dans un fichier séparé (appelé un TOAST de fichier).
Les raisons pour cela sont:
Lignes de la Table doivent être en mesure de s'adapter à l'intérieur de la base de données taille de la page (8 ko par défaut)
Avoir un très grand champ dans une ligne stockée inline permettrait de le rendre plus lent pour accéder à d'autres champs de la table. Imaginez une table qui contient deux colonnes - un nom de fichier et le fichier de contenu et que vous souhaitez localiser un fichier particulier. Si vous aviez le contenu des fichiers stockés en ligne, alors que vous auriez à scanner tous les fichiers pour trouver celui que vous vouliez. (En ignorant l'effet des indices qui peuvent exister pour cet exemple).
Détails de pain grillé de stockage peut être trouvé ici. Noter que hors de la ligne, le stockage n'est pas la seule stratégie - les données peuvent être compressées et/ou stockées hors de la ligne.
TOAST-ing coups de pied dans quand une ligne dépasse un seuil (2 ko par défaut), il est donc probable que vos lignes seront touchés par cette puisque vous dites qu'ils peuvent être jusqu'à 7000 caractères (quoique peut-être que la plupart d'entre eux ne sont compressés, pas stockées hors de la ligne).
Vous pouvez affecter la façon dont les tables sont soumis à ce traitement à l'aide de la commande ALTER TABLE ... SET DE STOCKAGE.
Cette stratégie de stockage s'applique à tous les types de données que vous pouvez utiliser pour stocker le type de données que vous décrivez. Il faudrait une meilleure connaissance de votre application fiable pour faire des suggestions pour d'autres stratégies, mais voici quelques idées:
Il pourrait être préférable de re-facteur de données, au lieu de stocker toutes les coordonnées dans une chaîne de grande taille et de traitement dans votre application, de les stocker sous forme de lignes individuelles dans une table référencée. Depuis, en tout cas, votre dossier est le fractionnement et l'analyse des données en coordonner les paires d'utilisation, laisser la base de données le faire pour vous en fait une sorte de sens.
Ce serait particulièrement une bonne idée si les sous-ensembles de données dans chaque coordonner l'ensemble doivent être sélectionnés ou mis à jour au lieu de toujours consommées ou mises à jour en une seule opération, ou si cela vous a permis d'indexer les données de manière plus efficace.
Puisque nous parlons de coordonner les données, vous pourriez envisager d'utiliser PostGIS, une extension de PostgreSQL qui s'adresse spécifiquement pour ce type de données. Il comprend également des opérateurs permettant de filtrer les lignes qui sont, par exemple, à l'intérieur ou à l'extérieur de boîtes englobantes.
Non, ce n'est pas le cas de postgresql. Voir postgresql.org/docs/9.3/static/datatype-character.html
vous êtes de droite. Votre lien est tout à fait explicite qu'il y a peu de différence de performances ("Il n'y a pas de différence de performances entre ces trois types, à l'exception de l'augmentation de l'espace de stockage lors de l'utilisation de la vierge-collier type, et un supplément de quelques cycles CPU pour vérifier la longueur lors de la stocker dans une longueur de contrainte de colonne").
OriginalL'auteur harmic
Ne met pas l'accent sur le fait que ces chiffres sont des coordonnées. Au lieu de cela, notez qu'ils sont des chaînes de nombres dans une gamme limitée, et tous à peu près de la même importance. Vous êtes le plus susceptible intéressés à la façon dont ces chiffres changent (qui ressemble à une trajectoire d'un objet au large de la côte de la Tunisie si j'ai juste le coup de poing ces coordonnées dans un plan).
Je vous recommande de convertir les nombres en double précision (53 bits de précision ~ 9 pièces 10^15 - proche du LSD de vos numéros), et de soustraire chaque valeur de la première valeur de la série. Le résultat sera beaucoup plus petits nombres stockés, et une plus grande précision relative. Vous pourriez vous en sortir avec de stocker les différences comme des entiers longs, probablement (en multipliant de façon appropriée), mais il sera plus rapide pour les garder comme des doubles.
Et si vous il suffit de prendre chaque "trajectoire" (je suis juste à l'appel d'une collection de points GPS de la trajectoire, je n'ai aucune idée si c'est ce qu'ils représentent dans votre cas) et lui donner un ID unique, alors vous pouvez avoir un tableau avec des colonnes:
De Conversion de texte chaîne de caractères est BEAUCOUP plus lent que vous ne le pensez: il nécessite de nombreuses opérations. Si vous vous retrouvez à l'aide de données comme les numéros, je vous recommande fortement de les stocker en tant que numéros de...
Il n'y a pas de précision tirée du stockage des différences ou, d'ailleurs, les logarithmes ou des valeurs divisée par 10^6 etc. Si vous avez utilisé tous 53 bits de la significande puis vous avez utilisé tous 53 bits de la significande. Il n'a pas d'importance où la virgule flottante repose.
OriginalL'auteur Floris