postgresql - 限制 PostgreSQL 上用户生成的查询的资源耗尽
问题描述
我正在编写一个面向公众的查询和搜索 API,用户可以在其中指定多个条件。这些条件将通过各种过滤器和条件映射到复杂的 SQLAlchemy 查询。
限制查询的复杂性和持续时间的最佳方法是什么,这样用户就不会意外或故意通过创建处理时间过长的查询而导致系统拒绝服务?不安全的情况是 1) 一次返回太多项目 2) 结果查询太复杂和太慢,并且 PostgreSQL 服务器需要永远评估。根据过滤器,数据库可能会返回少数或数百万个项目。
以固定大小实现分页是
LIMIT
唯一的方法还是有更高级的方法来解决这个问题?我可以在评估的 SQL 表达式或 SQLAlchemy 会话上添加一个条件,使其在例如 1 秒后超时,无论查询是什么样的?
使用 PostgreSQL 作为数据库。
解决方案
推荐阅读
- angular - 没有 MockDialogRef 的提供者
- symfony - 使用 EntityType 显示选择时,无法从 Symfony 表单中保存实体
- javascript - 在 selenium python 中单击滑块按钮
- node.js - 让用户将 iframe 添加到他们的个人资料的常用方法?
- ruby-on-rails - 复选框不会显示在网页上,但不会出现错误
- c++ - 将常量指针推送到 std::stack
给出编译错误 - angular - 素数树表选择未按预期工作
- java - JavaFX 折线图点操作
- python - ELMo 嵌入层与 Keras
- angular - 有没有办法使用 Angular 2 在一个 HTTP 请求中发送多个标头?