2011-12-11 89 views
0

我插入了一個高容量的OLTP數據庫,我可以隨意改進,儘可能多地找到合理的可能。改進已經非常有幫助,但我想把它提升到一個新的水平。我發現的數據訪問模式使得它成爲IMO在其他服務器上緩存數據的良好備選方案,我很樂意聽到任何人使用此類設置的經驗或建議。用於SQL Server OLTP Env的Web緩存服務器。建議

我們有一個數據庫,每天可以獲取約3GB的數據添加到表中,並且報告過去非常緩慢。數據一旦放入,數據就不會改變,並且沒有插入超過一週的數據。在過去3天內輸入的行傾向於在數千萬行之間看到數千個插入。

我在考慮將2周以上的數據推送到MongoDB。然後,我可以將2周內沒有推送到Mongo的滑動窗口數據緩存到某種緩存軟件中,以便查詢和顯示這些數據,而不是從數據庫中一直讀出數據。我這樣想,我們仍然可以通過讓數據庫引擎驗證所有數據,具有高讀取性能,因爲它不會觸及數據庫,因此我們仍然可以獲得完整的A.C.I.D合規性,那麼當Mongo不再是「交易」時,Mongo可以採用它。

任何人有任何推薦的解決方案?我在看MemCached,但不太確定這是否是一個好的或者甚至是合理的解決方案。謝謝!

+0

沒有人有任何緩存SQL Server數據的經驗嗎? :/ –

回答

0

我沒有使用SQL Server的特定經驗,但是您所描述的看起來好像是MongoDB的有效用例。

請注意,儘管MongoDB無法直接處理事務,但它能夠以原子方式處理某些操作(例如,請參閱findAndModify)。另外,啓用日誌功能後,您不應該有任何理由擔心持久性。 MongoDB是一個可靠的數據存儲,不會丟失或損壞您的數據。

如果您運行禁用日記功能的第二個部署,則MongoDB本身也可以充當高性能緩存。在這種情況下,寫操作將在內存中進行,並且只能每60秒持久保存到磁盤(除非另行配置)。這將提供與僅在內存中的memcache相當的性能,同時允許您使堆棧更簡單一些。

希望這會有所幫助!

2

您可以考慮的另一件事是在SQL Server 2014中使用新的內存中OLTP功能。該功能可提高OLTP工作負載的效率和擴展性。您將有可能從現有服務器中獲得更多,而無需考慮特定的緩存機制。

+0

謝謝喬斯!當我們說話時,我已經在我的實驗室裏得到了它;)好的建議。在內存中,OLTP解決了很多問題,代價是將其轉換爲髒讀,幸運的是,對於我目前的需求,我很好。 –

+0

@Ali在內存OLTP中不會出現髒讀。它使用一個鎖定和閂鎖免費版本的MVCC,因此快照是最小的隔離級別。 –

+0

@MartinSmith對,很好的電話。我記得聽說Kalen Delaney或Kim Tripp提到'內存表基本上會關閉鎖定/阻塞引擎',但根據技術白皮書,它使用MVCC。很高興知道,謝謝! –