2016-08-02 71 views
0

我們正在調查different alternatives存儲對象的變化,並發現JaVers似乎是完全用於此目的的工具。Javers將數據保存在單個表中的潛在可伸縮性問題?

我們已經構建了一個原型(使用MySQL進行變更回購),該原型已經很好地實現並實現了所承諾的內容。到現在爲止還挺好。

但是,JaVers似乎將所有內部數據存儲在4個表中。對於小數據集來說,這不是一個大問題,但是如果原始數據模式具有真正大的表格(每個數百萬/數十億記錄)會發生什麼?在如此大的表中更新記錄意味着向JaVers審計表添加一個記錄,該記錄將會非常大(最有可能比原始數據庫的大小更大)。

從我們之前使用大型審計表的經驗來看,我們遇到了像inserts開始減慢,查詢絕對年齡等問題。我們需要頻繁地獲得增量,所以這看起來像是一個定時炸彈。

1)是否有可能配置JaVers所以它存儲在單獨的表的變化,每每個實體一個 - 像

  • foo_global_idfoo_snapshotfoo_commitfoo_commit_property
  • bar_global_idbar_snapshotbar_commitbar_commit_property

如果目前還不可能,那麼添加這樣的功能有多難(u願意投入時間並提交補丁)?

2)比方說,我們有

class Foo { 
    String bar; 
} 

一段時間後,我們決定添加一個字段

class Foo { 
    String bar; 
    int baz = 0; 
} 

我懷疑,如果我們更新的Foo一個實例,並改變bar僅但保留baz = 0 ,JaVers將會報告說baz=0已被添加。 JaVers中是否有任何設計用於處理數據模型更改並避免此類誤報的內容?

+1

有趣的問題,將在晚上回答 –

回答

1

解決方法a)您建議在JaVers SQL Repository中不可能解決這個問題。這將是很難實施。考慮在SQL中實現類似child-value-objects-filter的跨級別查詢。

事實上,它會是某種在SQL DB中很難實現的分片。

對於大型數據庫,我們推薦使用MongoDBhttp://javers.org/documentation/repository-configuration/#mongodb-configuration)。在MongoDB中,分區級別的開箱即用。

考慮到b)問題。我不會說這是一個誤報。 對象:{'bar':'a'}{'bar':'a', 'baz':0}是不同的。如果baz將爲空(整數),則可以消除此類更改。