返回首页
最新
我有一个Postgres模式,用于关联作者、帖子、评论、点赞、关注以及各种内容,这在关系查询中表现得非常出色。<p>特别是“文章”表,除了“正文”列之外,其他都很好,而在这列中,我突然需要存储一个大型的Markdown文件。<p>我想在MongoDB中创建一个“article_bodies”表,存储许多[article_id:article_body]的条目,我理解这正是MongoDB的用途。我认为这样可以提高Postgres的性能,同时让我在各处继续编写关系查询。<p>有没有快速简便的方法将我的Postgres“articles”表与MongoDB的“articles”表连接起来?我正在使用PostgREST来托管REST API,这会对我预期的性能产生影响吗?<p>我是自学的网页开发者,但似乎一切内容要么最适合使用关系数据库,要么最适合使用文档数据库,其中MongoDB和Postgres是最广泛使用的标准。有没有专门支持连接这两者的工具的项目或公司?我们是否终于可以停止构建新的数据库了?
我刚刚学到了一个代价高昂的教训,想在这里分享,以免其他人犯同样的错误。
我最近因为一个API密钥泄露而损失了300美元。这一切始于谷歌云的一笔意外200美元的收费,当我调查时,发现前一天还有另一笔100美元的收费。这两笔费用都是因为我从未故意设置的Gemini API使用。
经过深入调查,我发现问题所在:我在一个我最终弃用的功能的脚本中硬编码了一个API密钥。这个文件在代码库中只存在了两天,但这足以导致密钥泄露。谷歌实际上向我发送了关于异常活动的警报,但我错过了这些警报,因为它们发送到了一个不常查看的邮箱。
我学到了以下几点:
1. 切勿硬编码API密钥 - 使用环境变量或.env文件,即使是临时代码也要如此。
2. 设置账单警报 - 谷歌云(以及其他服务提供商)允许你设置意外收费的警报。
3. 检查所有关联的邮箱 - 不要忽视通知,即使它们发送到次要账户。
4. 不要仅仅依赖GitHub的秘密扫描 - 这很有用,但重命名变量可以绕过它。
这一切发生在我尝试“氛围编码”(让AI快速生成代码)的时候,但我意识到人类的监督仍然至关重要,尤其是在安全方面。
希望这能帮助某人避免同样代价高昂的错误!
简而言之:在一个已弃用的脚本中硬编码了API密钥,密钥泄露,我被收费300美元。务必使用环境变量并设置账单警报!
厌倦了重复的 PostgreSQL 数据库设置拖慢你的 Go 测试吗?
我开发了 pgdbtemplate 来解决这个问题。它利用 PostgreSQL 的原生模板数据库,在毫秒级别内创建完全迁移的测试数据库,而不是几秒钟。
问题:传统的测试设置在每个测试中都运行所有的迁移。对于复杂的架构,这在每次测试运行中浪费了几分钟。
解决方案:创建一个“黄金”模板数据库。每个测试都可以通过 CREATE DATABASE ... TEMPLATE 立即获得自己独立的副本。
基准测试数据不骗人:
- 对于复杂架构(5 个以上表),速度提升 1.5 倍
- 创建 200 个数据库节省 37% 的时间
- 内存使用减少 17%
- 随着架构复杂性的增加,性能提升更显著
它是:
- 线程安全,专为 t.Parallel() 设计
- 驱动程序无关:支持 pgx 和 pq
- 与 testcontainers-go 集成
- MIT 许可证
我非常希望得到 HN 社区的反馈,特别是在以下方面:
- API 设计(ConnectionProvider/MigrationRunner 接口)
- 进一步性能优化的想法
- SQL 格式化代码的安全审计
请查看 GitHub 上的代码和基准测试: [https://github.com/andrei-polukhin/pgdbtemplate](https://github.com/andrei-polukhin/pgdbtemplate)