2017-09-26 4 views
2

J'essaie de modéliser ma base de données dans MYSQL, je voudrais que ma structure soit formée par une table de collecte de données, qui serait celle qui génère automatiquement cygnus, puis ses tables connexes suivantes pour ces données avec des serres et des utilisateurs. Toutes les données de tous les capteurs de chaque utilisateur dans un tableau, puis relier cela à chaque utilisateur et à la serre, je pense que ce serait la bonne façon.Modélisation BD MYSQL Cygnus FIWARE

Mais j'essaye de créer deux abonnements un métadonnées dans ce tableau pour un ID d'entité et un autre pour un autre ID d'entité, mais il crée automatiquement deux tables et l'idée est d'être tout en un.

Comment cela a-t-il pu être fait?

enter image description here

Je joins mes entités:

GET /v2/entities/ HTTP/1.1 
Host: 1.2.3.4:1026 
Accept: application/json 
Content-Type: application/json 
Fiware-Service: pruebastienda 
Fiware-ServicePath: /tienda1 
Cache-Control: no-cache 
Postman-Token: e19de386-ca21-cd7d-cd24-f1dee9487196 

[ 
     { 
      "id": "palmerillas", 
      "type": "invernadero", 
      "pressure2": { 
       "type": "Integer", 
       "value": 6, 
       "metadata": {} 
      }, 
      "sensor32": { 
       "type": "Integer", 
       "value": 1, 
       "metadata": {} 
      }, 
      "sensor42": { 
       "type": "Integer", 
       "value": 44, 
       "metadata": {} 
      }, 
      "temperature2": { 
       "type": "float", 
       "value": 4, 
       "metadata": { 
        "accuracy": { 
         "type": "Float", 
         "value": 9 
        } 
       } 
      } 
     }, 
     { 
      "id": "palmerillas2", 
      "type": "invernadero2", 
      "pressure2": { 
       "type": "Integer", 
       "value": 6, 
       "metadata": {} 
      }, 
      "sensor32": { 
       "type": "Integer", 
       "value": 1, 
       "metadata": {} 
      }, 
      "sensor42": { 
       "type": "Integer", 
       "value": 44, 
       "metadata": {} 
      }, 
      "temperature2": { 
       "type": "float", 
       "value": 4, 
       "metadata": { 
        "accuracy": { 
         "type": "Float", 
         "value": 9 
        } 
       } 
      } 
     } 
    ] 

Et mes abonnements ainsi:

GET /v2/subscriptions/ HTTP/1.1 
Host: 1.2.3.4:1026 
Accept: application/json 
Fiware-Service: pruebastienda 
Fiware-ServicePath: /tienda1 
Cache-Control: no-cache 
Postman-Token: 7898a397-2018-42fc-7edf-e35f25105901 

    [ 
     { 
      "id": "59ca8b394df7c75fee3e1969", 
      "description": "A subscription to get info about palmerillas", 
      "status": "active", 
      "subject": { 
       "entities": [ 
        { 
         "id": "palmerillas", 
         "type": "invernadero" 
        } 
       ], 
       "condition": { 
        "attrs": [ 
         "pressure2" 
        ] 
       } 
      }, 
      "notification": { 
       "timesSent": 2, 
       "lastNotification": "2017-09-26T17:16:04.00Z", 
       "attrs": [ 
        "temperature2", 
        "pressure2", 
        "sensor32", 
        "sensor42" 
       ], 
       "attrsFormat": "legacy", 
       "http": { 
        "url": "http://localhost:5050/notify" 
       }, 
       "lastSuccess": "2017-09-26T17:16:04.00Z" 
      } 
     }, 
     { 
      "id": "59ca8bb94df7c75fee3e196a", 
      "description": "A subscription to get info about palmerillas", 
      "status": "active", 
      "subject": { 
       "entities": [ 
        { 
         "id": "palmerillas2", 
         "type": "invernadero2" 
        } 
       ], 
       "condition": { 
        "attrs": [ 
         "pressure2" 
        ] 
       } 
      }, 
      "notification": { 
       "timesSent": 2, 
       "lastNotification": "2017-09-26T17:17:56.00Z", 
       "attrs": [ 
        "temperature2", 
        "pressure2", 
        "sensor32", 
        "sensor42" 
       ], 
       "attrsFormat": "legacy", 
       "http": { 
        "url": "http://localhost:5050/notify" 
       }, 
       "lastSuccess": "2017-09-26T17:17:56.00Z" 
      } 
     } 
    ] 

EDIT:

Les noms des tables sont:

tienda1_palmerillas_invernadero AND tienda1_palmerillas2_invernadero2 

comme vous pouvez le voir dans l'image

+0

Pourriez-vous préciser votre question, s'il vous plaît? Je ne suis pas capable de comprendre si vous avez un problème avec les abonnements d'Orion, ou avec la persistance de Cygnus dans MySQL.Si vous pouvez poster un message d'erreur, ce serait génial aussi! Merci :) – frb

+0

Pourriez-vous modifier votre message de question pour inclure le nom des tables qui sont générées à MySQL, s'il vous plaît? THX! – fgalan

+1

Conseil: ne publiez pas vos adresses IP publiques dans l'Internet public :) Mieux vaut utiliser une version simplifiée, par ex. 150.214.y.z. – fgalan

Répondre

0

Si je comprends bien, vous devez utiliser Cygnus' règles de regroupement (GR). Ou, disponible dans les versions récentes, Mappages de noms (NM); similaire aux règles de regroupement, mais plus effcace et flexible. En quelques mots, GR (ou NM) vous permet de jouer avec le nom de l'élément de stockage backend (dans le cas de MySQL, le nom des tables où les données sont stockées). Par défaut, ce nom est basé sur la concaténation des entity_id et entity_type (plus les autres préfixes, comme dans le cas de MySQL, où le chemin de service FIWARE est préfixé). Néanmoins, en utilisant GR (ou NM), vous pouvez modifier cette concaténation:

  • GR vous permet directement de changer la concaténation complète de entity_id et entity_type, en précisant, par exemple, vous voulez des informations concernant toutes les entités de type car est- stocké dans une table all_cars. NM fait le remplacement d'une manière plus fine, vous permettant de modifier soit le entity_id, soit le entity_type, ou les deux (même, beaucoup plus d'options maléfiques sont disponibles :-)). Par exemple, vous pouvez indiquer que vous souhaitez remplacer tous les ID d'entité par all et le type d'entité car par cars; à la fin, vous aurez le même comportement que GR: all_cars.

Veuillez noter que les remplacements n'affectent que les processus de dénomination; les données stockées dans les tables restent inchangées.

Veuillez regarder la documentation GR. Et NM ainsi.

+0

Bonjour, J'ai lu que dans la dernière version, vous devez mieux utiliser les mappages de noms, mais je ne veux pas remplacer les noms de chaque entité. NOTE IMPORTANTE: à partir de la version 1.6.0, cette fonctionnalité est déconseillée en faveur des mappages de noms. Plus de détails ici. J'ai la version 1.7.0 Je veux enregistrer différentes entités et différents abonnements dans la même table. Dois-je utiliser des règles de regroupement? une salutation. – Manolait

+0

Comme je vous le dis "les remplacements n'affectent que les processus de nommage, les données stockées dans les tables restent inchangées". Cela signifie que si vous avez deux entités identifiées comme "car1" et "car2" de type "voiture", vous pouvez décider de mapper les identifiants d'entité à "all_my", et de mapper le type d'entité sur "cars", et à la fin vous aurez un nom de table "all_my_cars". Mais les lignes de la table conserveront les ID d'entité d'origine et le type, c'est-à-dire "car1", "car2" et "car". – frb

+0

OK, je comprends. alors que ma version est 1.7.0 est-il recommandé d'utiliser les règles de regroupement ou les mappages de noms? Merci – Manolait