2012-03-26 120 views
1

這是我在stackoverflow的第一篇文章〜 我正在尋找正確的數據庫/引擎給我這麼一個小背景: 通過瀏覽很多問題和答案後,我發現很多數據庫對於特定類型的網站都是最好的。另一方面,我看到的很多帖子都是從2011年開始的,所以也許有新的選擇!Percona,MariaDB,MongoDB,Couchbase和其他替代品

我使用這個數據庫的網站將需要大量的讀取和一些寫入。因爲它需要大量的READS,並且我一般都知道哪些數據部分將主要在某個特定時間使用,所以我正在考慮使用Redis或Memcache之類的東西。 (我也看過類似VoltDB的東西,並意識到我不可能或更多,所以不想將所有數據存儲在RAM上)

我不擅長從數據庫 - >服務器層所以任何正確方向的光線都會有幫助。我相信我在體系結構上最好的選擇就像是我需要的每個對象的一個​​鍵/值,並且將當前真正需要的東西放在RAM中,每當我需要或不需要某些數據時釋放內存了。

我希望人們能給我一些建議。

  1. 到目前爲止,是否有任何新的Percona或MariaDB或MongoDB或Couchbase的替代方案?

  2. 到目前爲止,是否有任何新的Percona或MariaDB或MongoDB或Couchbase的替代方案?

  3. 有沒有這些postgresql的替代品呢?任何我看不到多少的原因?

    **即使是關於混合方法或其他接近架構的方法的信息也非常受歡迎。

非常感謝您的幫助!

回答

0

最好的辦法是在中間層實施一個標準的SQL後端,並採用積極的緩存。您可以使用Memcached或JCS進行緩存。

如果您的應用程序在java中,請小心緩存時Java對象的序列化成本(編組/解組成本)。有幾個快速序列化器可以替代Java提供的標準序列化器。

如果您的應用程序是基於Web的,則可以使用Varnish實施前端緩存。

0

我同意Srini。使用標準的數據庫解決方案(MySQL可能是最常見的)+高速緩存,並且您不希望使用任何少於一年的解決方案。

0

縮放讀取通過緩存完成。反常聚集也是常見的方法。 像Mongo這樣的NoSQL解決方案不是關於讀取擴展,而是關於寫入擴展,以及關於靈活的模式(因爲它們通常是無模式的)。當然,像MongoDB這樣的文檔商店可以很容易地在單個查詢中讀取整個數據,但是如果這對您的應用程序有利,則取決於您擁有的數據和關係。因此,如果您想知道要選擇什麼類型的存儲,請查看您的數據模型。

在大多數情況下,如果您唯一關心的是讀取的含義,那麼帶有內存緩存的RDBMS(memcached,redis)就足夠好了。

6

我個人首先將一個大的應用程序從mysql切換到mariadb,然後切換到postgres。

我認爲這是我曾爲這家公司做過的最好的事情。 PostgreSQL真的可以與那裏所有的大數據庫(Oracle,MS-SQL)相媲美。優化在許多不同的層上也是可能的。

我真的不會使用MySQL,如果你不必。 MySQL確實受到了損害,因爲甲骨文收購了它(順便說一句,我認爲它不是一個很好的數據庫)。

NoSQL(如Mongo,CouchDB)是一個選項,因爲它快速簡單。但是,如果你必須處理關係,SQL會是更好的選擇,我想。但我不是經驗豐富的NoSQL用戶。

在我們公司,我們曾經使用memcached,這是一個非常好的選擇,因爲它非常快。但我們不得不放棄它,因爲它不是太動態。但這真的取決於你的問題。


編輯:自從我被要求詳細闡述PGPostgreSQL)與MySQL辯論我的觀點,我還寫了:

我覺得一個很好的理由在選擇PGMySQL是,你不會找到任何關於如何從pg切換到mysql的指南。 :-)這是一個小小的舌頭,但我真的認爲它有一些事實。我不會在這裏討論基準,因爲我不認爲這是一個很大的差異,相當和恕我直言,大多數時候並不重要。

基本上我認爲與MySQL相比,pg是一個非常乾淨的數據庫。 MySQL有點像PHP:接受輸入並用它做一些事情。但neve失敗!例如,MySQL使用的datetime conversions有時候可怕。錯誤的日期,你的數據庫中有0000-00-00 00:00:00。也許有人可以,但我不是。我真的很喜歡PG的索引,它們是far better than MySQL's

PG的功能通常要好得多。我覺得在這個崗位Postgres 9.1 vs Mysql 5.6 InnoDB?一個答案有一個很好的總結:

  • 延遲約束
  • 檢查約束
  • 表函數(SELECT * FROM創建my_function())
  • 公用表表達式
  • 遞歸查詢(使用通用表格表達式)
  • 開窗功能
  • 基於功能的索引
  • 部分指數
  • 的事務表全文搜索
  • GIS功能的事務表
  • 減號或INTERSECT操作

其中有些是在某些情況下非常有用。

我認爲在MySQL中唯一更好的是複製。我不喜歡那個PG曾經有9.0之前沒有內置的複製和我9.0後不喜歡複製的事實,因爲它是不非常定製(`我的。不過,這只是一個細節。

我最後要說的一點是:MySQLPG更容易啓動。Postgres稍微複雜一些,因爲它有更多的功能。對於一些人來說,PG模式概念可能有點奇怪。直接適用於初學者

因此,如果你正在尋找一個堅實和良好的數據庫,可以從簡單的Web應用程序使用複雜到安全的網上銀行到GIS系統選擇PostgreSQL。如果你正在用ORM編程一個應用程序,你可以選擇MySQL,這個應用程序只有幾張桌子,你根本不想進入數據庫的細節。

+2

強烈不同意MySQL已經甲骨文下遭遇。 MySQL 5.5是MySQL歷史悠久的最佳版本。期。 – 2012-03-26 21:16:10

+1

也許這是真的,但5.5很長一段時間了。我說'遭受'的原因是因爲許多核心開發者在收購之後離開(並創造了mariadb)。這可能不會成爲未來幾個月/年的問題,但數據庫應該在10年甚至更長的時間內得到增強(或者至少修正了這些bug)。 – 2012-03-26 21:52:58

+0

我一直在尋找postgres在MySQL上的優點的平衡觀點。你能否賜教我? – Duke 2012-08-08 17:49:24

2

Couchbase把分佈式緩存CouchDB中的前面,與另一子系統,用於聚類支持。這是非常關鍵的價值存儲(像memcached),所以不是強關係數據的最佳選擇,或者如果你需要交易。

如果只有你的整個數據集的一部分將在任何一個時間點上使用(如Farmville的那裏是隻有少數人在任何指定時間登錄),它會奇妙的工作,因爲它會自動緩存到其memcache組件,並且還提供永久存儲而不需要很多調整。

你將不得不看磁盤讀取隊列,一旦你的應用程序變得很大,並添加更多的服務器,如果與高速緩存未命中的讀請求比磁盤讀取吞吐量更大。

剛纔尋找到蒙戈,但Couchbase是如此簡單,它是難以抗拒。