From 13198a49e88b4d3ad2901db1663618c07143b40e Mon Sep 17 00:00:00 2001 From: alikia2x Date: Mon, 14 Apr 2025 19:38:31 +0000 Subject: [PATCH] doc: GitBook - No subject --- .../.gitbook/assets/{1.yaml => API-doc.yaml} | 0 doc/zh/README.md | 6 +- doc/zh/SUMMARY.md | 12 ++-- doc/zh/about/scope-of-inclusion.md | 34 ++++++---- doc/zh/about/this-project.md | 35 ++++------ doc/zh/api-doc/video-snapshot.md | 4 +- .../architecture/artificial-intelligence.md | 13 ---- doc/zh/architecture/crawler.md | 68 +++++++++++++++++++ .../architecture/database-structure/README.md | 23 ++++--- .../table-snapshot_schedule.md | 43 ++++++++++++ doc/zh/architecture/machine-learning.md | 27 ++++++++ doc/zh/architecture/message-queue/README.md | 1 - .../latestvideosqueue-dui-lie.md | 1 - doc/zh/architecture/overview.md | 29 ++++++-- 14 files changed, 224 insertions(+), 72 deletions(-) rename doc/zh/.gitbook/assets/{1.yaml => API-doc.yaml} (100%) delete mode 100644 doc/zh/architecture/artificial-intelligence.md create mode 100644 doc/zh/architecture/crawler.md create mode 100644 doc/zh/architecture/database-structure/table-snapshot_schedule.md create mode 100644 doc/zh/architecture/machine-learning.md delete mode 100644 doc/zh/architecture/message-queue/README.md delete mode 100644 doc/zh/architecture/message-queue/latestvideosqueue-dui-lie.md diff --git a/doc/zh/.gitbook/assets/1.yaml b/doc/zh/.gitbook/assets/API-doc.yaml similarity index 100% rename from doc/zh/.gitbook/assets/1.yaml rename to doc/zh/.gitbook/assets/API-doc.yaml diff --git a/doc/zh/README.md b/doc/zh/README.md index 70369d2..54edaa6 100644 --- a/doc/zh/README.md +++ b/doc/zh/README.md @@ -1,6 +1,6 @@ --- -icon: hand-wave description: 「中V档案馆」 (CVSA) 是一个收录中文歌声合成文化圈有关信息的网站。 +icon: hand-wave layout: title: visible: true @@ -16,10 +16,10 @@ layout: # 欢迎 -欢迎阅读CVSA文档! +欢迎阅读中V档案馆文档! 该文档包含有关中V档案馆项目的各种信息,包括本项目的有关信息、技术架构、访客指南、API文档等。 ### 导航 -
关于本项目一些你可能想知道的…this-project.md
技术架构关于本项目的技术细节Broken link
API 文档 中V档案馆公开 API 的文档Broken link
项目地址GitHubGitee 上查看本项目https://gitee.com/alikia/cvsa
🇺🇸 English VersionHint: There's a language switcher on the top-left corner, just to the right of the logo.CVSA Doc English
+
关于本项目一些你可能想知道的…this-project.md
技术架构关于本项目的技术细节Broken link
API 文档 中V档案馆公开 API 的文档Broken link
🇺🇸 English VersionTip: There is a language selector in the header.CVSA Doc English
项目地址GitHubGitee 上查看本项目https://gitee.com/alikia/cvsa
网站我们新上线的测试网站,查看目前数据库中的信息https://projectcvsa.com
diff --git a/doc/zh/SUMMARY.md b/doc/zh/SUMMARY.md index c44766c..824f9e5 100644 --- a/doc/zh/SUMMARY.md +++ b/doc/zh/SUMMARY.md @@ -9,12 +9,12 @@ ## 技术架构 -- [概览](architecture/overview.md) -- [数据库结构](architecture/database-structure/README.md) - - [歌曲类型](architecture/database-structure/type-of-song.md) -- [人工智能](architecture/artificial-intelligence.md) -- [消息队列](architecture/message-queue/README.md) - - [LatestVideosQueue 队列](architecture/message-queue/latestvideosqueue-dui-lie.md) +* [概览](architecture/overview.md) +* [Crawler 模块介绍](architecture/crawler.md) +* [数据库结构](architecture/database-structure/README.md) + * [歌曲类型](architecture/database-structure/type-of-song.md) + * [snapshot\_schedule 表](architecture/database-structure/table-snapshot_schedule.md) +* [机器学习](architecture/machine-learning.md) ## API 文档 diff --git a/doc/zh/about/scope-of-inclusion.md b/doc/zh/about/scope-of-inclusion.md index 92ff3be..95f8ce4 100644 --- a/doc/zh/about/scope-of-inclusion.md +++ b/doc/zh/about/scope-of-inclusion.md @@ -1,22 +1,32 @@ # 收录范围 -中V档案馆收录许多有关中文歌声合成的内容,包括歌曲、专辑、艺术家(发布者、调校师、编曲者等)、歌手以及引擎/声库。 +中V档案馆收录许多有关中文歌声合成的内容,包括歌曲、专辑、艺术家(发布者、调校师、编曲者等)、歌手以及引擎/声库。 -对于一首**歌曲**,必须满足以下条件才能被收录到中V档案馆中: +对于一首**歌曲**,必须满足以下两个条件才能被收录到中V档案馆中: -#### VOCALOID·UATU 分区 +### 至少一行中文/中文虚拟歌手 -原则上,中V档案馆中收录的歌曲必须包含在哔哩哔哩 VOCALOID·UTAU -分区(分区ID为30)下的视频中。在某些特殊情况下,此规则可能不是强制的。 +歌曲歌词必须至少包含一行中文。否则,如果歌曲歌词不包含中文,则只有在使用中文虚拟歌手的情况下才会将其包含在中V档案馆中。 -#### 至少一行中文 +我们对**中文虚拟歌手**的定义如下: -歌曲的歌词必须包含至少一行中文。这意味着,即使使用了仅支持中文的声库,如果歌曲的歌词中没有中文,也不会被收录到中V档案馆中(例如,跨语种调校)。 +1. 歌手主要使用中文声库(即歌手最广泛使用的声库是中文)。 +2. 歌手由位于中国大陆、香港、澳门或台湾的公司、组织、个人或团体运营。 -#### 使用歌声合成器 +### 使用歌声合成器 -歌曲的至少一行必须由歌声合成器生成(包括和声部分),才能被收录到中V档案馆中。 +歌曲的至少一行必须由歌声合成器合成(包括和声),才能被收录到中V档案馆中。 -我们将歌声合成器定义为通过算法建模声音特征并根据输入的歌词、音高等参数生成音频的软件或系统,包括基于波形拼接的(如 -VOCALOID、UTAU)和基于 AI 的(如 Synthesizer V、ACE Studio)方法,**但不包括仅改变现有歌声音色的AI声音转换器**(例如 -[so-vits svc](https://github.com/svc-develop-team/so-vits-svc))。 +我们将歌声合成器定义为通过算法建模声音特征并根据输入的歌词、音高等参数生成音频的软件或系统,包括基于波形拼接的(如VOCALOID 1\~5、UTAU)和基于 AI 的(如 Synthesizer V、ACE Studio)方法,**但不包括仅改变现有歌声音色的AI声音转换器**(例如[so-vits svc](https://github.com/svc-develop-team/so-vits-svc))。 + + + +此外,歌曲必须出现在发布到哔哩哔哩中 VOCALOID·UTAU 分区下视频中,才能被我们的自动化程序观察到。我们欢迎编辑手动添加尚未上传到 bilibili或未归类到此类别的歌曲。 + +**新闻** + +最近,哔哩哔哩似乎正在下线二级分区。这意味着VOCALOID·UTAU分区将无法从前端进入,创作者们也无法再将视频上传到该分区(只能选择“音乐区”)。 + +根据我们的实验,哔哩哔哩在后端仍然保留了二级分区的代码逻辑,新发布的歌曲可能仍在 VOCALOID·UTAU 分区中,相关API仍可正常工作。目前,有[报告](https://www.bilibili.com/opus/1041223385394184199)称部分新歌曲被归入了“音乐综合”子分区。。此外,我们观察到哔哩哔哩实际上并没有尊重创作者投稿时选择的分区,而是使用某种方法自动为视频分配分区。我们已经观察到有[稿件](https://www.bilibili.com/video/av114163368068672/)出现了被归类到非音乐区的问题。 + +我们仍在等待哔哩哔哩的后续行动,未来我们可能会调整自动化程序的抓取范围。 diff --git a/doc/zh/about/this-project.md b/doc/zh/about/this-project.md index c78d6d2..e2fde6a 100644 --- a/doc/zh/about/this-project.md +++ b/doc/zh/about/this-project.md @@ -6,33 +6,28 @@ 纵观整个互联网,对于「中文歌声合成」或「中文虚拟歌手」(常简称为中V或VC)相关信息进行较为系统、全面地整理收集的主要有以下几个网站: -- [萌娘百科](https://zh.moegirl.org.cn/): - 收录了大量中V歌曲及歌姬的信息,呈现形式为传统维基(基于[MediaWiki](https://www.mediawiki.org/))。 -- [VCPedia](https://vcpedia.cn/): - 由原萌娘百科中文歌声合成编辑团队的部分成员搭建,专属于中文歌声合成相关内容的信息集成站点[^1],呈现形式为传统维基(基于[MediaWiki](https://www.mediawiki.org/))。 -- [VocaDB](https://vocadb.net/): - [一个围绕 Vocaloid、UTAU 和其他歌声合成器的协作数据库,其中包含艺术家、唱片、PV 等](#user-content-fn-2)[^2],其中包含大量中文歌声合成作品。 -- [天钿Daily](https://tdd.bunnyxt.com/):一个VC相关数据交流与分享的网站。致力于VC相关数据交流,定期抓取VC相关数据,选取有意义的纬度展示。 +* [萌娘百科](https://zh.moegirl.org.cn/): 收录了大量中V歌曲及歌姬的信息,呈现形式为传统维基(基于[MediaWiki](https://www.mediawiki.org/))。 +* [VCPedia](https://vcpedia.cn/): 由原萌娘百科中文歌声合成编辑团队的部分成员搭建,专属于中文歌声合成相关内容的信息集成站点,呈现形式为传统维基(基于[MediaWiki](https://www.mediawiki.org/))。 +* [VocaDB](https://vocadb.net/): [一个围绕 Vocaloid、UTAU 和其他歌声合成器的协作数据库,其中包含艺术家、唱片、PV 等](#user-content-fn-1)[^1],其中包含大量中文歌声合成作品。 +* [天钿Daily](https://tdd.bunnyxt.com/):一个VC相关数据交流与分享的网站。致力于VC相关数据交流,定期抓取VC相关数据,选取有意义的纬度展示。 上述网站中,或多或少存在一些不足,例如: -- 萌娘百科、VCPedia受限于传统维基,绝大多数内容依赖人工编辑。 -- VocaDB基于结构化数据库构建,由此可以依赖程序生成一些信息,但**条目收录**仍然完全依赖人工完成。 -- VocaDB主要专注于元数据展示,少有关于歌曲、作者等的描述性的文字,也缺乏描述性的背景信息。 -- 天钿Daily只展示歌曲的统计数据及历史趋势,没有关于歌曲其它信息的收集。 +* 萌娘百科、VCPedia受限于传统维基,绝大多数内容依赖人工编辑。 +* VocaDB基于结构化数据库构建,由此可以依赖程序生成一些信息,但**条目收录**仍然完全依赖人工完成。 +* VocaDB主要专注于元数据展示,少有关于歌曲、作者等的描述性的文字,也缺乏描述性的背景信息。 +* 天钿Daily只展示歌曲的统计数据及历史趋势,没有关于歌曲其它信息的收集。 因此,**中V档案馆**吸取前人经验,克服上述网站的不足,希望做到: -- 歌曲收录(指发现歌曲并创建条目)的完全自动化 -- 歌曲元信息提取的高度自动化 -- 歌曲统计数据收集的完全自动化 -- 在程序辅助的同时欢迎并鼓励贡献者参与编辑(主要为描述性内容)或纠错 -- 在适当的许可声明下,引用来自上述源的数据,使内容更加全面、丰富。 +* 歌曲收录(指发现歌曲并创建条目)的完全自动化 +* 歌曲元信息提取的高度自动化 +* 歌曲统计数据收集的完全自动化 +* 在程序辅助的同时欢迎并鼓励贡献者参与编辑(主要为描述性内容)或纠错 +* 在适当的许可声明下,引用来自上述源的数据,使内容更加全面、丰富。 ---- +*** 本文在[CC BY-NC-SA 4.0协议](https://creativecommons.org/licenses/by-nc-sa/4.0/)提供。 -[^1]: 引用自[VCPedia](https://vcpedia.cn/%E9%A6%96%E9%A1%B5),于[知识共享 署名-非商业性使用-相同方式共享 3.0中国大陆 (CC BY-NC-SA 3.0 CN) 许可协议](https://creativecommons.org/licenses/by-nc-sa/3.0/cn/)下提供。 - -[^2]: 翻译自[VocaDB](https://vocadb.net/),于[CC BY 4.0协议](https://creativecommons.org/licenses/by/4.0/)下提供。 +[^1]: 翻译自[VocaDB](https://vocadb.net/),于[CC BY 4.0协议](https://creativecommons.org/licenses/by/4.0/)下提供。 diff --git a/doc/zh/api-doc/video-snapshot.md b/doc/zh/api-doc/video-snapshot.md index c143151..94cdbd6 100644 --- a/doc/zh/api-doc/video-snapshot.md +++ b/doc/zh/api-doc/video-snapshot.md @@ -1,6 +1,6 @@ # 视频快照 -{% openapi src="../.gitbook/assets/1.yaml" path="/video/{id}/snapshots" method="get" %} -[1.yaml](../.gitbook/assets/1.yaml) +{% openapi src="../.gitbook/assets/API-doc.yaml" path="/video/{id}/snapshots" method="get" %} +[API-doc.yaml](../.gitbook/assets/API-doc.yaml) {% endopenapi %} diff --git a/doc/zh/architecture/artificial-intelligence.md b/doc/zh/architecture/artificial-intelligence.md deleted file mode 100644 index 53caba1..0000000 --- a/doc/zh/architecture/artificial-intelligence.md +++ /dev/null @@ -1,13 +0,0 @@ -# 人工智能 - -CVSA 的自动化工作流高度依赖人工智能进行信息提取和分类。 - -我们目前使用的 AI 系统有: - -#### Filter - -位于项目根目录下的 `/filter/`,它将 [30 分区](../about/scope-of-inclusion.md#vocaloiduatu-fen-qu) 中的视频分为以下类别: - -- 0:与中文人声合成无关 -- 1:中文人声合成原创曲 -- 2:中文人声合成的翻唱/混音歌曲 diff --git a/doc/zh/architecture/crawler.md b/doc/zh/architecture/crawler.md new file mode 100644 index 0000000..619c306 --- /dev/null +++ b/doc/zh/architecture/crawler.md @@ -0,0 +1,68 @@ +# Crawler 模块介绍 + +在中V档案馆的技术架构中,自动化是核心设计理念。`crawler` 模块负责整个数据采集流程,通过 [BullMQ](https://bullmq.io/) 实现任务的消息队列管理,支持高并发地处理多个采集任务。 + +系统的数据存储与状态管理采用了 Redis(用于缓存和实时数据)与 PostgreSQL(作为主数据库)的组合方式,确保了稳定性与高效性。 + +*** + +### 模块结构概览 + +#### `crawler/db` —— 数据库操作模块 + +负责与数据库的交互,提供创建、更新、查询等功能。 + +* `init.ts`:初始化 PostgreSQL 连接池。 +* `redis.ts`:配置 Redis 客户端。 +* `withConnection.ts`:导出 `withDatabaseConnection` 函数,用于包装数据库操作函数,提供数据库上下文。 +* 其他文件:每个文件对应数据库中的一张表,封装了该表的操作逻辑。 + +#### `crawler/ml` —— 机器学习模块 + +负责与机器学习模型相关的处理逻辑,主要用于视频内容的文本分类。 + +* `manager.ts`:定义了一个模型管理基类 `AIManager`。 +* `akari.ts`:实现了用于筛选歌曲视频的分类模型 `AkariProto`,继承自 `AIManager`。 + +#### `crawler/mq` —— 消息队列模块 + +整合 BullMQ,实现任务调度和异步处理。 + +**`crawler/mq/exec`** + +该目录下包含了各类任务的处理函数。虽然这些函数并非 BullMQ 所直接定义的“worker”,但在文档中我们仍将其统一称为 **worker**(例如 `getVideoInfoWorker`、`takeBulkSnapshotForVideosWorker`)。 + +> **说明:** +> +> * `crawler/mq/exec` 中的函数称为 **worker**。 +> * `crawler/mq/workers` 中的函数我们称为 **BullMQ worker**。 + +**架构设计说明:**\ +由于 BullMQ 设计上每个队列只能有一个处理函数,我们通过 `switch` 语句在一个 worker 中区分并路由不同的任务类型,将其分发给相应的执行函数。 + +**`crawler/mq/workers`** + +这个目录定义了真正的 BullMQ worker,用于消费对应队列中的任务,并调用具体的执行逻辑。 + +**`crawler/mq/task`** + +为了保持 worker 函数的简洁与可维护性,部分复杂逻辑被抽离成独立的“任务(task)”函数,集中放在这个目录中。 + +#### `crawler/net` —— 网络请求模块 + +该模块用于与外部系统通信,负责所有网络请求的封装和管理。核心是 `net/delegate.ts` 中定义的 `NetworkDelegate` 类。 + +**`crawler/net/delegate.ts`** + +这是我们进行大规模请求的主要实现,支持以下功能: + +* 基于任务类型和代理的限速策略 +* 结合 serverless 架构,根据策略动态切换请求来源 IP + +#### `crawler/utils` —— 工具函数模块 + +存放项目中通用的工具函数,供各模块调用。 + +#### `crawler/src` —— 主程序入口 + +该目录包含 crawler 的启动脚本。我们使用 [concurrently](https://www.npmjs.com/package/concurrently) 同时运行多个任务文件,实现并行处理。 diff --git a/doc/zh/architecture/database-structure/README.md b/doc/zh/architecture/database-structure/README.md index 44a5b5d..37ef6ee 100644 --- a/doc/zh/architecture/database-structure/README.md +++ b/doc/zh/architecture/database-structure/README.md @@ -2,14 +2,21 @@ CVSA 使用 [PostgreSQL](https://www.postgresql.org/) 作为数据库。 -CVSA 设计了两个 +CVSA 设计了两个数据库,`cvsa_main` 和 `cvsa_cred`。前者用于存储可公开的数据,而后者则存储用户相关的个人信息(如登录凭据、账户管理信息等)。 CVSA 的所有公开数据(不包括用户的个人数据)都存储在名为 `cvsa_main` 的数据库中,该数据库包含以下表: -- songs:存储歌曲的主要信息 -- bilibili\_user:存储 Bilibili 用户信息快照 -- bilibili\_metadata:[分区 30](../../about/scope-of-inclusion.md#vocaloiduatu-fen-qu) 中所有视频的元数据 -- labelling\_result:包含由我们的 AI 系统 标记的 `all_data` 中视频的标签。 -- latest\_video\_snapshot:存储视频最新的快照 -- video\_snapshot:存储视频的快照,包括特定时间下视频的统计信息(播放量、点赞数等) -- snapshot\_schedule:视频快照的规划信息,为辅助表 +* songs:存储歌曲的主要信息。 +* bilibili\_user:存储哔哩哔哩 UP主 的元信息。 +* bilibili\_metadata:我们收录的哔哩哔哩所有视频的元数据。 +* labelling\_result:包含由我们的机器学习模型标记的 `bilibili_metadata` 中视频的标签。 +* latest\_video\_snapshot:存储视频最新的快照。 +* video\_snapshot:存储视频的快照,包括特定时间下视频的统计信息(播放量、点赞数等)。 +* snapshot\_schedule:视频快照的规划信息,为辅助表。 + +> **快照:** +> +> 我们定期采集哔哩哔哩视频的播放量、点赞收藏数等统计信息,在一个给定时间点下某支视频的统计数据即为该视频的一个快照。 + + + diff --git a/doc/zh/architecture/database-structure/table-snapshot_schedule.md b/doc/zh/architecture/database-structure/table-snapshot_schedule.md new file mode 100644 index 0000000..0eae3ad --- /dev/null +++ b/doc/zh/architecture/database-structure/table-snapshot_schedule.md @@ -0,0 +1,43 @@ +# snapshot\_schedule 表 + +该表用于记录视频快照任务的调度信息。 + +### 字段说明 + +| 字段名 | 类型 | 是否为空 | 默认值 | 描述 | +| ------------- | -------------------------- | ---- | ------------------------------------- | ------------ | +| `id` | `bigint` | 否 | `nextval('snapshot_schedule_id_seq')` | 主键,自增ID | +| `aid` | `bigint` | 否 | 无 | 哔哩哔哩视频的 AV 号 | +| `type` | `text` | 是 | 无 | 快照类型。 | +| `created_at` | `timestamp with time zone` | 否 | `CURRENT_TIMESTAMP` | 记录创建时间 | +| `started_at` | `timestamp with time zone` | 是 | 无 | 计划开始拍摄快照的时间 | +| `finished_at` | `timestamp with time zone` | 是 | 无 | 快照任务完成的时间 | +| `status` | `text` | 否 | `'pending'` | 快照任务状态。 | + +### 字段取值说明(待补充) + +#### `type` 字段 + +用于标识快照的类型,例如是定期存档、成就节点、首次收录等。 + +* `archive`:每隔一段时间内,对`bilibili_metadata`表中所有视频的定期快照。 +* `milestone`:监测到曲目即将达成成就(殿堂/传说/神话)时,将会调度该类型的快照任务。 +* `new`:新观测到歌曲时,会在最长48小时内持续追踪其初始播放量增长趋势。 +* `normal`:对于所有`songs`表内的曲目,根据播放量增长速度,以动态间隔(6-72小时)定期进行的快照。 + +#### `status` 字段 + +用于标识快照任务的当前状态。 + +* `completed`:快照任务已经完成 +* `failed`:快照任务因不明原因失败 +* `no_proxy`:快照任务被执行,但当前没有代理可用于拍摄快照 +* `pending`:快照任务已经被调度,但尚未开始执行 +* `processing`:正在获取快照 +* `timeout`:快照任务在一定时间内没有被响应,因此被丢弃 +* `bili_error`: 哔哩哔哩返回了一个表示请求失败的状态码 + +### 备注 + +* 此表中的 `started_at` 字段为计划中的快照开始时间,实际执行时间可能与其略有偏差,具体执行记录可结合其他日志或任务表查看。 +* 每个 av 号在可以同时存在多个不同类型的快照任务处于 pending 状态,但对于同一种类型,只允许一个pending任务同时存在。 diff --git a/doc/zh/architecture/machine-learning.md b/doc/zh/architecture/machine-learning.md new file mode 100644 index 0000000..e9aedc4 --- /dev/null +++ b/doc/zh/architecture/machine-learning.md @@ -0,0 +1,27 @@ +# 机器学习 + +中V档案馆的自动化工作流高度依赖机器学习进行信息提取和分类。 + +我们目前使用的机器学习系统有: + +#### Filter (代号 Akari) + +位于项目根目录下的 `/ml/filter/`,它是一个分类模型,将来自哔哩哔哩的视频分为以下类别: + +* 0:与中文歌声合成无关 +* 1:中文歌声合成原创曲 +* 2:中文歌声合成的翻唱/Remix歌曲 + +它接收三个通道的纯文本:视频的标题、简介和标签,使用一个修改后的[model2vec](https://github.com/MinishLab/model2vec)模型(从[jina-embedding-v3](https://huggingface.co/jinaai/jina-embeddings-v3))从三个通道的文本分别产生1024维的嵌入向量作为表征,通过可学习的通道权重进行调整后送入一个隐藏层维度1296的单层全连接网络,最终连接到一个三分类器作为输出。我们使用了一个自定义的损失函数`AdaptiveRecallLoss`,以优化歌声合成作品的 recall(即使得第 0 类的 precision 尽可能高)。 + + + +此外,我们还有一些尚未投入生产的实验性工作: + +#### Predictor + +位于项目根目录下的 `/ml/pred/`,它预测视频的未来播放量。这是一个回归模型,它将视频的历史播放量趋势、其他上下文信息(例如当前时间)和要预测的未来时间增量作为特征输入,并输出视频播放量从“现在”到指定未来时间点的增量。 + +#### 歌词对齐 + +位于项目根目录下的 `/ml/lab/`,它分别使用 [MMS wav2vec](https://huggingface.co/docs/transformers/en/model_doc/mms) 和 [Whisper](https://github.com/openai/whisper) 模型进行音素级和行级对齐。这项工作的最初目的是驱动我们另一个项目 [AquaVox](https://github.com/alikia2x/aquavox) 中的实时歌词功能。 diff --git a/doc/zh/architecture/message-queue/README.md b/doc/zh/architecture/message-queue/README.md deleted file mode 100644 index b2312f5..0000000 --- a/doc/zh/architecture/message-queue/README.md +++ /dev/null @@ -1 +0,0 @@ -# 消息队列 diff --git a/doc/zh/architecture/message-queue/latestvideosqueue-dui-lie.md b/doc/zh/architecture/message-queue/latestvideosqueue-dui-lie.md deleted file mode 100644 index 744e878..0000000 --- a/doc/zh/architecture/message-queue/latestvideosqueue-dui-lie.md +++ /dev/null @@ -1 +0,0 @@ -# LatestVideosQueue 队列 diff --git a/doc/zh/architecture/overview.md b/doc/zh/architecture/overview.md index 636b5a9..8e20072 100644 --- a/doc/zh/architecture/overview.md +++ b/doc/zh/architecture/overview.md @@ -14,13 +14,30 @@ layout: # 概览 -整个CVSA项目分为三个组件:**crawler**, **frontend** 和 **backend。** +CVSA 是一个 [monorepo](https://en.wikipedia.org/wiki/Monorepo) 代码库,使用 [Deno workspace](https://docs.deno.com/runtime/fundamentals/workspaces/) 作为monorepo管理工具,TypeScript 是主要的开发语言。 -### **crawler** +**项目结构:** -位于项目目录`packages/crawler` 下,它负责以下工作: +``` +cvsa +├── deno.json +├── ml +│ ├── filter +│ ├── lab +│ └── pred +├── packages +│ ├── backend +│ ├── core +│ ├── crawler +│ └── frontend +└── README.md +``` -- 抓取新的视频并收录作品 -- 持续监控视频的播放量等统计信息 +**其中, `packages` 为 monorepo 主要的根目录,包含 CVSA 主要的程序逻辑** -整个 crawler 由 BullMQ 消息队列驱动,使用 Redis 和 PostgreSQL 管理状态。 +* **`backend`**:这个模块包含使用 [Hono](https://hono.dev/) 框架构建的服务器端逻辑。它负责与数据库交互并通过 REST 和 GraphQL API 公开数据,供前端网站、应用和第三方使用。 +* **`frontend`**:中V档案馆的网站是 [Astro](https://astro.build/) 驱动的。这个模块包含完整的 Astro 前端项目。 +* **`crawler`**:这个模块包含中V档案馆的自动数据收集系统。它旨在自动发现和收集来自哔哩哔哩的新歌曲数据,以及跟踪相关统计数据(如播放量信息)。 +* **`core`**:这个模块内包含可重用和通用的代码。 + +`ml` 为机器学习相关包,参见