LinkedRecords:免后端代码连接的 NoSQL 数据库,性能与配置灵活性兼备! 📅 2026/6/26 4:59:33 导航菜单可切换导航。[ ](/)[ 登录 ](/login?return_tohttps%3A%2F%2Fgithub.com%2Fwolfoo2931%2Flinkedrecords%2F)可进行外观设置。平台- **AI 代码创作**- [GitHub Copilot借助 AI 编写更优质代码](https://github.com/features/copilot)- [GitHub Copilot 应用直接从问题处理到合并代码](https://github.com/features/ai/github-app)- [MCP 注册表新增集成外部工具](https://github.com/mcp)- **开发者工作流**- [Actions自动化任何工作流](https://github.com/features/actions)- [Codespaces即时开发环境](https://github.com/features/codespaces)- [Issues规划和跟踪工作](https://github.com/features/issues)- [代码审查管理代码变更](https://github.com/features/code-review)- **应用程序安全**- [GitHub 高级安全发现并修复漏洞](https://github.com/security/advanced-security)- [代码安全在构建过程中保障代码安全](https://github.com/security/advanced-security/code-security)- [密钥保护防患于未然阻止信息泄露](https://github.com/security/advanced-security/secret-protection)- **探索**- [为何选择 GitHub](https://github.com/why-github)- [文档](https://docs.github.com)- [博客](https://github.blog)- [更新日志](https://github.blog/changelog)- [市场](https://github.com/marketplace)[查看所有功能](https://github.com/features)解决方案- **按公司规模划分**- [企业](https://github.com/enterprise)- [中小型团队](https://github.com/team)- [初创企业](https://github.com/enterprise/startups)- [非营利组织](https://github.com/solutions/industry/nonprofits)- **按用例划分**- [应用现代化](https://github.com/solutions/use-case/app-modernization)- [DevSecOps](https://github.com/solutions/use-case/devsecops)- [DevOps](https://github.com/solutions/use-case/devops)- [CI/CD](https://github.com/solutions/use-case/ci-cd)- [查看所有用例](https://github.com/solutions/use-case)- **按行业划分**- [医疗保健](https://github.com/solutions/industry/healthcare)- [金融服务](https://github.com/solutions/industry/financial-services)- [制造业](https://github.com/solutions/industry/manufacturing)- [政府部门](https://github.com/solutions/industry/government)- [查看所有行业](https://github.com/solutions/industry)[查看所有解决方案](https://github.com/solutions)资源- **按主题探索**- [AI](https://github.com/resources/articles?topicai)- [软件开发](https://github.com/resources/articles?topicsoftware-development)- [DevOps](https://github.com/resources/articles?topicdevops)- [安全](https://github.com/resources/articles?topicsecurity)- [查看所有主题](https://github.com/resources/articles)- **按类型探索**- [客户案例](https://github.com/customer-stories)- [活动与网络研讨会](https://github.com/resources/events)- [电子书与报告](https://github.com/resources/whitepapers)- [商业洞察](https://github.com/solutions/executive-insights)- [GitHub 技能](https://skills.github.com)- **支持与服务**- [文档](https://docs.github.com)- [客户支持](https://support.github.com)- [社区论坛](https://github.com/orgs/community/discussions)- [信任中心](https://github.com/trust-center)- [合作伙伴](https://github.com/partners)[查看所有资源](https://github.com/resources)开源- **社区**- [GitHub 赞助资助开源开发者](https://github.com/sponsors)- **项目**- [安全实验室](https://securitylab.github.com)- [维护者社区](https://maintainers.github.com)- [加速器](https://github.com/accelerator)- [GitHub 之星](https://stars.github.com)- [存档项目](https://archiveprogram.github.com)- **仓库**- [主题](https://github.com/topics)- [热门趋势](https://github.com/trending)- [集合](https://github.com/collections)企业- **企业解决方案**- [企业平台由 AI 驱动的开发者平台](https://github.com/enterprise)- **可用附加组件**- [GitHub 高级安全企业级安全功能](https://github.com/security/advanced-security)- [Copilot for Business企业级 AI 功能](https://github.com/features/copilot/copilot-business)- [高级支持企业级 24/7 支持](https://github.com/premium-support)[定价](https://github.com/pricing)搜索相关可搜索或跳转至...可搜索代码、仓库、用户、问题、拉取请求...可进行搜索。可清除搜索内容。[搜索语法提示](https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax)提供反馈我们会阅读每一条反馈并认真对待您的意见。包含我的电子邮件地址以便可以联系到我取消 提交反馈保存的搜索使用保存的搜索可以更快地筛选结果名称查询要查看所有可用的限定符请参阅我们的[文档](https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax)。取消 创建保存的搜索[ 登录 ](/login?return_tohttps%3A%2F%2Fgithub.com%2Fwolfoo2931%2Flinkedrecords%2F)[ 注册 ](/signup?ref_ctaSignupref_locheaderloggedoutref_page%2F%3Cuser-name%3E%2F%3Crepo-name%3Esourceheader-reposource_repowolfoo2931%2Flinkedrecords)可进行外观设置。重置焦点您已在另一个标签页或窗口中登录。[重新加载]()以刷新您的会话。您已在另一个标签页或窗口中注销。[重新加载]()以刷新您的会话。您已在另一个标签页或窗口中切换账户。[重新加载]()以刷新您的会话。 关闭提醒{{ message }}[ wolfoo2931 ](/wolfoo2931) / **[linkedrecords](/wolfoo2931/linkedrecords) **公开- [ 通知 ](/login?return_to%2Fwolfoo2931%2Flinkedrecords) 您必须登录才能更改通知设置- [ 分叉 0 ](/login?return_to%2Fwolfoo2931%2Flinkedrecords)- [ 加星 45 ](/login?return_to%2Fwolfoo2931%2Flinkedrecords)- [ 代码 ](/wolfoo2931/linkedrecords)- [ 问题 14 ](/wolfoo2931/linkedrecords/issues)- [ 拉取请求 1 ](/wolfoo2931/linkedrecords/pulls)- [ 操作 ](/wolfoo2931/linkedrecords/actions)- [ 项目 ](/wolfoo2931/linkedrecords/projects)- [ 安全与质量 0 ](/wolfoo2931/linkedrecords/security)- [ 洞察 ](/wolfoo2931/linkedrecords/pulse)其他导航选项- [ 代码 ](/wolfoo2931/linkedrecords)- [ 问题 ](/wolfoo2931/linkedrecords/issues)- [ 拉取请求 ](/wolfoo2931/linkedrecords/pulls)- [ 操作 ](/wolfoo2931/linkedrecords/actions)- [ 项目 ](/wolfoo2931/linkedrecords/projects)- [ 安全与质量 ](/wolfoo2931/linkedrecords/security)- [ 洞察 ](/wolfoo2931/linkedrecords/pulse)[](/wolfoo2931/linkedrecords)wolfoo2931/linkedrecords主分支[分支](/wolfoo2931/linkedrecords/branches)[标签](/wolfoo2931/linkedrecords/tags)[](/wolfoo2931/linkedrecords/branches)[](/wolfoo2931/linkedrecords/tags)可转到文件代码打开更多操作菜单文件夹和文件| 名称 | 名称 | 最后提交信息 | 最后提交日期 || --- | --- | --- | --- |最新提交#### 历史记录[582 次提交](/wolfoo2931/linkedrecords/commits/main/)[](/wolfoo2931/linkedrecords/commits/main/)582 次提交[.github](/wolfoo2931/linkedrecords/tree/main/.github .github)|[.github](/wolfoo2931/linkedrecords/tree/main/.github .github)||[.vscode](/wolfoo2931/linkedrecords/tree/main/.vscode .vscode)|[.vscode](/wolfoo2931/linkedrecords/tree/main/.vscode .vscode)||[bin](/wolfoo2931/linkedrecords/tree/main/bin bin)|[bin](/wolfoo2931/linkedrecords/tree/main/bin bin)||[docs](/wolfoo2931/linkedrecords/tree/main/docs docs)|[docs](/wolfoo2931/linkedrecords/tree/main/docs docs)||[lib](/wolfoo2931/linkedrecords/tree/main/lib lib)|[lib](/wolfoo2931/linkedrecords/tree/main/lib lib)||[readings](/wolfoo2931/linkedrecords/tree/main/readings readings)|[readings](/wolfoo2931/linkedrecords/tree/main/readings readings)||[specs.wdio](/wolfoo2931/linkedrecords/tree/main/specs.wdio specs.wdio)|[specs.wdio](/wolfoo2931/linkedrecords/tree/main/specs.wdio specs.wdio)||[specs](/wolfoo2931/linkedrecords/tree/main/specs specs)|[specs](/wolfoo2931/linkedrecords/tree/main/specs specs)||[src](/wolfoo2931/linkedrecords/tree/main/src src)|[src](/wolfoo2931/linkedrecords/tree/main/src src)||[.eslintignore](/wolfoo2931/linkedrecords/blob/main/.eslintignore .eslintignore)|[.eslintignore](/wolfoo2931/linkedrecords/blob/main/.eslintignore .eslintignore)||[.eslintrc.js](/wolfoo2931/linkedrecords/blob/main/.eslintrc.js .eslintrc.js)|[.eslintrc.js](/wolfoo2931/linkedrecords/blob/main/.eslintrc.js .eslintrc.js)||[.gitignore](/wolfoo2931/linkedrecords/blob/main/.gitignore .gitignore)|[.gitignore](/wolfoo2931/linkedrecords/blob/main/.gitignore .gitignore)||[.nvmrc](/wolfoo2931/linkedrecords/blob/main/.nvmrc .nvmrc)|[.nvmrc](/wolfoo2931/linkedrecords/blob/main/.nvmrc .nvmrc)||[CLAUDE.md](/wolfoo2931/linkedrecords/blob/main/CLAUDE.md CLAUDE.md)|[CLAUDE.md](/wolfoo2931/linkedrecords/blob/main/CLAUDE.md CLAUDE.md)||[Dockerfile](/wolfoo2931/linkedrecords/blob/main/Dockerfile Dockerfile)|[Dockerfile](/wolfoo2931/linkedrecords/blob/main/Dockerfile Dockerfile)||[LICENSE](/wolfoo2931/linkedrecords/blob/main/LICENSE LICENSE)|[LICENSE](/wolfoo2931/linkedrecords/blob/main/LICENSE LICENSE)||[Readme.md](/wolfoo2931/linkedrecords/blob/main/Readme.md Readme.md)|[Readme.md](/wolfoo2931/linkedrecords/blob/main/Readme.md Readme.md)||[docker-compose.yml](/wolfoo2931/linkedrecords/blob/main/docker-compose.yml docker-compose.yml)|[docker-compose.yml](/wolfoo2931/linkedrecords/blob/main/docker-compose.yml docker-compose.yml)||[package-lock.json](/wolfoo2931/linkedrecords/blob/main/package-lock.json package-lock.json)|[package-lock.json](/wolfoo2931/linkedrecords/blob/main/package-lock.json package-lock.json)||[package.json](/wolfoo2931/linkedrecords/blob/main/package.json package.json)|[package.json](/wolfoo2931/linkedrecords/blob/main/package.json package.json)||[tsconfig.json](/wolfoo2931/linkedrecords/blob/main/tsconfig.json tsconfig.json)|[tsconfig.json](/wolfoo2931/linkedrecords/blob/main/tsconfig.json tsconfig.json)||[vitest.browser.config.ts](/wolfoo2931/linkedrecords/blob/main/vitest.browser.config.ts vitest.browser.config.ts)|[vitest.browser.config.ts](/wolfoo2931/linkedrecords/blob/main/vitest.browser.config.ts vitest.browser.config.ts)||[wdio.conf.ts](/wolfoo2931/linkedrecords/blob/main/wdio.conf.ts wdio.conf.ts)|[wdio.conf.ts](/wolfoo2931/linkedrecords/blob/main/wdio.conf.ts wdio.conf.ts)||[webpack.config.js](/wolfoo2931/linkedrecords/blob/main/webpack.config.js webpack.config.js)|[webpack.config.js](/wolfoo2931/linkedrecords/blob/main/webpack.config.js webpack.config.js)|可查看所有文件仓库文件导航- README- MIT 许可证LinkedRecordsLinkedRecords 是一款 NoSQL 数据库你可以直接从单页应用程序连接到它无需编写后端代码。 入门指南若想使用 LinkedRecords 构建应用程序可查看文档网站- **[简介](https://linkedrecords.com)** - 了解 LinkedRecords 是什么以及它的工作原理- **[入门指南](https://linkedrecords.com/getting-started)** - 逐步指导你构建第一个应用程序性能下面的图表展示了随着数据库规模增长核心操作的性能表现。每次合并到主分支后该图表会自动更新。负载测试模拟了一个真实的文档管理场景。每个 **createDocument** 操作会创建一个包含 8 个属性7 个键值属性 1 个长文本属性的蓝图其中包括文档内容、协作者/读者组、评论、引用和配置。**fetchDocuments** 操作会列出用户的所有文档而 **fetchDocument** 操作则会检索单个文档及其所有关联属性。[](/wolfoo2931/linkedrecords/blob/main/.github/assets/load-test-chart.png)负载测试的工作原理该测试模拟了一个多租户环境涉及三个用户- **用户 1** 持续创建文档在当前测试配置中为 5000 次迭代。- **用户 2** 是“被测用户”每创建 10 个文档用户 2 就创建 1 个文档最多创建 **300 个文档**。当达到 300 个文档时该用户的文档创建操作停止。- **用户 3** 偶尔创建文档每 1000 次迭代创建一次x 轴表示 **数据库中的文档总数**所有用户拥有的文档总和y 轴表示响应时间毫秒。**测量内容**| 操作 | 描述 || --- | --- || createDocument | 创建一个包含所有相关属性内容、配置、评论、引用、协作者/读者组的新文档所需的时间。可以看到createDocument 操作的时间与数据库中的文档总数以及用户可见的文档数量无关。 || fetchDocuments | 获取用户 2 的文档列表最多 300 个可见文档所需的时间。可以看到该操作的时间取决于用户可见的文档数量但与文档总数无关图表在约 3000 个文档时趋于平缓。 || fetchDocument | 获取单个文档及其所有相关数据内容、评论、组、活动状态、引用所需的时间。可以看到该操作的时间取决于用户可见的文档数量但与文档总数无关图表在约 3000 个文档时趋于平缓。 |概念你可以把 LinkedRecords 想象成一个任何人都能注册并插入数据的容器。只要你不与其他用户或组共享这些数据那么只有你能访问自己写入的数据。理论上任何用户都能直接使用 LinkedRecords API 来写入和检索数据。然而这样做并不方便——就像你不会期望用户编写 SQL 查询一样你也不会期望他们与 LinkedRecords API 进行交互。LinkedRecords 应用程序是一种专门的前端它隐藏了 API 并提供了一个方便的用户界面使用户能够完成他们的任务。在传统的 SQL 世界中不让用户直接访问数据库的原因不只是不方便授权问题更是一个重要因素。而对于 LinkedRecords这不再是一个问题授权功能直接内置在 API 中。这需要我们进行一个小小的思维转变不再在后端为所有记录定义通用的授权规则而是由插入数据记录的用户指定谁可以读取该记录。对于 LinkedRecords API我们追求的主要特性是简单性、灵活性和解耦架构。- **简单性**API 不应有太多的端点或方法而是由几个基本的构建块组成。- **灵活性**少数可用的端点可以组合使用以支持各种用例。内置的授权模型应允许实现不同的授权用例如 RBAC 等。- **解耦性**LinkedRecords 应与将其用作数据存储的单页应用程序解耦。可以将其视为可以直接从 React 应用程序调用的 SQL而无需担心权限问题它比 SQL 更易于阅读并且提供实时更新。配置LinkedRecords 通过环境变量进行配置。请参阅以下表格。| 环境变量名称 | 示例 | 描述 || --- | --- | --- || PGHOST | localhost | PostgreSQL 服务器的主机名。 || PGUSER | linkedrecords | PostgreSQL 的用户名。 || PGPASSWORD | xxxx | PostgreSQL 的密码。 || PGDATABASE | xxxx | PostgreSQL 的数据库名称。 || CORS_ORIGIN | [, ] | CORS 源头部的内容。如果未提供则使用 FRONTEND_BASE_URL 的值。 || SERVER_BASE_URL | | LinkedRecords 服务器的公共 URL。 || DEFAULT_STORAGE_SIZE_QUOTA | 500 | 默认存储大小配额MB。 || QUOTA_COUNT_KV_ATTRIBUTES | false | 是否从账户配额中扣除键值属性的存储空间。 || QUOTA_COUNT_LT_ATTRIBUTES | false | 是否从账户配额中扣除长文本属性的存储空间。 || ENABLE_AUTH_RULE_CACHE | false | 是否启用授权查找的缓存。这可能需要大量内存。 || SHORT_LIVED_ACCESS_TOKEN_SIGNING | xxxx | 配置此选项是可选的但可以减轻数据库的负载因为在客户端订阅属性更改时将使用短期访问令牌来检查访问权限。 |机密客户端模式如果提供了“公共客户端模式”部分中描述的配置本节中的环境变量都是可选的。如果 LinkedRecords 以机密客户端模式运行会话令牌将存储在 HttpOnly cookie 中。从安全角度来看这被认为是推荐的方法。但是如果 LinkedRecord 服务器和前端不共享同一域名这是不可能的。跨不同域名时cookie 会变成第三方 cookie因此无法使用此模式。| 环境变量名称 | 示例 | 描述 || --- | --- | --- || FRONTEND_BASE_URL | | 前端的基础 URL。它将用于 Access-Control-Allow-Origin HTTP 头部也是 OpenID 连接重定向所必需的。 || AUTH_ISSUER_BASE_URL | | OIDC 颁发者的 URL。可以是任何符合 OpenID Connect 标准的身份提供者如 Auth0、Okta。 || AUTH_CLIENT_ID | | 客户端 ID。可以从身份提供者处获取。 || AUTH_CLIENT_SECRET | | 客户端密钥。可以从身份提供者处获取。 || AUTH_IDP_LOGOUT | true | 设置为 true 时用户会话将在应用程序和身份提供者中同时销毁。 || AUTH_COOKIE_SIGNING_SECRET | xxxx | 用于签署 cookie 的密钥。 |公共客户端模式如果单页应用程序托管在与 LinkedRecords 服务器不同的域名上单页应用程序必须将访问令牌存储在浏览器中。在这种情况下需要配置以下环境变量。| 环境变量名称 | 示例 | 描述 || --- | --- | --- || ALLOW_HTTP_AUTHENTICATION_HEADER | true | 允许公共客户端通过 HTTP 身份验证头部提供访问令牌来进行请求。 || AUTH_ISSUER_BASE_URL | | OIDC 颁发者的 URL。可以是任何符合 OpenID Connect 标准的身份提供者如 Auth0、Okta。 || AUTH_TOKEN_AUDIENCE | your-audience-id | LinkedRecords 将检查 JWT 承载令牌中指定的受众是否与该字段中指定的值匹配。 || AUTH_CLIENT_ID | | 客户端 ID。可以从身份提供者处获取。 |单页应用程序需要按如下方式初始化 LinkedRecords SDKimport LinkedRecords from ./src/browser_sdk;const oidcConfig {client_id: your-client-id,redirect_uri: window.location.origin /callback,};// 实例化 LinkedRecords 将自动处理 OIDC 重定向回调const lr new LinkedRecords(new URL(https://your-backend.com), oidcConfig);// 检查用户是否已认证// const isAuth await lr.isAuthenticated();// 启动登录流程例如在按钮点击时// lr.login();可选配置 - S3如果配置了 S3它将用于存储 blob 属性值。如果未配置这些值将存储在 PostgreSQL 数据库中。建议配置 S3。| 环境变量名称 | 示例 | 描述 || --- | --- | --- || S3_COPY_FROM_BL_ATTRIBUTE_TABLE | false | 用于将 blob 存储从 PostgreSQL 迁移到 S3。 || S3_ENDPOINT | s3.system.svc.cluster.local | S3 端点的主机名。 || S3_BUCKET | linkedrecords-blobs | 存储桶的名称。该存储桶必须已经存在。 || S3_ACCESS_KEY | xxx | 用于将 blob 上传到 S3 的访问密钥 ID。 || S3_SECRET_KEY | xxx | 用于将 blob 上传到 S3 的秘密密钥 ID。 || S3_USE_SSL | false | 上传/下载到 S3 时不使用 TLS。 |可选配置 - Paddle| 环境变量名称 | 示例 | 描述 || --- | --- | --- || PADDLE_NOTIFICATION_SECRET | xxxx | 如果使用 Paddle 进行配额升级这需要是用于验证 Webhook 内容签名的通知密钥。 || PADDLE_API_URL | | Paddle API 的 URL。 || PADDLE_API_KEY | xxx | Paddle API 密钥。 |关于LinkedRecords 是一个受三元组存储灵活特性启发的 Web 应用程序后端即服务BaaS解决方案具备实时协作和无服务器授权功能 [linkedrecords.com](https://linkedrecords.com https://linkedrecords.com)主题[ 无服务器 ](/topics/serverless 主题: 无服务器) [ RDF ](/topics/rdf 主题: RDF) [ 语义网 ](/topics/semantic-web 主题: 语义网) [ 授权 ](/topics/authorization 主题: 授权) [ BaaS ](/topics/baas 主题: BaaS) [ 三元组存储 ](/topics/triplestore 主题: 三元组存储) [ 网页开发 ](/topics/webdevelopment 主题: 网页开发)资源Readme许可证MIT 许可证哎呀加载时出现错误。[请重新加载此页面]()[ 活动](/wolfoo2931/linkedrecords/activity)加星[ **45** 颗星](/wolfoo2931/linkedrecords/stargazers)关注者[ **1** 位关注者](/wolfoo2931/linkedrecords/watchers)分叉[ **0** 次分叉](/wolfoo2931/linkedrecords/forks)[ 举报仓库 ](/contact/report-content?content_urlhttps%3A%2F%2Fgithub.com%2Fwolfoo2931%2Flinkedrecordsreportwolfoo2931%28user%29)版本发布[版本发布](/wolfoo2931/linkedrecords/releases)未发布任何版本包[包 0](/users/wolfoo2931/packages?repo_namelinkedrecords)哎呀加载时出现错误。[请重新加载此页面]()哎呀加载时出现错误。[请重新加载此页面]()[贡献者](/wolfoo2931/linkedrecords/graphs/contributors)* * *哎呀加载时出现错误。[请重新加载此页面]()语言- [ TypeScript 97.5% ](/wolfoo2931/linkedrecords/search?ltypescript)- [ JavaScript 1.8% ](/wolfoo2931/linkedrecords/search?ljavascript)- 其他 0.7%页脚[ ](https://github.com) (C) 2026 GitHub, Inc.#### 页脚导航- [条款](https://docs.github.com/site-policy/github-terms/github-terms-of-service)- [隐私](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)- [安全](https://github.com/security)- [状态](https://www.githubstatus.com/)- [社区](https://github.community/)- [文档](https://docs.github.com/)- [联系我们](https://support.github.com?tagsdotcom-footer)- 管理 cookie- 不共享我的个人信息此时你无法执行该操作。