我有一个应用程序需要与另一个应用程序的数据库连接。我有读取权限,但没有写入。
目前我正在通过pyodbc使用sql语句来获取行并使用python操作数据。由于我不缓存任何东西,这可能会非常昂贵。
我正在考虑使用ORM来解决我的问题。问题是,如果我使用像“sql alchemy”这样的ORM,它是否足够聪明,可以在其他数据库中获取更改?
E.g。 sql alchemy访问一个表并检索一行。如果该行在sql炼金术之外进行了修改,那么它是否足够聪明可以拿起它?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:更清楚
我有一个应用程序只是一个报告工具,可以调用App A.
我有另一个应用程序来处理名为App B的各种金融交易。
A可以访问B的数据库以检索事务并生成各种报告。有成千上万的交易。我们目前正在python中手动缓存此信息,如果我们需要更新报告,我们刷新缓存。如果我们摆脱缓存,那么结合计算的SQL查询就会变得不可扩展。
答案 0 :(得分:2)
我认为ORM不是解决您的性能问题的方法。默认情况下,ORM往往效率低于行SQL,因为它们可能会获取您不会使用的数据(例如,当您只需要一个字段时执行SELECT *
),尽管SQLAlchemy允许细粒度控制SQL生成的。
现在要实现一个缓存机制,根据你的应用程序,你可以在内存中使用一个简单的字典或者使用memcached或Redis这样的专用系统。
为了使您的缓存数据保持相对新鲜,您可以定期轮询源,如果您的应用程序可以容忍一点延迟,这可能没问题。否则,您将需要具有对数据库的写访问权限的应用程序,以便在发生更新时通知您的应用程序或缓存系统。
编辑:既然您似乎可以控制应用B,并且您已经在应用A中拥有了缓存系统,解决问题的最简单方法可能是在应用B可以调用的应用A中创建回调到期缓存的项目。两个应用程序都需要就约定达成一致,以识别缓存的项目。