项目实战 (15)--- 代码区块重构及相关技术落地

目录

背景

思想与技术方案

概述

路由及socket 封装模式

技术描述

方案 1

方案2

各类连接资源管理封装

vector db connection

cache management

web socket 管理

service 封装

代码实现

service 层

router层

resource层

小结


背景

到目前为止,视频搜索系统功能及并行优化已基本完成。通过视频高效预处理,缓存机制,及良好的并发粒度,整个系统可以较好的支撑视频搜索功能。但因为我们的代码越来越多,function的编程模式可能已经不能再很好的提供我们可维护性。举个例子,你需要 connect vector db, connect cache, manage video filesystem,同时使用了多个 samphore,query 分析算法也比较复杂,录入video code 逻辑也是非常长。在这种情况下,部分核心代码由function转为OO 是必须的,因为需要统一管理,并有一定的容错机制。散落在各处的fuction 使你眼花缭乱,最终使系统查错排障变得异常复杂。虽然我们在前面的部分功能里用了OO的一些设计思想,比如单例,装饰者,桥接等。但是还是不足以维护一个真正意义上落地的商用搜索系统。如果以后要在这个基础上扩展功能,整个逻辑会显得异常复杂。为什么我一开始不用OO?原因很简单,最初我们聚焦在算法和功能上,合理的组件选型及优秀的插入,搜索设计及算法是原型设计的重中之重。如今,主功能已经实现,为了后续维护与扩展,需要暂时停下我们的步伐,以退为进,将kernel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

演示jvm锁存在的问题

文章目录 1、AlbumInfoApiController --》testLock()2、redis添加键值对3、AlbumInfoServiceImpl --》testLock() 没有加锁4、使用ab工具测试4.1、安装 ab 工具4.2、查看 redis 中的值 5、添加本地锁 synchronized6、集群情况下问题演示 jvm锁:synchronized lock 只…

golang学习笔记27——golang 实现 RPC 模块

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

golang学习笔记3-变量的声明

声明:本人已有C,C,Python基础,只写本人认为的重点,方便自己回顾。 一、变量的三种声明方式 func main() {//方式1,指定数据类型,声明后若不赋值,使用默认值//比如int的默认值是0,st…

尚品汇-H5移动端整合系统(五十五)

目录: (1)运行前端页面 (2)启动前端页面 (3)添加搜索分类接口 (4)购物车模块修改 (5)登录模块 (6)订单模块 &#…

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目: 题解: func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器 描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中,并例化。 优先编码器Ⅰ的代码如下: module…

【CentOS 7 】设置密码命令

好久没用虚拟机,今天打开忘了密码,还好设置了快照,赶紧改密码 1.切换到 root 用户 sudo su -2.输入以下命令以更改 root 用户的密码: passwd root3.按照提示输入新的密码,然后再次输入以确认。

MyBatis 源码解析:TypeHandler 设计与自定义实现

引言 在 MyBatis 中,TypeHandler 是一个非常重要的接口,它的作用是将 Java 类型和数据库类型进行互相转换。当我们执行 SQL 查询或插入操作时,TypeHandler 决定了如何将 Java 对象转换为数据库字段类型,或将数据库字段转换为 Jav…

[python]从零开始的PySide安装配置教程

一、PySide是什么? PySide 是 Qt for Python 项目的一部分,它提供了与 PyQt 类似的功能,使开发者能够使用 Python 编程语言来构建基于 Qt 的图形用户界面 (GUI) 应用程序。PySide 是由 Qt 公司官方维护的,而 PyQt 则是由第三方开发…

【Pyside】pycharm2024配置conda虚拟环境

知识拓展 Pycharm 是一个由 JetBrains 开发的集成开发环境(IDE),它主要用于 Python 编程语言的开发。Pycharm 提供了代码编辑、调试、版本控制、测试等多种功能,以提高 Python 开发者的效率。 Pycharm 与 Python 的关系 Pycharm 是…

【JavaEE】——多线程(join阻塞,计算,引用,状态)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:join等待线程结束 1:知识回顾 2:join的功能就是“阻塞等待” …

PyTorch 实现手写数字识别

PyTorch 实现手写数字识别 在本教程中,我们将使用 PyTorch 实现经典的手写数字识别任务。我们将使用 MNIST 数据集,这是一个包含手写数字的图像数据集。我们将介绍如何使用 PyTorch 构建、训练和评估一个简单的卷积神经网络(CNN)…

【linux】kill命令

kill 命令在 Linux 和类 Unix 系统中用于向进程发送信号,默认情况下是发送 SIGTERM(信号 15),请求程序终止运行。如果程序没有响应 SIGTERM 信号,可以使用 SIGKILL(信号 9)强制终止进程&#xf…

java之斗地主部分功能的实现

今天我们要实现斗地主中发牌和洗牌这两个功能,该如何去实现呢? 1.创建牌类:52张牌每一张牌包含两个属性:牌的大小和牌的花色。 故我们优先创建一个牌的类(Card):包含大小和花色。 public class Card { //单张牌的大小及类型/…

无人机+自组网:中继通信增强技术详解

无人机与自组网技术的结合,特别是通过中继通信增强技术,为无人机在复杂环境中的通信提供了稳定、高效、可靠的解决方案。以下是对该技术的详细解析: 一、无人机自组网技术概述 无人机自组网技术是一种利用无人机作为节点,通过无…

proteus仿真学习(1)

一,创建工程 一般选择默认模式,不配置pcb文件 可以选用芯片型号也可以不选 不选则从零开始布局,没有初始最小系统。选用则有初始最小系统以及基础的main函数 本次学习使用从零开始,不配置固件 二,上手软件 1.在元件…

6--SpringBootWeb案例(详解)

目录 环境搭建 部门管理 查询部门 接口文档 代码 删除部门 接口文档 代码 新增部门 接口文档 代码 已有前端,根据接口文档完成后端功能的开发 成品如下: 环境搭建 1. 准备数据库表 (dept 、 emp) -- 部门管理 create table dept( id int un…

深度学习自编码器 - 正则自编码器篇

序言 深度学习领域中,自编码器( Autoencoder \text{Autoencoder} Autoencoder)作为一种无监督学习技术,凭借其独特的结构在数据降维、特征提取、异常检测及数据去噪等方面展现出强大的能力。正则自编码器,作为自编码器…

ES5 在 Web 上的现状

最后一个支持 ES5 的浏览器 IE 11 在 2022 年被微软停止支持,那么今天 Web 上的 ES5 现状如何?在构建生产代码时,Web 开发者的最佳实践是什么? 本文将通过数据来回答这些问题,并基于这些数据为网站开发者和库作者提供一…

Delta Lake如何使用

1. 安装 Java 确保你的系统上安装了 Java 8 或更高版本。可以通过以下命令检查 Java 是否已安装: java -version2. 安装 Apache Spark 下载 Spark: 从 Apache Spark 官方网站 下载适合的版本,建议下载预编译的版本(例如&#xf…