gpt4 book ai didi

Django 临时将其他数据库结果与 ORM 合并

转载 作者:可可西里 更新时间:2023-11-01 11:26:02 25 4
gpt4 key购买 nike

这个问题看起来很奇怪,但是我很好奇如何解决这类问题。

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

平台具有专用 OracleSQL 数据库服务器的本地网络应用程序(基于 Java)。

带有 postgres SQL 的平台 B Django

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

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

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

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

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

REDIS 对这个目的有用吗?

我们可以直接访问 OracleDB,也可以在平台 A 中开发特定的端点服务。比方说 API-JSON 端点。

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

请求:给我产品

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

问题是如何得到这个PlatformB:Products |价格:PlatformA 以性能方式。

非常感谢您的宝贵时间,

亲切的问候!

最佳答案

如果实际传递合并数据的端点在 B(基于 django 的应用程序)中,您可以按照您已经提出的建议:

  1. 在 A 中创建一个 REST 端点以获取每个 ID 的产品数据,例如 http://a-host/products/[pk]/prices .
  2. 当 Djange 收到产品+价格请求时,它会使用来自 A 的 REST 端点获取产品数据。您可以添加适当的缓存 header (在 A 中)并使用缓存(在 Django 中)来减少对 A 的请求。缓存时间取决于价格的更新频率以及它们是否针对每个用户进行个性化设置。

这还要求 Django 和 A 知道相同的产品 ID。


或者,按照您自己的建议将数据加载到 Redis 中也是一种选择。如果你已经有一个 A 和 B 都可以访问的 Redis,并且产品数据非常稳定,则更是如此。例如,如果产品每天加载一次,您可以在之后立即重新加载 Redis 中的数据。

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

它还要求 A 和 B 使用相同的产品 ID,并且产品 ID 在请求期间是已知的。


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

您可以将所有内容加载到 SOLR 或 Elastic 等搜索索引中,这些索引已经完全按照您需要的结构准备好。这将允许您搜索产品名称、自动完成、分面、排序、对结果结构进行分页等。您可能会发现分面(在 Elastic 中也称为聚合)尤其有用。

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


您没有提供太多关于系统的信息来真正决定什么是适合您的环境、数据和用例的解决方案。

关于Django 临时将其他数据库结果与 ORM 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45164225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com