我有一个简单的基础设施,它使用django服务器作为API和PrestoDb作为查询引擎。一切对我来说都很好,但我几乎没有限制,具体取决于 prestodb:
- Prestodb 不支持分页,如何管理大量数据? 将其加载到内存中是昂贵的。
- 我为每个查询一次又一次地打开和关闭与presto的连接,仅使用一个或两个连接并在整个应用程序中使用它们的最佳方法是什么? 向用户
- 显示错误而不是原始异常的正确方法是什么?
- 对于常见数据,应该使用哪种缓存机制?
- 我正在将芹菜用于后台作业,还有其他用于运行未在 python 服务器上加载的后台作业吗?
- django 的最佳实践是什么?有什么有用的链接吗?
这个问题非常广泛,所以让我只回答关于分页的部分。
Presto 确实支持通过 SQL 标准OFFSET m FETCH NEXT n ROWS ONLY
语法或使用简化OFFSET m LIMIT n
语法进行分页。
您可以在博客文章中阅读有关此内容的更多信息 https://trino.io/blog/2020/02/03/beyond-limit-presto-meets-offset-and-ties.html
当然,这主要适用于即席查询,或者当您没有改进实际查询结构的选项时。对于计划查询或属于某些工作流(非临时(的查询,建议使用查询谓词(如果相关(而不是 OFFSET。在 https://use-the-index-luke.com/sql/partial-results/fetch-next-page 查看更多信息。
首先,Presto不是用于事务目的,而是用于分析目的,通常具有大量数据。在事务性的情况下,通过Django ORM/Models连接的MySql/Postgres是更好的选择。
- 不,它没有。根据此处和此处,您必须获取所有数据,将其缓存在后端并查询。查询/过滤器应该非常特殊,以便获得少量感兴趣的数据。例如,考虑添加日期筛选器并将其限制为几天/几个月。这样,您可以限制用户不要执行繁重的查询。
- 如果不需要不同的配置(如事务隔离级别(,则可以重复使用相同的连接
- 关于数据库错误,只需返回带有 500 代码的响应内部错误消息。还要确保记录堆栈跟踪
- Django 有一个开箱即用的缓存框架
- 芹菜是一个不错的选择,它通常与 Redis 或 RabbitMQ 搭配。这些服务与主 Django 应用程序分开部署
- Django 文档应该是一个好的开始