Django临时将其他DB结果与ORM合并

时间:2017-07-18 10:32:28

标签: django database postgresql merge redis

这个问题似乎很奇怪,但我对如何解决这类问题非常好奇。

问题是我有两个不同的网络平台,让我们说:

Platform A本地网络应用程序(基于Java),带有专用的OracleSQL数据库服务器。

使用postgres SQL的平台B Django

所有系统都在本地网络中。

因此,在平台B中,有一些django视图需要来自系统A的聚合数据,但这些数据仅在每个请求的基础上需要。

我的意思是,系统A是一个只有产品定价信息的ERP软件,而平台B(django)本身就有产品清单。

所以我需要在django中创建一个视图,列出按价格排序的产品。如何做到这一点?

我正在考虑查询产品的django,将产品列表加载到RAM存储器中,然后向平台A询问发送产品ID数组列表的价格,然后在RAM内存中进行合并以生成查询集按价格排序。

对于这个目的,REDIS可能有任何好处吗?

我们可以直接访问OracleDB,并且可以在平台A中开发特定的端点服务。让我们说一个API-JSON端点。

为了澄清我的问题,数据流可以是:

要求:给我产品

-> PlatformB <-> getPrices() <-> PlatformA
PlatformB:Products | Prices:PlatformA
<- result <- PlatformB

问题是如何获得此PlatformB:产品|价格:平台A的表现方式。

非常感谢你的时间,

亲切的问候!

1 个答案:

答案 0 :(得分:0)

如果实际传递合并数据的端点位于B(基于django的应用程序)中,您可以像您已经提出的那样:

  1. 在A中创建一个REST端点,以获取每个ID的产品数据,如http://a-host/products/[pk]/prices
  2. 当Djange收到产品+价格请求时,它使用来自A的REST端点获取产品数据。您可以添加合适的缓存头(在A中)并使用缓存(在Django中)来减少对A的请求。时间取决于价格的更新频率以及是否按用户个性化。
  3. 这也要求Django和A知道相同的产品ID。

    或者,您可以选择将数据加载到Redis中。如果您已经拥有可由A和B访问的Redis,并且产品数据非常稳定,那么更是如此。例如,如果产品每天加载一次,您可以在之后立即重新加载Redis中的数据。

    这主要是具有高性能的PK查找。如果您需要可搜索的产品,这不是最佳选择。

    它还要求A和B使用相同的产品ID,并且在请求时间内知道产品ID。

    作为第三种选择,如果您需要可搜索,可排序,可过滤的数据和高性能:

    您可以将所有内容加载到搜索索引中,例如SOLR或Elastic,已在您需要交付的结构中完全准备好。这将允许您搜索产品名称,对结果结构进行自动完成,分面,排序,分页等。特别是facetting(也就是Elastic中的聚合)是您可能会觉得有用的东西。

    它还会将耗时的工作转移到导入过程并减轻其请求。在导入过程中,如果A和B 使用相同的产品ID,则可以对齐数据。

    您尚未提供有关系统的大量信息,无法真正确定适合您的环境,数据和用例的最佳解决方案。