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还能怎么玩,期待大家发挥想象力,一起造起来!

目录
相关文章
|
15天前
|
人工智能 安全 IDE
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
98 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
27天前
|
JavaScript 安全 Java
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
47 12
|
6天前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
|
7天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
15天前
|
人工智能 Java 数据处理
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
|
2月前
|
前端开发 Java 程序员
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
49 6
|
16天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
142 60
【Java并发】【线程池】带你从0-1入门线程池
|
5天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
55 23
|
12天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
81 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码