Suite

La fonction PostGIS pgr_dijkstra ne trouve pas le nœud qui apparaît dans la table des chemins?


j'ai un problème avecpgr_dijkstraalgorithme ne trouvant pas certains des sommets des nœuds dans ma table. J'ai un grand ensemble de données de carnets de voyage et j'essaie de déterminer leurs chemins les plus courts entre chaque endroit qu'ils visitent. J'ai lié chaque lieu visité au nœud le plus proche de mon réseau OSM en utilisant leway_vertices_pgrtableau. Je peux trouver les nœuds qui renvoient un itinéraire vierge le plus court dans la colonne source ou cible de la table des chemins (ma table de bord) mais pour une raison quelconquepgr_dijkstrane trouve pas le nœud lorsque j'appelle la fonction pour environ la moitié de mes routes.

Dois-je faire quelque chose pour dire à l'algorithme de rechercher à la fois dans les colonnes source et cible de la table des chemins ?

Voici ma requête qui remplit les itinéraires, ce qui a fonctionné pour environ la moitié de mes itinéraires. Je dois mentionner que leprg_dijkstrala fonction que j'utilise ici est laprg_dijkstrafonction wrapper donnée sur le site de l'atelier sur lejointoiementpage d'accueil. J'ai également essayé avec la fonction complète et cela ne semble pas faire de différence. j'ai aussi faitpgr_analyzegraphet la topologie du réseau renvoie OK.

update analysis.routing set routeline2 = (select st_multi(st_union(pgr.geom)) from (select * from pgr_dijkstra('ways',analysis.routing.source,analysis.routing.target)) as pgr) ;

Dois-je faireST_Reverseou une autre transformation pour obtenir la fonction de trouver le nœud ?


Au cas où vous auriez leway_vertices_pgret vous ne trouvez pas votre ID de nœud là-bas, quelque chose ne va pas avec vos données.

Mais vous ne pouvez pas supposer qu'un ID de nœud sera trouvé dans les deuxla sourceetciblecolonne. Il pourrait être dans les deux, mais n'a besoin d'apparaître que dans l'un d'eux. Alors, vous recherchez un ID de nœud que vous devez rechercher dans les deux colonnes.

Si vous avez beaucoup d'ID de nœuds, qui ne sont disponibles que dans une colonne, il semble que vous ayez de nombreuses routes sans issue. Si cela semble différent en réalité, votre réseau routier n'est finalement pas bien connecté.


pgr_dijkstra('ways', analysis.routing.source, analysis.routing.target)

Vérifiez dans la documentation l'utilisation correcte de la fonction :

pgr_costResult[] pgr_dijkstra(text sql, entier source, entier cible, booléen dirigé, booléen has_rcost);

Impossible de supprimer les cellules des pierres tombales dans Cassandra

nous utilisons un cluster à nœud unique cassandra pour expérimenter et un problème que nous rencontrons maintenant est celui des cellules de pierre tombale. Chaque ligne contient 2 cellules de pierre tombale et nous sommes coincés à essayer de les supprimer. Ils provoquent l'avortement de nos requêtes car le seuil des pierres tombales est atteint assez rapidement.

Il s'agit de la sortie de traçage lors de la lecture d'une ligne : Lire 1 lignes actives et 2 cellules tombstone [ReadStage-2]

J'ai essayé d'utiliser nodetool garbagecollector , avec une option -g appropriée (CELL ou ROW) mais je n'ai jamais changé. Pourquoi les cellules tombostone ne sont pas supprimées après l'exécution de cette commande ? J'ai aussi essayé la commande flush.

Version Cassandra : 3.11.2 Version de l'API Thrift : 20.1.0 Versions prises en charge par CQL : 3.4.4 (par défaut : 3.4.4)

L'erreur est la suivante :

WARN [ReadStage-2] 2018-08-06 12:26:29,269 ReadCommand.java:555 - Lire 50000 lignes en direct et 100001 cellules tombstone pour la requête SELECT * FROM mykeyspace.mytable WHERE myid > 1025493673608400896 AND token(collectionid, ttype) > = token (10, collecté) AND token (collectionid, ttype) <= token (10, collecté) LIMIT 1000 (voir tombstone_warn_threshold) ERREUR [ReadStage-2] 2018-08-06 12:26:29,272 StorageProxy.java:1906 - Scanné sur 100001 pierres tombales lors de la requête 'SELECT * FROM mykeyspace.mytable WHERE myid > 1025493673608400896 AND token(collectionid, ttype) >= token(10, collecté) AND token(collectionid, ttype) <= token(10, collecté) LIMIT 1000' (la dernière clé de partition de ligne analysée était ((10, collectée), 1025494834679873536)) requête abandonnée

Qu'est-ce que je manque dans le ramassage des ordures C* ? Toute aide pour clarifier ce comportement serait formidable! Merci.


1- Veuillez vérifier que l'attribut que vous avez créé est affecté à l'ensemble d'attributs.

2- Veuillez exécuter la commande de réindexation

Découvrez comment la collection de grilles d'attributs est créée dans

Vous devez définir is_user_defined sur true. (test sur Magento 2.2)

Assurez-vous d'ajouter l'attribut personnalisé au « ensemble d'attributs » utilisé par le produit configurable.

Vous pouvez avoir différents produits configurables en utilisant différents ensembles d'attributs. Vérifiez l'ensemble d'attributs utilisé pour votre produit configurable ici :

Ajoutez l'attribut personnalisé à l'ensemble d'attributs utilisé par votre produit configurable ici :


Comme l'a écrit juampy, node_revision devrait également être mis à jour. Vous devez exécuter 2 requêtes :

Parfois, il est plus facile d'utiliser simplement SQL. C'est, je pense, l'un de ces cas.

La modification des paramètres de commentaire par défaut pour le type de contenu, comme suggéré par uwe999, ne modifie que le défaut paramètres pour le type de contenu. Cela signifie qu'il ne modifiera pas rétroactivement les paramètres du contenu existant (car cela pourrait supprimer les commentaires existants).

Vous devrez visiter la vue d'édition de nœud pour chaque nœud existant pour lequel vous essayez de désactiver les commentaires et mettre à jour les paramètres. Si vous avez installé un module comme le module de colonnes de formulaire de nœud, qui masque/supprime des éléments des pages d'ajout/de modification de nœuds, vous devrez alors mettre à jour sa configuration, la boîte de paramètres de commentaire apparaît pour les nœuds.

Aucune des solutions ci-dessus n'a fonctionné pour moi. Le formulaire de commentaire est toujours affiché dans les nœuds existants, sauf si vous mettez également à jour node_revision.

Voici l'implémentation hook_update_N() qui a fonctionné pour moi :

vous désactivez les commentaires dans « structure/types de contenu/[nom du type]/modifier/paramètres de commentaire. Définissez « Paramètre de commentaire par défaut pour le nouveau contenu » sur masqué.

Si vous avez des commentaires existants, vous pouvez les supprimer sous "contenu/commentaires" ou simplement les dépublier.


Aide avec l'algorithme Arduino Micro Keypress

J'utilise donc l'Arduino Micro comme clavier HID. Il accepte les entrées arbitraires d'un programme Node-JavaScript que j'exécute (donc j'ai une totale liberté dans les données transférées au micro).

L'objectif est que les données transmises au micro incluent des informations sur une touche : si elle a été enfoncée ou relâchée et de quelle touche il s'agit. Les connexions série sont toutes bonnes et dandy - j'ai juste des questions concernant la logique d'appui sur les touches.

En ce qui concerne le programme JavaScript, une touche enfoncée est détectée en fonction du keyCode, pas du code de caractère. Ainsi, lorsque vous appuyez sur « a », code de caractère 97, l'Arduino micro reçoit « A », code de caractère 65 puisque le code JavaScript a détecté keyCode est de 65 ans. Cela ressemble donc à des problèmes avec JavaScript (ce qui est le cas), mais rappelez-vous que j'ai la liberté de représenter les informations envoyées au micro.

Cela étant dit, au lieu de détecter par keyCodes et codes de caractères en JavaScript, je pourrais simplement transmettre la lettre, par exemple. "a" avec un identifiant pour la presse/le communiqué tel que "+a" pour le communiqué et "-a" pour la presse. Mon problème ici est de savoir comment gérer les touches de modification à l'aide de la bibliothèque Keyboard.

Dois-je gérer séparément les touches de caractères et les touches de modification, c'est-à-dire Keyboard.write pour les caractères et Keyboard.press/release pour les modificateurs ou existe-t-il des cas où il serait judicieux d'appuyer et de maintenir "a" (ce qui serait également différent d'appuyer et de maintenir " UNE")?

Vous trouverez ci-dessous mon code d'origine utilisant des keyCodes et des identifiants « u/d » pour indiquer le haut ou le bas (ce que je pense maintenant que « u/d » pourrait être facilement confondu avec une lettre si je décide de transmettre des caractères en tant que caractères :


Liens de la classe

La semaine dernière à Palm Springs, en Californie, cette conférence annuelle a eu lieu. Il s'agit d'un rassemblement de développeurs pour apprendre et enseigner les nouveaux outils utilisés pour créer des applications de cartographie ou ajouter une cartographie à des applications existantes. Les réunions couvrent divers aspects du système ArcGIS d'Esri et donnent un aperçu de plusieurs autres produits/technologies Esri.

La vidéo liée ici provient de la session intitulée 󈫺 Killer Apps”. Je n'ai que cette vidéo qui est une démonstration d'un requin UAV (véhicule aérien sans pilote) contrôlé par un système de cartographie flexible dans une application. Bien que le système de cartographie ne soit pas quelque chose de très pertinent dans cette démo, vous pouvez voir comment cela pourrait être utilisé à des fins de renseignement à l'avenir.

Je garderai un œil sur d'autres articles ou rapports sur la conférence concernant les 10 applications tueuses.


Ce qui suit modifie votre table des manières suivantes :

  • utiliser uniquement le linewidth disponible
  • supprimer multirow (c'est inutile dans cet exemple car le contenu ne restera probablement pas sur la même page et l'alignement ne fonctionne pas automatiquement de toute façon pour les colonnes de type p)
  • utilisez aggedright dans les cellules avec beaucoup de contenu (pour cela le package de tableau est chargé et la colonne de type L définie)
  • utilisez dimexpr pour calculer la largeur disponible un peu automatiquement (vous pouvez modifier les valeurs de myfirstcol et mysecondcol pour obtenir le résultat souhaité)
  • utilisez L colonnes également dans les cellules jointes de la première et de la deuxième ligne (avec dimexpr pour calculer la largeur)
  • J'ai supprimé le centre autour de longtable , ce qui n'est pas nécessaire de toute façon, car longtable centre les tableaux (si vous ne spécifiez pas manuellement un autre alignement) et le centre ne crée qu'un espace vertical indésirable ici (le tableau est également aussi large que le bloc de texte le permet , donc il est toujours centré de toute façon)
  • utilisez caption pour formater également la légende continue (si vous utilisez un argument facultatif vide, longtable n'ajoutera pas cette légende à la liste des tables, affichée dans mon MWE), j'ai également modifié le texte de cette légende de suivi.
  • J'ai utilisé extrarowheight pour espacer un peu plus les cellules (cela donne une meilleure apparence combinée aux règles hline et cline).

Je suggère l'une des deux refontes suivantes. Avec cette approche, votre tableau tient sur une seule page :


1 réponse 1

La raison pour laquelle il échoue pour la couleur est que, contrairement aux polices, la couleur n'est pas une propriété primitive de la boîte, la couleur est implémentée en ayant des nœuds de changement de couleur au début et à la fin d'une gamme de couleurs. Si vous divisez et réorganisez une boîte après sa composition, ces nœuds de couleur peuvent (et seront généralement) séparés de leur texte. Le paquet de Donald fait plus que la quantité moyenne de réorganisation de boîtes :-)

Le code ci-dessus est un patch d'une ligne vers FirstLine pour ajouter la couleur à un endroit sûr. Il semble dans les commentaires que la supercherie du patch masque ce que fait le code, voici donc une version équivalente.

Remplacez le code ci-dessus entre makeatletter makeatother par le suivant qui est identique au code dans magaz à part la ligne marquée %<<<<<<


1 réponse 1

En tant que personne travaillant pour une société d'hébergement, j'ai vu ce problème particulier avec nos conteneurs OpenVZ. Certains fournisseurs d'hébergement utiliseront OpenVZ en raison de la possibilité de survendre les nœuds, créant ce que nous appelons "l'effet de mauvais voisin".

Fondamentalement, les conteneurs partageront toutes les ressources sur le nœud. Oui, vous disposez d'une certaine quantité de mémoire, de numprocs, d'espace disque, etc. Cependant, si d'autres conteneurs dépassent leurs limites dans l'une des catégories de ressources, les ressources de votre VPS peuvent être réduites (par exemple, l'espace disque peut soudainement rétrécir ou des pénuries de mémoire se produisent ).

Votre société d'hébergement examine très probablement les échecs de numproc et de mémoire. Si vous dépassez la limite numproc plusieurs fois, les échecs commenceront à s'accumuler. Si votre site magento dépasse la limite de 400 numproc, il existe plusieurs solutions.

Redémarrer les services avant d'atteindre vos limites de ressources n'est pas une solution viable. Je suis sûr que votre objectif est de faire fonctionner votre site avec une disponibilité optimale. S'il n'y a aucun moyen d'optimiser votre site pour utiliser moins de ressources, je demanderais à votre société d'hébergement d'inspecter le trafic (si vous êtes un client géré) pour voir s'il est légitime. Parfois, le trafic peut être malveillant et tenter des attaques par force brute, ce qui augmente le nombre de processus.

En ce qui concerne l'utilisation de la mémoire, je regarderais votre fichier php.ini pour le paramètre memory_limit=64M. Je recommanderais de définir la limite à pas plus de 96 M (64 M est l'idéal) avec un serveur exécutant 4 Go de RAM ou moins. Parfois, les gens le règlent sur 256 Mo ou plus sur un serveur exécutant 2 Go de mémoire et se demandent pourquoi la mémoire atteint son maximum tout le temps. Je ne connais pas votre site magento, donc je ne sais pas quel devrait être le paramètre php.ini idéal. Pour l'environnement VPS que vous décrivez, il semble que la limite ne devrait pas dépasser 96 M.

D'après le son, il semble que vous dépassiez régulièrement votre limite numérique, ce qui est très probablement la cause d'un site avec un trafic important ou un codage non optimisé. Je suggérerais FORTEMENT de passer à un environnement virtualisé matériel (voir s'ils offrent la virtualisation KVM ou XEN). La virtualisation matérielle éliminera l'effet "mauvais voisin" et vous donnera des ressources DÉDIÉES. 400 numproc est environ la limite la plus élevée que notre société propose pour les serveurs VPS sur un nœud OpenVZ.

Si le passage à un environnement matériel virtualisé n'est pas une option avec votre société d'hébergement, essayez de vous renseigner sur leurs serveurs dédiés d'entrée de gamme.


Technologie et méthodes de base

Dans cette section, nous donnons une brève introduction aux méthodes et technologies que nous envisageons d'utiliser pour réaliser un LDM sémantiquement enrichi.

Technologies du Web sémantique

Les technologies du Web sémantique fournissent un cadre commun pour le partage et la réutilisation des données au-delà des frontières. Nous renvoyons à l'article fondateur de Berners-Lee et al. [10] pour un aperçu des idées et une vue d'ensemble de l'architecture de la pile du Web sémantique Note de bas de page 8 Le Resource Description Framework (RDF) [13, 41] sert de modèle de données unifié plat, basé sur des graphiques, basé sur des URI comme identifiants pour objets et relations. Un graphe RDF est représenté par des triplets 〈 S , P , O d'un sujet S , un prédicat P , et un objet O . Les ontologies sont utilisées pour modéliser des domaines de connaissances, en exprimant des relations entre des termes avec un vocabulaire restreint et en les modélisant comme des hiérarchies de classes. Dans le contexte du Web sémantique, OWL [31] joue un rôle central en tant que langage de modélisation standard des ontologies avec son fondement logique (formel) de logique de description (DL) [6]. Le vocabulaire d'une DL se compose d'objets (appelés individus), de classes (appelées concepts) et de propriétés (appelées rôles). En outre, une base de connaissances (KB) se compose d'une boîte terminologique (TBox), qui contient des axiomes sur les relations entre les classes et les propriétés, et des données d'instance dans une boîte d'assertion (ABox), qui contient des connaissances factuelles sur les individus par les assertions suivantes représentées comme N-triples (cf. [6]) :

Affirmations de classe 〈 je 1 t oui p e C je une s s : objet d'état je 1 est de type C je une s s , par exemple., V e h je c je e

Assertions de propriété d'objet 〈 je 1 propriété1id2: objet d'état je 1 est lié par p r o p e r t oui 1 s'opposer je 2 , par exemple, je une m e 1 je s P une r t O F je m t e r s e c t je o m 2 〉

Assertions de propriété de données 〈 je 1 propriété2 v une je vous e : objet d'état je 1 a un p r o p e r t oui 2 avec une valeur numérique, par exemple, c une r 1 h une s S p e e 2 0 〉.

À la lumière des applications gourmandes en données, il y a une tendance à passer du langage expressif OWL 2 vers des fragments plus évolutifs et traitables appelés profils OWL 2 [33]. Ces efforts de recherche se sont concentrés sur des techniques efficaces de réponse aux requêtes sur des langages d'ontologie légers, tels que OWL2 QL [15] et OWL2 EL [5]. L'évaluation conjointe des requêtes sur les ontologies OWL2 QL peut être déléguée par la réécriture des requêtes SQL à un SGBDR, ce qui facilite le traitement des requêtes évolutif. Les ontologies modélisées avec OWL2 QL sont bien adaptées pour définir le niveau conceptuel. Le système Ontop [40] est un exemple de système d'accès aux données basé sur une ontologie (OBDA), où un schéma global est défini comme une ontologie OWL2 QL, et les schémas source sont mappés sur le schéma global par des requêtes SQL. OBDA a été étendu à des formats de données non standard tels que le SIG [9, 20], les données temporelles [4, 11] et les données en continu [14, 35].

Traitement de flux et raisonnement de flux

Le traitement des flux relationnels est étudié depuis longtemps. Une étape importante a été le langage de requête continue (CQL) [3] avec les objectifs de conception d'une syntaxe claire basée sur SQL-99 et une sémantique multi-ensembles (sac). Les auteurs ont défini les flux et les relations en tant que types de données et utilisent les opérateurs suivants pour établir une correspondance entre eux : (1) flux-à-relation, (2) relation-à-relation et (3) relation-à-flux. Pour (1), ils ont introduit divers opérateurs de fenêtre afin de sélectionner des tuples dans un flux. Parmi eux se trouvent des opérateurs de glissement temporel, de glissement basé sur des tuples et de fenêtre partitionnée.

(2) est tiré directement du paramètre de base de données relationnelle pour (3), ils ont défini les opérateurs de flux d'insertion, de flux de suppression et de flux de relation. Sur la base des opérateurs, ils ont développé une méthode d'exécution de requêtes et ont comparé un prototype de mise en œuvre d'un scénario d'application de péage routier afin de montrer l'applicabilité de leur approche.

Le raisonnement par flux étudie comment introduire des processus de raisonnement dans des scénarios impliquant des flux d'informations produites en continu. En cela, les modèles de domaine fournissent des connaissances de base pour le raisonnement et élèvent les flux à un niveau « sémantique ». Les aspects particuliers du raisonnement de flux sont l'évaluation incrémentielle et répétée, soit basée sur le push, c'est-à-dire sur l'arrivée des données, soit basée sur le pull à des moments donnés, et en utilisant des instantanés de données (appelés fenêtres) pour réduire le volume de données. Les fenêtres peuvent être obtenues en sélectionnant des données en fonction de conditions temporelles (appelées fenêtres temporelles) ou de nombres de données. Outre le CQL séminal, il existe de nombreux formalismes et langages pour le raisonnement de flux. Parmi eux se trouvent

extensions du langage de requête Web SPARQL, par exemple, C-SPARQL [7], Morph-streams [14] et CQELS [36]

extensions des langages d'ontologie aux flux, par exemple par Ren et Pan [39], STARQL [35] et Cayuga [39] et

formalismes basés sur des règles e.g., ETALIS [2], Reactive ASP [26], Teymourian et al. [44], LARS [8], métrique Datalog [12] et Streamlog [46].

LARS [8] fournit un formalisme basé sur des règles avec des fenêtres génériques en tant que citoyens de première classe. Les fenêtres peuvent être imbriquées, et les opérateurs modaux permettent de raisonner sur des points dans une fenêtre. LARS fournit une sémantique monotone et une sémantique de programmation d'ensembles de réponses (ASP) qui généralise la sémantique ASP standard. Il offre le non-déterminisme et la non-monotonie pour traiter les informations manquantes. Le système ETALIS [2], qui a été appliqué à la gestion du trafic, propose un langage à base de règles pour exprimer des modèles d'événements complexes enrichis d'une base de connaissances. Les modèles sont exprimés avec des prédicats comme uneFter(e1,e2) et sont combinés avec la base de connaissances et les parties causales pour la réponse aux requêtes. L'évaluation de la requête Prolog standard est modifiée en un chaînage arrière piloté par événement (EDBC) de règles. Un système Prolog est alors déclenché pour évaluer une requête et les règles EDBC lorsque de nouvelles données passent. Le cadre STARQL [35] est un effort pour rationaliser l'accès aux données basé sur l'ontologie (OBDA) en introduisant un langage de requête extensible et utilise un raisonnement temporel sur des séquences d'ABox. Le framework étend la réécriture de requête de premier ordre de DL-Lite avec le raisonnement Intra-ABox.


Voir la vidéo: QGIS and PostgreSQLPostGIS as an enterprise solution: 5 features everyone should use (Octobre 2021).