文档首页/ 工业数字模型驱动引擎/ 常见问题/ 数据建模引擎相关问题/ 应用的ID类型切换为文本类型有什么影响?
更新时间:2025-06-20 GMT+08:00
分享

应用的ID类型切换为文本类型有什么影响?

背景信息

在工业数字化转型背景下,异构系统集成与数据标准化的需求日益增强。工业应用中常常需要对接遵循不同编码规范的设备与系统。例如,现场传感器通常使用符合ISO 15926标准的文本型资产编码,而传统的SCADA系统则采用数值型设备ID。如果强制统一使用单一类型的ID,可能会引发以下问题:

  • 兼容性风险:可能破坏OPC UA信息模型的语义一致性,进而影响Modbus TCP协议的通信稳定性。
  • 性能损耗:数值型ID在处理复杂业务编码场景时,需要进行额外的类型转换,影响实时数据处理的效率。
  • 业务适配性差:难以满足实际业务中的个性化需求,例如产品追溯中需要嵌入字母与数字的批次号。

对于上述问题,工业数字模型驱动引擎-数据建模引擎(xDM Foundation,简称xDM-F)支持用户根据具体业务场景自主决策ID字段类型,实现灵活配置。该特性不仅保障了系统的稳定性,还提升了工业数据管理的灵活性与扩展性,更好地适应多样化的工业应用场景。

解决方案

  1. 在JDK 17版本中,与唯一编码ID相关的所有属性均已从数值类型(如Long)调整为文本类型(如String)。因此,当用户选择JDK 17版本进行应用发布后,需要根据不同的应用运行态使用场景进行如下调整:

    使用场景

    解决方案

    修正示例

    全量数据服务API调用场景

    建议对全量数据服务API的调用场景进行优化,具体措施为:将所有接口参数中涉及ID的属性字段由数值类型统一调整为字符串类型,包括:请求体、响应体及查询参数中的ID字段。通过此操作解决ID字段类型不匹配问题,提升接口的兼容性与稳定性。

    id: 12345 → id: "12345"

    数据管理API代理器场景

    将所有涉及ID的属性从数值类型(如Long id)调整为文本类型(如String id),以解决由于类型不匹配引起的编译错误(如Long无法转换为String)。

    // 原代码
    public void updateItem(Long id, Item item) {...}
    
    // 修正后
    public void updateItem(String id, Item item) {...}

    数据建模引擎运行SDK场景

    将所有涉及ID的属性从数值类型(如Long id)调整为文本类型(如String id),以解决由于类型不匹配引起的编译错误(如Long无法转换为String)。

    // 原代码
    public Long createEntity(Entity entity) {...}
    
    // 修正后
    public String createEntity(Entity entity) {...}

    此外,对于已使用服务编排管理功能的现有用户,还需确保相关功能的代码已完成相应调整,以保证整个系统的兼容性和一致性。

  2. iDME控制台创建或编辑应用时,支持通过应用级配置项自定义设置唯一编码ID类型,以便更好地满足业务需求。
    为了确保系统的稳定性和一致性,在定义ID类型时存在如下规则与限制:
    • 如果用户选择将应用的“ID类型”设置为“文本”类型,后续将不支持修改为“数值”类型。
    • 应用一旦将“ID类型”设置为“文本”类型,仅支持发布JDK 17版本,不支持发布JDK 8版本。
    • 选择“文本”类型后,系统将自动将数据库中所有ID相关的属性从数值类型(如BIGINT)转换为文本类型(如VARCHAR)。
    • “文本”类型的最大长度为40个字符,且仅允许输入数字、字母、连字符(-)和下划线(_)。
    • 如果应用的数据库类型为MySQL,且实体模型的属性总长度接近数据库的极限值(如总字节数接近限制值16000),切换ID类型可能会失败。建议在设置为“文本”类型之前,检查是否存在复杂模型。如果存在,需先调整属性的总长度,再进行ID类型的切换操作。
    • 用户将应用从“数值”类型切换为“文本”类型后,首次部署的时间可能较长(复杂模型较多时,可能需要约2小时)。为了减少对现有应用的影响,建议用户通过创建新应用的方式来切换ID类型。
  3. 对于已购买SDK服务的用户,如果需要切换应用的ID类型,请通过提交工单的方式联系我们。

相关文档