2010-12-13 24 views
24

我有一個應用程序完全使用PostgreSQL。在閱讀Mongodb之後,我有興趣瞭解該應用如何與之配合。幾周後,我將整個系統遷移到Mongodb。Mongodb和PostgreSql想法

我喜歡Mongodb的一些東西。但是,我發現我在PostgreSql中做的某些查詢,在Mongodb中無法有效地執行。特別是,當我不得不加入幾張表來計算一些邏輯。例如,this

此外,我正在使用Ruby on Rails 3和一個名爲Mongoid的ODM。 Mongoid仍處於測試版。文檔很好,但有時我發現ODM與Active Record提供的傳統(SQL)數據庫系統相比非常有限。

即使到了這個日子,我覺得使用PostgreSql比Mongodb更容易。只是因爲我可以連接表並對數據做任何事情。

我做了兩種類型的備份。一個使用PostgreSQL,另一個使用Mongodb。有人說,有些應用程序更適合於其中一種或另一種類型的數據庫。我應該繼續使用Mongodb,並最終希望其RoR ODM(Mongoid)完全成熟,還是應該考慮使用PostgreSql?

還有幾個問題: 1)哪一個更適合開發類似Facebook的社交網站。 2)哪一個更適合4頁標準佈局類型的網站(主頁,產品,關於,聯繫人)

+0

今天,2015年,與[PostgreSQL 9.4穩定版的JSON支持](http://www.postgresql.org/docs/9.4/static/datatype-json.html),** MongDB是沒有吸引力**:參見[基準](https://github.com/EnterpriseDB/pg_nosql_benchmark)和[**確認**](http://developer.olery.com/blog/goodbye-mongodb-hello-postgresql/) 。查看更多信息[@Jameel Grand answer](http://stackoverflow.com/a/28756884/287948) – 2015-05-17 04:29:39

回答

49

您傾銷了一個經過數十年測試的全功能RDBMS,用於年輕的beta版質量特性因此只有很少的社區支持。除非您已經在服務器上每月運行數萬美元,並且認爲MongoDB更適合您的數據性質,否則您可能浪費了大量時間來獲得負面收益。 MongoDB玩起來很有趣,而且由於這個原因我自己創建了幾個應用程序,但它幾乎從來都不是比Postgres/MySQL/SQL Server /等更好的選擇。用於生產應用。

+0

我同意你的觀點,即RDBMS已經存在了數十年,並帶來了所有的好處。讓我思考的一件事是。如果關係數據庫管理系統的性能如此之好,那麼爲什麼看起來好像只有少數幾家熱門網站在線使用它(http://www.mongodb.org/display/DOCS/Production+Deployments),當他們可以堅持使用它們時原始的SQL數據庫實施?我不認爲MongoDb從它的立場來看具有「貝塔質量」。否則,爲什麼長期的生產部署? – 2010-12-13 20:54:17

+10

它的測試質量和部署列表都具有誤導性。這些上市公司中的大多數都使用MongoDB進行單邊項目,他們沒有在其上運行主要服務。閱讀每個公司名稱旁邊的註釋 - 一個用於跟蹤單個Web表單,另一個用於內部報告應用程序等。實際使用MongoDB作爲其主要服務的少數幾個是Foursquare,然後返回咬他們幾天的宕機時間,如果他們正在使用RDBMS,這些宕機時間不會發生。 – 2010-12-13 23:26:57

+1

感謝您取回丹。閱讀更多的部署列表。這確實是誤導人的。他們中的大多數都將MongoDB部分集成並且不完全。有兩種類型的數據庫,這不僅僅是在工作上創造更多的努力嗎?其次,我的應用似乎沒有在MongoDB上運行任何大問題。儘管仍處於發展階段。沒有在生產中運行任何測試。在我遇到MongoDB未來遇到的更大問題之前,我是否應該考慮切換回RDBMS? – 2010-12-14 15:11:17

13

讓我們引用你寫的,看看它告訴我們:根據你說過它看起來像你對我應該堅持的PostgreSQL

"I like a few things with Mongodb. However, I found certain queries I was 
doing in PostgreSql, I couldn't do efficiently in Mongodb. Especially, 
when I had to join several tables to calculate some logic." 

"I found the ODM to be very limiting compared to what Active Record offered 
with traditional (SQL) database systems." 

"I feel more comfortable working with PostgreSql than Mongodb. Only because 
I can join tables and do anything with the data." 

。密切關注MongoDB,並在適當的時候使用它。但鑑於你所說的話,聽起來PG現在更適合你。

分享和享受。

2

我沒有使用過的MongoDB着呢,可能永遠不會得到全面它,因爲我沒有發現任何東西,我不能做的Postgres,而只是引用了PostgreSQL的9.2版本說明:

使用PostgreSQL 9.2,查詢結果可以作爲JSON數據類型返回。 結合新的PL/V8 Javascript和PL/Coffee數據庫 編程擴展以及可選的HStore鍵值存儲,用戶 現在可以像使用「NoSQL」文檔數據庫一樣使用PostgreSQL,而 保留PostgreSQL的可靠性,靈活性和性能。

因此,看起來像Postgres的新版本,你可以擁有兩全其美。我還沒有用過這個,但是作爲PostgreSQL的粉絲(優秀的文檔/郵件列表),我會毫不猶豫地將它用於幾乎所有與RDBMS相關的東西。

1

我們也有同樣的更好的研究。 PostGresMongoDb。但是掌握了所有的事實和數據後,我們發現PostGres比MongoDb更好用。在MongoDb中,除了佔用內存和CPU之外,它還佔用大量的磁盤空間。它在特定的時間間隔增加2倍大小的磁盤。

2

首先,postgres是一個RDBMS,而MongoDB是NoSQL。
但獨立NoSQL技術不符合ACID標準,因爲它們犧牲了關鍵數據保護,有利於非結構化應用的高吞吐量性能。

Postgres 9.4提供NoSQL功能以及完整的事務支持,存儲JSON文檔和字段數據的約束。

所以你會從兩個RDBMS得到的所有優點和NoSQL

檢查它詳細的文章http://www.aptuz.com/blog/is-postgres-nosql-database-better-than-mongodb/

要體驗Postgres的NoSQL的表現自己。在GitHub上下載pg_nosql_benchmark。這裏是鏈接https://github.com/EnterpriseDB/pg_nosql_benchmark

0

我在使用Postgres和Mongo處理我的項目中的兩個數據庫後的經驗。

的Postgres(RDBMS)

如果你未來的應用有需要大量的連接或全部數據有關係,或者如果我們有重寫一個複雜的架構,建議Postgres的。 Postgres是開源的,速度更快,符合ACID標準,並且在磁盤上使用更少的內存,而且對於JSON存儲也具有良好的性能,並且包含具有3級事務隔離的事務的完全可串行化。

留在Postgres的最大優勢是我們兩全其美。我們可以將數據以約束,一致性和速度存儲到JSONB中。另一方面,我們可以將所有SQL功能用於其他類型的數據。底層引擎非常穩定,並且可以很好地處理大量數據量。它也運行在您選擇的硬件和操作系統上。 Postgres提供NoSQL功能以及完整的事務處理支持,存儲JSON文檔和字段數據的約束。

Postgres的

縮放Postgres的平鋪一般約束是顯著困難,但可行的。

Postgres無法完全實現快速讀取操作。

NO SQL數據庫

蒙戈DB(有線虎)

的MongoDB可以以「水平尺度」的尺寸擊敗Postgres的。存儲JSON是Mongo優化的目標。 Mongo以一種稱爲BSONb的二進制格式存儲其數據,該格式(大致)只是JSON超集的二進制表示。 MongoDB完全按照它們的設計存儲對象。據MongoDB稱,對於寫密集型應用程序,Mongo表示,新引擎(Wired Tiger)爲用戶提供了高達10倍的寫入性能(我應該試試),存儲利用率降低了80%,有助於降低存儲成本,實現更高的硬件利用率。

的MongoDB的一般限制

架構更少的存儲引擎導致隱性模式的問題的使用。這些模式不是由我們的存儲引擎定義的,而是基於應用程序行爲和期望定義的。

獨立的NoSQL技術不符合ACID標準,因爲它們犧牲了關鍵數據保護,有利於非結構化應用的高吞吐量性能。在NoSQL數據庫上應用ACI並不難,但它會使數據庫在某種程度上變得緩慢和不靈活。 「大部分NoSQL限制都在較新的版本和版本中進行了優化,這些版本在很大程度上克服了以前的限制」。

  1. 哪一個更適合開發類似Facebook的社交網站? Facebook目前使用Hive和Cassandra等數據庫組合。
  2. 哪一個更適合4頁標準佈局類型的網站(家,產品,關於,聯繫) 這又取決於你想要如何存儲和處理你的數據。但是任何SQL或NOSQL數據庫都可以完成這項工作。