UIT:云端高性能、模块化、低内存的海量文件处理库
Navigation Menu
Toggle navigation Sign in
- Product
- GitHub Copilot Write better code with AI
- GitHub Advanced Security Find and fix vulnerabilities
- Actions Automate any workflow
- Codespaces Instant dev environments
- Issues Plan and track work
- Code Review Manage code changes
- Discussions Collaborate outside of code
- Code Search Find more, search less Explore
- Why GitHub
- All features
- Documentation
- GitHub Skills
- Blog
- Solutions By company size
- Resources Topics
- Open Source
- Enterprise
- Pricing
Search or jump to...
Search code, repositories, users, issues, pull requests...
Search Clear Search syntax tips
Provide feedback
We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback
Saved searches
Use saved searches to filter your results more quickly
Name Query To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} janwilmake / **uit ** Public
- Notifications You must be signed in to change notification settings
- Fork 1
- Star 34
Library for performant, modular, low-memory file processing at scale, in the Cloud uuithub.com
License
MIT license 34 stars 1 fork Branches Tags Activity Star Notifications You must be signed in to change notification settings
Additional navigation options
janwilmake/uit
main BranchesTags Go to file Code
Folders and files
Name| Name| Last commit message| Last commit date
---|---|---|---
Latest commit
History
65 Commits
uithub.ingestzip| uithub.ingestzip
uithub.merge| uithub.merge
uithub.otp| uithub.otp
uithub.outputjson| uithub.outputjson
uithub.outputmd| uithub.outputmd
uithub.outputzip| uithub.outputzip
uithub.search| uithub.search
uithub.ziptree| uithub.ziptree
uithub| uithub
.genignore| .genignore
.gitignore| .gitignore
ADR.md| ADR.md
ATTRIBUTION.md| ATTRIBUTION.md
BACKLOG.md| BACKLOG.md
BLOG.md| BLOG.md
CHANGELOG.md| CHANGELOG.md
CONTRIBUTING.md| CONTRIBUTING.md
FAQ.json| FAQ.json
GETTING-STARTED.md| GETTING-STARTED.md
GROWTH.md| GROWTH.md
LICENSE.md| LICENSE.md
README.md| README.md
TODO.md| TODO.md
convention.drawio.svg| convention.drawio.svg
convention.md| convention.md
default-faq.json| default-faq.json
github-url-coverage.md| github-url-coverage.md
process-formdata.drawio.png| process-formdata.drawio.png
xymake.json| xymake.json
View all files
Repository files navigation
UIT - Universal Information Terminal
UIT 是一个用于在云端进行高性能、模块化、低内存海量文件处理的库。 它通过提供一个四步流程来实现:从任何所需的模态收集文件层次结构,应用过滤器和转换,并以任何所需的模态输出它。
- 性能:在导航和搜索大量数据时,速度至关重要。
- 低内存:通过应用流式处理和并行化,我们可以在低内存环境中运行它,例如 Cloudflare workers。
- 模块化:模块化是有益的,因为通过使其可组合,我们可以清楚地了解所有构建块的高级概述。此外,并非所有构建块都可以在相同的运行时或位置运行。
重要提示
这是一个早期的预发布版本。有关当前挑战,请参阅 TODO。在 https://uuithub.com 尝试演示。
UIT 是在 uithub 平台的多次迭代后出现的,该平台最初是一个简单的基于 node 的 zipfile 解析器。在构建越来越多的特性和插件时,我发现自己受到了内存的极大限制,因为我没有进行足够的流式传输,并且过早地返回到 JSON(因为使用 Streams API 很棘手!)。因此,随着特性和复杂性的增长,产生了创建更模块化、可扩展的架构的需求,同时牢记良好的 serverless 实践。
FormData
具有悠久的历史 [RFC 1867 (1995)] [RFC 2388 (1998)] [RFC 7578 (2015)],并且深深地嵌入到 web 中。 它提供了一种通过单个请求服务多个文件(二进制和文本)的绝佳方式。 尽管 FormData
还不支持直接从 Request
和其他 Web Standards 中进行流式读取,但 UIT 利用了可以使用 Streams API 使用 multipart-formdata-stream-js 读取中间结果的事实。
UIT 通过提供一种优雅的方式将多个 UIT “模块” 组合在一起以获得最终结果,从而巧妙地模块化了文件层次结构上的过滤器和转换。每个 UIT “模块” 都可以应用路径过滤器、内容过滤器和内容转换,以更改文件层次结构中的文件,所有这些都以流式方式进行,甚至可以在眨眼之间将多个文件层次结构合并在一起。
UIT Modules
到目前为止,UIT 提供了以下可以组合以创建强大的文件处理管道的模块:
- uithub.ingestzip - 将 ZIP 文件提取并处理为标准化的 formdata 格式
- uithub.merge - 将多个 formdata 流合并成一个统一的流
- uithub.outputmd - 将数据转换为 markdown 文件并输出
- uithub.outputzip - 将处理后的数据打包到可下载的 ZIP 存档中
- uithub.search - 提供跨文件层次结构搜索能力
- uithub.ziptree - 高性能 zip 文件层次结构提取器
- uithub.otp - 源代理,生成 OTP 以最大限度地减少机密暴露给其他模块。
- uithub - 将多个模块组合在一起,通过它们进行管道传输,并在经过身份验证的 HTML 界面中显示。
每个模块都旨在执行 UIT 四步流程(提取、过滤/转换、合并、输出)中的特定步骤,同时保持性能和低内存使用率。 需要注意的是,这些模块中的每一个都可以独立地作为 cloudflare worker 托管,但是规范并不要求必须托管在 Cloudflare 上,您也可以在其他运行时托管 UIT 模块,只要它符合 UIT Protocol 即可。 另请注意,上面的图表展示了许多尚未存在但可能有利存在的模块。通过开源 UIT,我希望能够让开发人员添加他们需要的模块。
UIT Protocol
UIT Protocol 是表征任何 UIT 模块的约定。 如上图所示,任何 UIT 模块都必须是以下 4 种模块类型之一:
- ingest module - 将任何数据结构流式传输到 FormData 流中
- merge module - 将多个 FormData 源流式传输到单个 FormData 流中
- filter/transform module - 在 FormData “模态”中以流式方式对文件应用过滤器和转换。
- output module - 将 FormData 流流式传输到任何所需的数据结构中
您需要了解才能创建 UIT 模块的唯一正式约定/协议是 UIT 模块使用哪些 FormData 标头。 这些 FormData 标头可以分为标准标头和非标准(自定义)标头:
UIT FormData Headers
Standard FormData Headers
Header | Description | Required
---|---|---
Content-Disposition | 包含 name
(应等于文件名)和 filename
(原始路径名) | Yes
Content-Type | 指定数据的 MIME 类型 | No
Content-Length | 指示数据的未压缩大小 | No
Content-Transfer-Encoding | 指定数据的编码方式:- binary
(二进制文件必需)- 8bit
(建议用于基于文本/utf8 的文件)- quoted-printable
- base64
- 7bit
(默认) | No
Non-Standard (Custom) Headers
Header | Description | Format
---|---|---
x-url | 指定定位二进制文件的 URL。在某些情况下,可能需要省略二进制数据,而仅保留 URL 来定位文件。 | URL 字符串
x-file-hash | 存储文件的哈希值 | 哈希字符串
x-error | 指示管道中的处理错误。在模块中发生错误时,应保留原始传入的文件内容。如果遇到,则不应对其进行过滤或处理,以便我们可以看到每个单独文件的错误,它们发生的位置以及使用了哪些文件输入。 | {handler-id};{status};{message}
Contributing to UIT & Plugin System
UIT 旨在成为一种约定,用于在云中流式传输、过滤和转换二进制和文本文件层次结构,并维护可包含到任何 UIT 数据转换流中的第一方和第三方库的精选列表。
第一步,我的目标是创建一个插件系统,该系统允许从 uithub UI 轻松地进行文件过滤和转换。对于预期的插件,请查看 plugins.json 和 the spec。
The multipart parser 旨在处理所有 FormData
标头,包括任何非标准标头,并且可以成为创建 FormData 过滤器/转换器的有用库。它从原始标头行中提取它们,并使它们在 Part 对象中可用。该库还将原始 headerLines
作为已解析数据结构的一部分进行维护。
如果您希望将新模块添加到此列表或有任何未满足的要求,请打开讨论、问题、pull request 或 reach out 。要创建自己的插件,请按照 GETTING-STARTED.md 和 CONTRIBUTING.md 进行操作。 UIT 也在寻找赞助商。
Links
- TODO.md
- BACKLOG.md
- CHANGELOG.md
- ADR.md
- GETTING-STARTED.md
- CONTRIBUTING.md
- ATTRIBUTION.md
- plugins [html] [md]