2012-06-30 62 views
0

我必須重寫32臺服務器上運行的大型數據庫應用程序。硬件是最新的,每臺機器有兩個四核心Xeon和32 GB RAM。針對大型Web應用程序選擇哪種數據庫策略

數據庫是多租戶,每個客戶都有自己的文件,每個文件大約5到10 GB。我在這個硬件上運行了大約50個數據庫。該應用程序是開放的網絡,所以我沒有控制 負載。沒有真正複雜的查詢,因此如果有更好的解決方案,則不需要SQL。

數據庫每天午夜都通過FTP更新。數據庫是隻讀的。 C#是我最喜歡的語言,我想使用ASP.NET MVC。

我想到了以下選項:

  • 使用兩運行SQL Server 2012的大SQL服務器來提供32臺服務器的數據。在運行提供REST服務的IIS託管的32臺服務器上。

  • 非規範化數據庫並在每個Web服務器上使用Redis。使用bookleeve作爲Redis客戶端。

  • 使用SQL Server和Redis的組合

  • 使用SQL Server 2012一起使用Hadoop

  • 使用Hadoop的沒有SQL服務器

什麼是最好的方式爲讀只有數據庫,才能獲得最佳性能而不會失去可維護性?在這種情況下Map-Reduce是否有意義?

重寫的原因是,使用ISAM技術以C++編寫的舊應用程序太慢了,接口舊式且不適合從網站使用,尤其是在使用ajax時。

該應用程序使用具有多個表的關係數據模型,但可以編寫一個可以在其上執行所有查詢的accerlerator表,並且可以通過簡單的鍵查找從其他表中獲取所有其他信息。

+1

你真的沒有告訴我們任何關於當前體系結構,當前使用模式,任何當前瓶頸的有用信息......或者爲什麼這個「大型數據庫應用程序」需要首先被重寫!因此,讓我問一個問題:用戶目前正在存儲或使用的是Hadoop無法完成的任何操作,就像使用SQL Server一樣容易?沒有表格,沒有關係,沒有SQL查詢? – paulsm4

+0

對不起,我試圖保持這個問題儘可能通用:-) – NickD

回答

1

很少有問題。出現了什麼問題,你重寫了這個?查詢模式是什麼樣的?這聽起來像你最適合使用SQLServer +緩存(memcached)來解決導致你重寫這個問題的任何問題。 Redis很好,但你不需要db處理查詢所需的數據結構特性,而且如果僅用作緩存,則不需要持久性。不知道更多關於這個問題的信息,我想我會考慮MongoDB來處理數據分片,冗餘存儲和緩存。在此設置中沒有特殊的機器,可以配置冗餘,並且負載應該平衡。

1

這個問題幾乎是一個意見件。如果性能是最重要的,並且如果一天中的併發讀取量很高,我個人更喜歡使用TimesTen的Oracle RAC進行緩存。

這裏有一張白皮書......

http://www.oracle.com/us/products/middleware/timesten-in-memory-db-504865.pdf

跨物理磁盤索引和數據文件的磁盤子系統和組織的規範可能是雖然最重要的因素。

相關問題