2017-10-16 113 views
2

我有一個現有的關係型Postgresql數據庫。一些表包含非常胖的blob,它們會比NoSQL文檔好得多。這將顯着減輕我們的關係數據庫。在單個Postgresql實例上組合NoSQL和關係數據庫

因此,我們考慮將這些blob表移動到像CosmosDB或MongoDB這樣的NoSQL解決方案中。但是,有純關係表的外鍵依賴關係,這使得將這些表移出到他們自己的數據庫變得非常複雜。

我發現PSQL本身支持存儲文檔並可以分發。我目前看到的解決方案是CitusData和Postgres XL。對於那些使用那些他們如何比較的人?

有沒有人遇到過類似的情況?你是否分離出一個NoSQL數據庫?或者有人將他們的PSQL劃分爲關係型和NoSQL部分?那是怎麼回事?你有什麼建議在事後看出來?

+1

這種類型的問題非常廣泛和意見徵求,沒有客觀的答案。如何實現這一點真的取決於你,關於使用多個數據庫(* polyglot persistence *),vs在單個數據庫(在你的情況下是Postgres)內工作。不幸的是,關於StackOverflow的主題。 –

+1

所以基本上你真的想要SQL但稱它爲nosql?爲什麼?你有沒有嘗試過把所有的「SQL」,或至少是JSON對象? NoSQL需要解決的問題是什麼? –

回答

0

每RDBMS-> NoSQL的遷移需要的兩個一: 1.嵌入一些相關文件到實際上是由用戶查詢 2.參照由ID相關的文件,並推斷在讀這些關係的那些。

非常典型,每個人每天都在做,不要害怕。順便說一句,你不必在Cosmos DB和MongoDB之間做出選擇 - 只需使用Cosmos DB和MongoDB API即可。

+0

OP不要求從RDBMS-> NoSQL進行遷移。它不像嵌入和引用那麼簡單。通常整個模式需要重新評估。 –

+0

我的評論涉及到這個有爭議的思路:_「我們認爲將這些blob表移動到像CosmosDB或MongoDB這樣的NoSQL解決方案中,但是存在與純關係表的外鍵依賴關係,這使得將這些表移出自己的數據庫「。_是的,它是RBDMS-> NoSQL。 – alekseys

5

(西特斯工程師在這裏)

Postgres有JSONB列類型是強大和靈活。你可以做的是保持你的結構表,併爲blob數據放置一個jsonb列。用單節點Postgres測試這個,如果這對你有用,太棒了!

如果您的數據規模有問題,即單個機器的內存或存儲或CPU不足以滿足您的工作負載,並且您無法擴大規模,那麼您可以嘗試使用Citus或Postgres-XL進行擴展。

我對Postgres-XL沒有經驗,但Citus很容易嘗試。有可以使用的碼頭圖像,或者您可以在Citus Cloud上創建一個賬戶來嘗試1周的免費開發計劃(它不適合基準測試)。

-3

您不需要Citus或Postgres-XL使用Progres的JSONB文檔數據類型(它們的NoSQL數據類型)。定期開箱的Postgres可以默認這樣做。

這兩者之間有很長的細節清單。需要注意的是,Postgres-XL沒有HA或故障轉移支持。如果在集羣中丟失任何節點,則會丟失整個數據庫。在Citus方面,準備一些非常昂貴的六位數年度訂閱費,並被迫將其用作「雲」服務。他們在技術上支持你運行你的自我,但他們扔了這麼多的路障,這是不可行的。