缓慢的数据库访问FastAPI + Firebase

问题描述

我正在尝试构建一个后端服务 (FastAPI),该服务使用 Pyrebase 帮助程序库(如 Firebase 文档所建议)连接到 Firebase。 Firebase 实时数据库的结构如下:

"myproject_db" : {
        "movies":
            "key1": {
                "movie_id": 33
                "other_id": 44
            },"ratings":
            "key1": {
                "user_id" : 1
                "rating" : 5
                "movie_id" : 33
            },}

电影和收视率数据库有 10,000 多个字段。

现在我的特定用户方法 /getRatedMovies 描述如下。 即使它有效,它也需要超过 30 秒的时间才能完成。主要原因是电影的迭代。似乎每次我需要找到一部特定的电影时,我都需要浏览整个表格。是否有我缺少的替代解决方案? 谢谢。

@app.get("/getRatedMovies")
async def ratedMovies():
    try:
        ratings = db.child("ratings").order_by_child("user_id").equal_to(username).get()

        restructuredMovies: List[Movie] = []
        for rating in ratings.each():
            movieid: int = rating.val()["movie_id"]
            movies = db.child("movies").order_by_child("movie_id").equal_to(movie_id).get()
            for movie in movies:
                movieid: int = movie.val()['movie_id']
                other_id: Optional[str] = movie.val()["other_id"]
                restructuredMovie: Movie = Movie(title = movie.val()["title"],movieid = movieid,other_id = other_id)
                restructuredMovies.append(restructuredMovie)
        return {"Movies": restructuredMovies}
    except Exception as error:
        return {"error": "Something went wrong."}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...