簡介
Interference是一個簡單的Java框架,使您可以使用類似JPA的接口和註解在Java應用程式中運行分布式資料庫服務。
Interference服務的基本單元是一個節點-實際上,它是一個Java應用程式,其中運行服務實例。
每個Interference節點都有其自己的持久性存儲,並且可以視為具有以下基本功能的本地資料庫:
使用簡單對象(POJO)操作使用基本的JPA註解(@ Table,@ Column,@ Transient,@ Index,@ GeneratedValue)將對象直接映射到持久性存儲
支持轉換支持具有READ COMMITTED隔離級別的SQL查詢使用簡單快速的序列化使用持久索引來快速訪問數據並提高SQL連接的性能節點可以加入集群,在具有節點間交互的集群級別,我們獲得以下功能:
允許您從集群中包含的任何節點插入數據並運行SQL查詢支持水平擴展SQL查詢支持透明的集群級事務支持複雜的事件處理(CEP)和簡單的流式SQL節點不需要啟動任何其他協調器分布式持久模式
Interference集群是一個分散的系統。這意味著集群不使用任何協調節點。取而代之的是,每個節點都遵循一組行為的正式規則,這些規則可以保證特定交互框架內數據的完整性和可用性。
在這些規則的框架內,Interference集群的所有節點都是等效的。這意味著主節點系統和從節點系統之間沒有分隔-可以從任何節點對用戶表進行更改。同樣,所有更改都將複製到所有節點,無論在哪個節點上進行更改。
談論事務時,在本地用戶會話中運行提交會自動確保更改的數據在所有群集節點上可見。
要將節點包括在群集中,必須指定群集節點的完整列表(當前節點除外)。
群集節點的最小數量為2,最大數量為64。
配置後,我們可以按任何順序將所有已配置的節點啟動為集群。所有節點都將使用特定的消息(事件)來提供節點間數據一致性和水平擴展查詢。
分配規則
所有群集節點都是等效的任何節點上的所有更改都映射到其他節點如果無法進行複製(節點不可用或連接斷開),則會為此節點創建一個持久更改隊列任何數據幀的所有者都是在其上分配了該幀的節點系統使用實體的唯一標識符(@DistributedId)的生成,以便標識符在群集內唯一,而不僅僅是在同一節點內
嚴格在本地結構中執行數據插入,然後只能在具有此記錄的數據幀的節點所有者上執行複製的更改(更新/刪除)SQL水平擴展查詢
在任何群集節點上調用的所有SQL查詢都將自動分布在群集節點之間,以進行並行處理。節點根據對任務量的分析(查詢表的量足夠大等)來做出這樣的決定。
如果在處理請求期間某個節點不可用(網絡故障,服務已停止),則為此節點分配的任務將自動重新安排到另一個可用節點。
複雜事件處理
Interference使用SQL語句中的SELECT STREAM子句支持複雜的事件處理。SELECT STREAM查詢支持三種CEP模式:
事件按原樣處理,沒有任何匯總通過使用任何組函數按列值匯總事件一些窗口匯總每個新記錄的事件流式查詢與通常的查詢之間的基本區別如下:
execute()方法返回一個StreamQueue對象,該請求將異步執行,直到調用StreamQueue.stop()方法或應用程式終止為止
StreamQueue.poll()方法根據WHERE條件(如果存在)返回先前插入表中的所有記錄,並繼續返回新添加的記錄每個StreamQueue.poll()方法始終返回會話中最後一個輪詢位置之後的下一個記錄,因此,如果停止了SQL請求並在同一會話中再次調用該SQL請求,則將從上一個固定位置繼續進行數據檢索,將從表的開頭檢索另一個會話數據
與通常不同,流請求不支持事務,並且始終返回實際插入的行,而不管會話插入數據中使用commit()方法(DIRTY READS)如何