2017-07-18 25 views
0

這個問題似乎很奇怪,但我很好奇如何解決這類問題。Django臨時合併ORM的其他數據庫結果

的問題是,我有兩個不同的網絡平臺,讓說:

平臺的本地網絡應用(基於Java)與專用OracleSQL數據庫服務器。

B平臺的Django與Postgres的SQL

所有系統都在本地網絡。

因此,在平臺B中,有一些django視圖需要來自系統A的聚合數據,但這些數據僅在每個請求的基礎上需要。

我的意思是,系統A是一個ERP軟件,只有產品的定價信息,而平臺B(django)有自己的產品列表。

所以我需要在django中創建一個按價格排序的產品列表。如何做到這一點?

我在考慮爲產品查詢django,將產品列表加載到RAM存儲器中,然後向Platform A詢問發送產品ID列表的價格,然後在RAM內存中進行合併以生成按價格排序的查詢集。

爲了這個目的,REDIS可能會有什麼用?

我們可以直接訪問OracleDB,也可以在平臺A中開發特定的端點服務。讓我們說一個API-JSON端點。

爲了澄清我的問題,數據流可以是:

請求:給我的產品

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

的問題是如何得到這個PlatformB:產品|價格:平臺A的表現方式。

非常感謝您的時間,

親切的問候!

回答

0

如果實際投放量合併數據端點處於B(Django的基於應用程序),你可以因爲你已經提出:

  1. 創建一個一個REST端點,以獲取每個ID的產品數據,如http://a-host/products/[pk]/prices
  2. 當Djange獲得產品+價格請求時,它使用來自A的REST端點獲取產品數據。您可以添加不錯的緩存標頭(在A中)並使用緩存(在Django中)來減少對A緩存的請求時間取決於價格更新的頻率以及每個用戶是否是個性化的。

這也要求Django和A知道相同的產品ID。


或者,如您自己提出的將數據加載到Redis中也是一個選項。更重要的是,如果您已經擁有可以通過A和B訪問的Redis,並且產品數據非常穩定。例如,如果產品每天加載一次,您可以在之後立即重新加載Redis中的數據。

這主要是高性能的PK查找。如果您需要可搜索的產品,這不是最好的選擇。

它還要求A和B使用相同的產品ID,產品ID在請求時間內是已知的。


作爲第3選擇,如果你需要搜索,排序,過濾數據,以及高性能:

你可以一切都加載到像SOLR或彈性搜索索引,已經完全在結構製備的你需要它交付。這將允許您搜索產品名稱,在結果結構中進行自動完成,分面,排序和分頁等。特別是分面(也稱爲Elastic中的聚合)是您可能會覺得有用的。

它也會將耗時的工作轉移到導入過程並減輕其請求。在導入過程中,如果A和B都對齊數據,則而不是使用相同的產品ID。


您沒有提供該系統的大量信息,真正決定什麼是對你的環境中,數據和使用情況下獲得良好的解決方案。

+0

非常感謝你的迴應。 問題是我需要平臺B(django)上的主題信息,因爲這裏有產品/價格顯示的網頁前端。 Elasticsearch解決方案可能是一個選項.. –