zoukankan      html  css  js  c++  java
  • Thingworx新建Thing的数据库表变化

    为了在Thingworx的基础上建立统一的可视化平台,并且对软件产品具有自主控制权,不依赖于Thingworx软件(防止因Thingworx的升级、Bug导致的自主扩展功能受制),所以最近在研究Thingworx软件操作数据库的过程。这个过程将对自主开发的可视化平台的设计决策树产生一定影响,目前无法预料最终的用途,暂时预计将同步具有OUTPUT的Service,作为可视化图表的数据来源。

    方法:

    方法很简单,首先pgdump把数据库导出成sql,加入到git或者svn版本控制中。然后在Thingworx中对各类对象进行操作,操作后再次导出sql并覆盖上一次导出文件,通过git或svn观察文件的变化。

    1、新建Thing

    我新建了一个Database的Thing,并建立了一个Service。

    有三张表发生了变化,分别是model_index,thing_model,user_model_properties。

    model_index记录的是Thing的名称类别等基本信息,从名字也可以看出,是在Things列表和查询中作为索引记录使用的。

    thing_model中是Thing中所有的信息,包括其配置信息(比如Database需要配置jdbc连接信息)和服务信息,所有的数据以JSON格式展现,存在一行数据中。

    user_model_properties中存的是Thing的自然信息,即Information页的内容,但是建了两个Thing,数据却在一行,暂时不明白其规则。

    再来分析一下具体内容

    Thing名字是ThingName,所以model_index有了一条新数据

    entity_name:ThingName

    entity_type:2401 (还不知道这个值从哪来)

    last_modified_time:2018-03-08 09:09:08.955 类别是时间戳

    entity_id:ThingName#Thing

    还有几个值我没有填,所以数据库中没有显示,但是很容易理解,由于暂时不涉及接下来做的事,所以暂时不做研究。

    注意description这个字段并不是Documentation中填的内容。

    今天还发现system_ownership也发生了变化,会记录每一次IP发生变化时的登录信息,和要做的事暂时没有关系。

    thing_model记录了Thing的所有信息

    className:指向了实际操作了类,应该是ThingTemplate的实现类(ThingTemplate相当于类或接口,实际上是一个类)。DataBase类别的Thing指向了com.thingworx.things.database.DatabaseSystem

    configurationChanges:是记录变化的json数据,不知道这部分数据是不是仅用作于审计,是否有系统业务意义有待考证。

    documentationContent:在info页面的备注存在该字段下

    designTimePermissions:看字段和时间和授权同时有关联,"{"Read":[],"Delete":[],"Create":[],"Metadata":[],"Update":[]}",不知道具体的数组数据里是怎么影响系统功能的。

    ThingShape:包括了Service定义等内容

    "{
        "propertyDefinitions": {
            
        },
        "subscriptions": {
            
        },
        "eventDefinitions": {
            
        },
        "serviceImplementations": {
            "ThingService": {
                "name": "ThingService",
                "description": "",
                "handlerName": "Script",
                "configurationTables": {
                    "Script": {
                        "isMultiRow": false,
                        "name": "Script",
                        "description": "Script",
                        "rows": [
                            {
                                "code": "var result='Hello World'"
                            }
                        ],
                        "ordinal": 0,
                        "dataShape": {
                            "fieldDefinitions": {
                                "code": {
                                    "name": "code",
                                    "aspects": {
                                        
                                    },
                                    "description": "code",
                                    "baseType": "STRING",
                                    "ordinal": 0
                                }
                            }
                        }
                    }
                }
            },
            "SysUserService": {
                "name": "SysUserService",
                "description": "",
                "handlerName": "SQLQuery",
                "configurationTables": {
                    "Query": {
                        "isMultiRow": false,
                        "name": "Query",
                        "description": "SQLQuery",
                        "rows": [
                            {
                                "maxItems": 500.0,
                                "timeout": 60.0,
                                "sql": "select * from sys_user"
                            }
                        ],
                        "ordinal": 0,
                        "dataShape": {
                            "fieldDefinitions": {
                                "maxItems": {
                                    "name": "maxItems",
                                    "aspects": {
                                        
                                    },
                                    "description": "maxItems",
                                    "baseType": "NUMBER",
                                    "ordinal": 0
                                },
                                "timeout": {
                                    "name": "timeout",
                                    "aspects": {
                                        
                                    },
                                    "description": "timeout",
                                    "baseType": "NUMBER",
                                    "ordinal": 0
                                },
                                "sql": {
                                    "name": "sql",
                                    "aspects": {
                                        
                                    },
                                    "description": "sql",
                                    "baseType": "STRING",
                                    "ordinal": 0
                                }
                            }
                        }
                    }
                }
            }
        },
        "serviceMappings": {
            
        },
        "serviceDefinitions": {
            "ThingService": {
                "isAllowOverride": false,
                "isOpen": false,
                "sourceType": "Unknown",
                "parameterDefinitions": {
                    
                },
                "name": "ThingService",
                "aspects": {
                    "isAsync": false
                },
                "isLocalOnly": false,
                "description": "",
                "isPrivate": false,
                "sourceName": "",
                "category": "",
                "resultType": {
                    "name": "result",
                    "aspects": {
                        
                    },
                    "description": "",
                    "baseType": "STRING",
                    "ordinal": 0
                }
            },
            "SysUserService": {
                "isAllowOverride": false,
                "isOpen": false,
                "sourceType": "Unknown",
                "parameterDefinitions": {
                    
                },
                "name": "SysUserService",
                "aspects": {
                    "isAsync": false
                },
                "isLocalOnly": false,
                "description": "",
                "isPrivate": false,
                "sourceName": "",
                "category": "",
                "resultType": {
                    "name": "result",
                    "aspects": {
                        
                    },
                    "description": "",
                    "baseType": "INFOTABLE",
                    "ordinal": 0
                }
            }
        }
    }"

    configurationTables:这里包括了对Database抽象类里关于数据库连接的实现,对应Thing下的Configuration。

    {
        "ConnectionInfo": {
            "isMultiRow": false,
            "name": "ConnectionInfo",
            "description": "JDBC Settings",
            "rows": [
                {
                    "connectionValidationString": "SELECT NOW()",
                    "password": "vjK5R/V7oLTlC4xca7EDCQ==",
                    "jDBCConnectionURL": "jdbc:postgresql://localhost:5432/iot",
                    "userName": "postgres",
                    "jDBCDriverClass": "org.postgresql.Driver",
                    "maxConnections": 5.0
                }
            ],
            "ordinal": 0,
            "dataShape": {
                "fieldDefinitions": {
                    "connectionValidationString": {
                        "name": "connectionValidationString",
                        "aspects": {
                            "defaultValue": "SELECT NOW()"
                        },
                        "description": "Connection test string/query",
                        "baseType": "STRING",
                        "ordinal": 2
                    },
                    "password": {
                        "name": "password",
                        "aspects": {
                            "friendlyName": "Database Password"
                        },
                        "description": "Database password",
                        "baseType": "PASSWORD",
                        "ordinal": 5
                    },
                    "jDBCConnectionURL": {
                        "name": "jDBCConnectionURL",
                        "aspects": {
                            "defaultValue": "jdbc:mydb:/server:port/database?param=value",
                            "friendlyName": "JDBC Connection String"
                        },
                        "description": "JDBC Connection URL",
                        "baseType": "STRING",
                        "ordinal": 1
                    },
                    "userName": {
                        "name": "userName",
                        "aspects": {
                            "friendlyName": "Database User Name"
                        },
                        "description": "Database user name",
                        "baseType": "STRING",
                        "ordinal": 4
                    },
                    "jDBCDriverClass": {
                        "name": "jDBCDriverClass",
                        "aspects": {
                            "defaultValue": "com.yourdatabase.yourDriver",
                            "friendlyName": "JDBC Driver Class Name"
                        },
                        "description": "JDBC Driver Class Name",
                        "baseType": "STRING",
                        "ordinal": 0
                    },
                    "maxConnections": {
                        "name": "maxConnections",
                        "aspects": {
                            "defaultValue": 5.0,
                            "friendlyName": "Maxium Number of Connections"
                        },
                        "description": "Maximum number of connections in the pool",
                        "baseType": "NUMBER",
                        "ordinal": 3
                    }
                }
            }
        },
        "ConnectionMonitoring": {
            "isMultiRow": false,
            "name": "ConnectionMonitoring",
            "description": "Connection Monitoring Settings",
            "rows": [
                {
                    "retryDelay": 2000.0,
                    "connectionMonitorRate": 30000.0,
                    "numberOfRetries": 1.0,
                    "enableMonitor": false
                }
            ],
            "ordinal": 0,
            "dataShape": {
                "fieldDefinitions": {
                    "retryDelay": {
                        "name": "retryDelay",
                        "aspects": {
                            "defaultValue": 2000.0,
                            "friendlyName": "Retry Delay (milliseconds)"
                        },
                        "description": "Retry delay in milliseconds",
                        "baseType": "NUMBER",
                        "ordinal": 3
                    },
                    "connectionMonitorRate": {
                        "name": "connectionMonitorRate",
                        "aspects": {
                            "defaultValue": 30000.0,
                            "friendlyName": "Monitor Rate (seconds)"
                        },
                        "description": "Monitor rate in milliseconds",
                        "baseType": "NUMBER",
                        "ordinal": 1
                    },
                    "numberOfRetries": {
                        "name": "numberOfRetries",
                        "aspects": {
                            "defaultValue": 1.0,
                            "friendlyName": "Number of Retries"
                        },
                        "description": "Number of retries",
                        "baseType": "NUMBER",
                        "ordinal": 2
                    },
                    "enableMonitor": {
                        "name": "enableMonitor",
                        "aspects": {
                            "defaultValue": false,
                            "friendlyName": "Enable Monitoring"
                        },
                        "description": "Enable connection monitoring",
                        "baseType": "BOOLEAN",
                        "ordinal": 0
                    }
                }
            }
        },
        "ColumnAliases": {
            "isMultiRow": true,
            "name": "ColumnAliases",
            "description": "Field/Column Name Aliases",
            "rows": [],
            "ordinal": 1,
            "dataShape": {
                "fieldDefinitions": {
                    "fieldName": {
                        "name": "fieldName",
                        "aspects": {
                            "friendlyName": "Thingworx Field Name"
                        },
                        "description": "Thingworx field name",
                        "baseType": "STRING",
                        "ordinal": 1
                    },
                    "columnName": {
                        "name": "columnName",
                        "aspects": {
                            "friendlyName": "Database Column Name"
                        },
                        "description": "Database column name",
                        "baseType": "STRING",
                        "ordinal": 0
                    }
                }
            }
        }
    }
  • 相关阅读:
    Mysql优化(1) 存储引擎、数据类型、字符集
    Mysql常用命令(5) 增加表的字段、修改表名、备份数据库
    Mysql常用命令(4) 插入、查询、删除、修改数据
    Navicat Premium v12.1.28 中文最新破解版(附:激活工具)
    MySQL命令:创建数据库、插入数据
    mysql初始化密码错误
    mysql第一次安装成功后初始化密码操作步骤
    MYSQL安装出现问题(服务无法启动,The service already exists)
    练习4-7 求e的近似值 (15 分)
    习题3-2 高速公路超速处罚 (15 分)
  • 原文地址:https://www.cnblogs.com/wang-ze/p/8526676.html
Copyright © 2011-2022 走看看