動態拓展,是資料訪問層在執行時,甚至是在二次開發中,才會遇到或者需要解決的問題,它很重要,卻不一定如它的重要性那樣迫切.在服務層面,我們為了保持架構的拓展性和可維護行,自然而然想到soa,想到了服務的切分.那在資料層面的,為了保持庫的簡潔,易維護,同時為了儲存海量資料,我們自然而然的要對庫做切分,需要分庫分表,庫該如何切分,這個看似很簡單的命題(不外乎就是把本來在乙個庫中的資料放入多個庫中,同時把本來放在乙個庫中的表放在多個庫中),但是實際使用中,這會給開發帶來不可避免的麻煩.
[b]第乙個**煩:跨庫查詢.[/b]所謂跨庫查詢是指有也業務需求情況下,我們的一次查詢,必須從多個資料庫獲得資料,但是大家都知道傳統的關係型資料庫對切分的容忍性是很低,基本不支援跨庫的查詢,最頭疼的是,根據資料分組的查詢條件,連線方式及jion的條件及分頁的不同,獲取特定條件下的特定資料!如果解決這個問題呢?我們想了很多種解決方案,最理想的貌似是**的myfox(參見[url]它為程式設計師開發提供了良好的程式設計介面,而且幾乎是透明的,貌似是完美的解決方案,但是他們實現的代價可能過大,也許需要乙個龐大的團隊來維護他們**,才能保證功能正確.對於很多企業,這可能是不現實的,無論是自己實現,還是使用他們開源的框架,都有點令人不寒而慄的感覺,技術複雜到一定程度,已經很難為效率服務!在我們的資料訪問層中,我們堅持了幾項基本原則:
[list]
[*]1.以最簡單,最小的代價實現目標.
[*]2.不做我們不擅長做的事情(不幫我們的查詢做跨庫的產訊拼接).
[*]3.程式設計師程式設計友好,我們希望程式設計師壓根不知道他們在坐跨庫查詢.
[/list]
依據以上的幾條,我們採用了"共享中心"的設計方案.
何為共享中心呢? 共享中心就是我們資料共享的地方!
和誰共享呢?當然是我們不同應用間共享資料!
最終我們只在我們的資料訪問層增加了乙個方法就獲得了如下的效果:
[list]
[*]1.跨庫查詢對程式設計師是透明的,我們的資料訪問層會智慧型檢測出該查詢是否需要訪問共享中 心而動態路由到共享中心對資料進行關聯查詢?
[*]2.共享中心依然是按我們的分庫分表原則進行的.
[*]3.共享中心是可以動態替換的.
[/list]我們使用的方式是,讓一些關鍵表的關鍵列被動態插入到共享中心,我們的資料訪問層提供了對資料的監控,我們能方便的監控一些列的改變,從而保證共享中心資料被半實時同步更新!當然這只是實現共享中心資料同步的一種方案,具體不同的應用中,可採用不同的同步方案.我們只能保證在可見時間後,查詢才會有效,(新插入的資料才會被查詢出來,一般在2s-3s),但是這個結果我們完全能接受,因為需要跨庫查詢的地方,一定是複雜查詢,而複雜查詢伴隨關鍵資料新增和修改的機率很小.
希望這篇文章能幫助跨庫查詢的朋友,我會在接下來的文章中陸續介紹遇到的問題和解決辦法,最後會詳細介紹我們資料訪問層的實現方案!
大資料平台下多租戶架構研究
多租戶技術 multi tenancy technology 是一種軟體架構 技術,它是在 與實現如何於多使用者的環境下共用相同的系統或程式元件,並且仍可確保各使用者間資料的隔離性。在大資料環境下實現多租戶涉及如下關鍵技術 1.資源池 hadoop資源池 pool 或者作業池。每個pool裡有一定量...
大資料雲平台Greenplum 多租戶篇
greenplum 是最出色的開源mpp資料庫,經過15年的發展,從資料倉儲發展成了雲時代的理想大資料平台。本系列文章將從各個方面介紹greenplum對雲的支援。本篇側重多租戶。多租戶指一套系統能夠支撐多個租戶。乙個租戶通常是具有相似訪問模式和許可權的一組使用者,典型的租戶是同乙個組織或者公司的若...
EEPlat PaaS中的多租戶資料隔離模式
eeplat paas支援三種租戶的資料隔離技術 sparce column tenantid欄位隔離 每乙個租戶獨立資料庫。eeplat paas平台產品提供了更加強大的元模型體系。2 tenantid欄位隔離。tenantid的字段隔離是為每乙個業務表加上tenantid欄位。用以區分租戶的資料...